STM32 IWDG Печать
Добавил(а) microsin   

Аббревиатура IWDG обозначает Independent Watchdog, т. е. "независимый сторожевой таймер". Это самый обычный сторожевой таймер, который уже давно применяется во всех современных микроконтроллерах. Таймер IWDG может использоваться для сброса системы, когда произошло зависание программы, а также как свободно считающий вниз 12-битный счетчик для отслеживания таймаута в программе (формирования задержек).

Если IWDG активирован, то его нельзя запретить, и необходимо периодически обновлять. IWDG получает тактирование от независимого низкоскоростного внутреннего генератора 32 кГц (Low-Speed Internal RC generator, LSI), поэтому тактирование LSI сохраняется, даже если отказал основной тактовый генератор системы. С помощью 8-битного прескалера, который делит частоту LSI, можно управлять частотой тактирования IWDG. Таким образом, основное достоинство IWDG в том, что он работает независимо от основной тактовой частоты микроконтроллера. Также IWDG можно сконфигурировать аппаратно или программно, используя байты опций.

IWDG block diagram

Регистры IWDG находятся в домене напряжения питания ядра (CORE, 1.8V), в то время как функции IWDG могут влиять на домен VDD периферийных устройств. Таймер IWDG можно приостановить входом в режим Standby или Stop. Однако архитектура IWDG устроена так, что он можно продолжить работать в режимах Standby или Stop.

Когда IWDG запущен, его 12-битный счетчик начинает считать вниз от значения сброса 0xFFF. Чтобы обновить значение счетчика IWDG значением из регистра перезагрузки, в регистр ключа (IWDG_KR) должно быть записано значение 0x0000AAAA. Если этого не сделать, то в момент достижения счетчиком IWDG значения 0x000 сгенерируется сброс системы.

Если разрешена опция окна, то счетчик должен обновляться значением в пределах этого окна, иначе будет сгенерирован сброс.

Если IWDG сконфигурирован аппаратно байтами опций, то он сразу начинает работать при включении питания. Для предотвращения сброса регистр ключа с регулярными интервалами должен обновляться значением 0x0000AAAA, чтобы счетчик IWDG не успел досчитать до 0. Если опция окна разрешена, то обновление должно происходить в пределах окна.

Программное конфигурирование IWDG:

1. Разрешите IWDG записью 0x0000CCCC в IWDG_KR (регистр ключа). Это запустит счетчик таймера IWDG.

2. Разрешите доступ к регистру путем записи 0x00005555 в IWDG_KR. Это снимает защиту регистров IWDG.

3. Запрограммируйте прескалер IWDG программированием регистра IWDG_PR.

4. Установите значение регистра IWDG_RLR (регистр перезагрузки).

5. Подождите момента обновления регистров (IWDG_SR = 0x00000000).

6. Если нужно разрешить опцию окна, то запишите значение окна в регистр IWDG_WINR. Это автоматически обновит счетчик значением из IWDG_RLR.

7. Если опция окна разрешена, то обновляйте счетчик значением из IWDG_RLR путем записи 0x0000AAAA в регистр IWDG_KR.

Интервал срабатывания IWDT можно установить от 125 мкс до 32.8 секунд. Величина таймаута IWDG определяется формулой:

t_IWDG(мс) = t_LSI(мс) * 4 * 2(IWDG_PW[2:0]) * (IWDG_RLR[11:0]+1)

Здесь t_LSI это период следования импульсов LSI, равный 1/32000 = 0.03125 секунды, или 31.25 мс.

После сброса можно проверить, был ли этот сброс вызван IWDG, путем чтения флага IWDGRSTF в регистре RCC_CSR.

Счетчик IWDG можно установить, когда ядро остановлено, в зависимости от конфигурации DBG_IWDG_STOP в модуле DBG. Когда микроконтроллера STM32 входит в режим отладки (Degug mode), счетчик IWDG продолжит нормально считать либо остановится - в зависимости от бита конфигурации DBG_IWDG_STOP в модуле DBG (MCUAPB1).

IWDG может считать (быть в состоянии активности) в рабочих режимах микроконтроллера и его режимах пониженного энергопотребления, кроме режима отключения Shutdown. Кроме того, в режимах Stop0, Stop1, Stop2 и Standby счетчик IWDG может быть остановлен либо может продолжать счет в зависимости от программирования соответствующих бит в регистре FLASH_OPTR.

Таблица активности IWDG в различных режимах микроконтроллера (если IWDG был разрешен):

Режим STM32 Описание активности IWDG
Run Активен.
Sleep
Low power run
Low-power sleep
Stop0, Stop1 Активен, или счет может быть остановлен в зависимости от бита IWDG_STOP в регистре FLASH_OPTR.
Stop2
Standby Активен, или счет может быть остановлен в зависимости от бита IWDG_STDBY в регистре FLASH_OPTR.
Shutdown Выключен.

[Ссылки]

1Сторожевые таймеры STM32F4.