7.4.2. Независимый сторожевой таймер
Несмотря на то, что независимый сторожевой таймер является частью одного и того же кристалла МК STM32, он синхронизируется собственным генератором, который не связан с основной синхронизацией МК STM32. Независимый сторожевой таймер расположен в домене с питанием VDD, которое остается активным в режимах STOP и STANDBY.
Независимый сторожевой таймер представляет собой 12-битный вычитающий счетчик, который генерирует сигнал сброса при переходе через нулевое значение. Счетчик синхронизируется от отдельного внутреннего низкочастотного генератора через 8-битный предделитель. Номинальная частота LSI-генератора равна 32.768 кГц, но на практике она может варьироваться в пределах 30…60 кГц. Для инициализации сторожевого таймера вначале необходимо настроить регистр предделителя, исходя из того, что коэффициент деления частоты LSI-генератора, который может лежать в пределах 4…256, равен 2 в степени числа, записываемого в регистр предделиетеля значения. Минимальный период срабатывания независимого сторожевого таймера составляет 0.1мс, а максимальный - свыше 26 секунд. Для задания периода срабатывания необходимо запрограммировать регистр перезагрузки.
Независимый сторожевой таймер - вычитающий счетчик с собственным генератором. Он расположен в домене с резервированием питания и. поэтому, остается активным в режимах Stop и Standby
Для автоматической или программной конфигурации независимого сторожевого таймера может быть задействован небольшой информационный блок во Flash памяти, состоящей из нескольких опциональных байт. Для запуска независимого сторожевого таймера при программном управлении необходимо записать 0xCCCC в регистр ключа. После этого, счет начнется в обратном направлении со значения 0xFFF. Для обновления сторожевого таймера в регистр ключа необходимо записать 0xAAAA. Это приведет к записи заданного перезагружаемого значения в регистр вычитающего счетчика.
Обычно, отлаживать программу микроконтроллеру с активным сторожевым таймером очень сложно. Если ЦПУ окажется остановленным, то и обновлять сторожевой таймер будет некому. В итоге, произойдет его срабатывание и будет выполнен сброс микроконтроллера, который нарушит отладочную сессию. Во избежание этого, разработчики обычно на время отладки отключают сторожевой таймер. Но такой подход, в свою очередь, затрудняет тестирование и испытание функции обновления сторожевого таймера. У МК STM32 в регистре MCUDBG предусмотрена возможность настройки отключения независимого и отдельного сторожевых таймеров на время приостановки ЦПУ Cortex-M3, выполненной встроенной отладочной системой CoreSight. Благодаря этому, появляется возможность пошагового выполнения кода программы даже с активным сторожевым таймером.
|