Контроллер завис в поле, но сторожевой таймер его не перезагрузил
Независимый сторожевой таймер (IWDG) настроен на 2 секунды. Чтобы он «никогда не срабатывал зря», его сбрасывают в обработчике системного таймера:
void SysTick_Handler(void) {
HAL_IncTick();
HAL_IWDG_Refresh(&hiwdg);
}
Устройство на объекте зависло в бесконечном цикле ожидания ответа модема и не перезагрузилось. Почему?
- SysTick работает и при зависшем главном цикле
- IWDG нельзя сбрасывать чаще раза в секунду
- В прерывании IWDG сбрасывается не полностью
- 2 секунды слишком мало для срабатывания IWDG
