СОВРЕМЕННАЯ ЭЛЕКТРОНИКА №5/2015

ЭЛЕМЕНТЫ И КОМПОНЕНТЫ 30 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 5 2015 Предварительный делитель частоты IWDG_PR Статусный регистр IWDG_SR Регистр загрузки IWDG_RLR 12-разрядное число загрузки 12-разрядный таймер 8-разрядный делитель частоты От генератора LSI 40 кГц Ключевой регистр IWDG_KR Современные 32-разрядные ARM-микроконтроллеры серии STM32: сторожевые таймеры В статье приведено описание сторожевых таймеров 32-разрядных ARM-микроконтроллеров серии STM32 от компании STMicroelectronics. Рассмотрена архитектура и состав регистров сторожевых таймеров, а также приведены практические примеры программ. Олег Вальпа (г. Миасс, Челябинская обл.) В ВЕДЕНИЕ Все микропроцессорные устрой- ства подвержены влиянию различ- ных помех, которые могут нарушить их работу и даже привести к «зависа- нию» программы. Это в свою очередь приводит к останову системы управле- ния и может повлечь за собой крайне опасные ситуации. Источниками помех могут являться различные коммутационные устрой- ства в питающей сети, воздействие электромагнитных полей, атмосфер- ные явления в виде разрядов молний и тому подобное. Защититься от подоб- ных помех не всегда возможно, поэтому в случае «зависания» процессора необ- ходимо автоматически восстановить его работу, например, путём переза- пуска. Это позволит восстановить рабо- ту системы и обеспечит высокий уро- вень безопасности систем. В своё время разработчики процессо- ров решили эту задачу с помощью сто- рожевых таймеров, получивших назва- ние «сторожевая собака». Идея решения заключается в том, что сторожевой тай- мер инициализируется и запускается самим процессором в начале работы программы. После чего данный таймер самостоятельно отсчитывает заданное время, и если в течение этого времени процессор ни разу не перезагрузит его, то таймер обнулится и перезапу- стит процессор. Таким образом, при нормальной работе процессора тай- мер будет регулярно перезапускаться, а в случае «зависания» процессора тай- мер через заданное время сформирует сигнал сброса для процессора и пере- запустит его. Микроконтроллеры серии STM32 [1] имеют два таких таймера. Один из них называется «независимый сторожевой таймер» (Independent Watchdog, IWDG), а другой – «оконный сторожевой тай- мер» (WindowWatchdog, WWDG). Рас- смотрим каждый из них отдельно. Н ЕЗАВИСИМЫЙ СТОРОЖЕВОЙ ТАЙМЕР Таймер IWDG тактируется специали- зированным низкочастотным сигна- лом LSI, благодаря чему он продолжает работу, даже если пропадает системный тактовый сигнал. Таймер осуществля- ет обратный отсчёт от заданного зна- чения до нуля. Сброс процессора тай- мер производит при достижении счёт- чиком таймера нуля. Этот таймер лучше всего подходит для тех приложений, которым необ- ходимо, чтобы сторожевой таймер был запущен как полностью независи- мый процесс, вне основного приложе- ния, но у которого были бы не слишком высокие требования к временны ′ м пара- метрам. Функциональная схема неза- висимого сторожевого таймера IWDG приведена на рисунке 1. Таймер IWDG запускается путём записи значения 0xCCCC в ключевой регистр IWDG_KR. Счётчик таймера начинает обратный отсчёт от значе- ния, заданного в регистре перезагрузки IWDG_RLR. По умолчанию этот регистр имеет значение 0xFFF. Когда счётчик досчитает до нуля, формируется сиг- нал сброса для процессора от тайме- ра IWDG. Каждый раз, когда в ключевой регистр IWDG_KR записывается зна- чение 0xAAAA, данные из регистра IWDG_RLR перегружаются в счётчик, что возобновляет отсчёт и предотвра- щает сброс процессора от IWDG. Если с помощью соответствующих битов конфигурации разрешена функ- ция «аппаратный сторожевой таймер», то сторожевой таймер автоматически запускается после подачи питания. Регистр предварительного делителя IWDG_PR позволяет программно задать коэффициент деления тактовой часто- ты для сторожевого таймера IWDG. По умолчанию регистры IWDG_PR и IWDG_RLR защищены от записи. Пре- жде чем изменить их значения, необ- ходимо записать код 0x5555 в регистр IWDG_KR. Запись в ключевой регистр любого другого значения снова забло- кирует запись в регистры IWDG_PR и IWDG_RLR. Период таймера вычисляется при помощи формулы: T=((4*2^IWDG_PR)* IWDG_RLR)/40 [мс]. Определить период отсчёта стороже- вого таймера для тактовойчастоты40кГц можно также с помощью таблицы 1. Рис. 1. Функциональная схема сторожевого таймера IWDG

RkJQdWJsaXNoZXIy MTQ4NjUy