Встроенная разработка — встроенные периферийные устройства STM32 — независимый сторожевой таймер IWDG

Разработка встраиваемых систем — Встроенные периферийные устройства STM32 — Independent Watchdog IWDG

сторожевая собака

В микрокомпьютерной системе, состоящей из однокристального микрокомпьютера, из-за того, что работа однокристального микрокомпьютера часто нарушается внешним электромагнитным полем, данные различных регистров и памяти путаются, что приводит к неправильному программному указателю, не в области программы, вынуть неправильные инструкции программы и т. д. Можно попасть в бесконечный цикл, нормальная работа программы прерывается, и система, управляемая однокристальным микрокомпьютером, не может продолжать нормально работать, что приводит к стагнации всей системы и непредсказуемым последствиям.

Сторожевой таймер, также называемый сторожевым таймером, по сути представляет собой схему таймера, обычно имеет вход и выход, где вход называется кормлением собаки, а выход обычно подключается к клемме сброса другой части, обычно подключаемой к однокристальной схеме. микрокомпьютер. Функция сторожевого таймера состоит в том, чтобы регулярно проверять внутреннее состояние микросхемы и посылать на микросхему сигнал перезапуска при возникновении ошибки. Команда watchdog имеет наивысший приоритет среди программных прерываний.

Выше скопированный контент, Грубо говоря, однокристальный микрокомпьютер может работать ненормально из-за помех, или программа может слетать из-за ошибок программирования. Или наоборот. Вполне возможно, что выполнение программы будет иметь неожиданные последствия.

Итак, мы настроили аппаратный механизм, который должен посылать сигнал на определенную аппаратную схему в течение фиксированного интервала времени.Если этот интервал времени будет превышен, аппаратная схема перезагрузит микроконтроллер, чтобы заставить программу выполняться повторно. Это повышает надежность системы. Этот аппаратный механизм называется сторожевым таймером. Подайте сигнал, чтобы покормить собаку. Как только собака тайм-аута залает, MCU будет сброшен.

Сторожевой таймер для STM32

Все серии STM32 имеют сторожевые таймеры, причем как независимые сторожевые таймеры (IWDG), так и оконные сторожевые таймеры (WWDG). Сегодня о независимом наблюдателе.
Как следует из названия, этот тип сторожевого таймера работает независимо. Он использует низкоскоростную внутреннюю синхронизацию LSI в качестве источника синхронизации. В различных сериях продуктов частота LSI составляет 32 или 40 кГц. Из-за большой погрешности частоты LSI может достигать более 2%, это следует учитывать при программировании. Как показано на рисунке ниже, погрешность частоты составляет 1К, то есть 3%
вставьте сюда описание изображения
вставьте сюда описание изображения

Использование независимого сторожевого таймера

Очень просто, всего 2 шага. Инициализируйте и накормите собаку.

инициализация

вставьте сюда описание изображения
Нажмите «Активировано», чтобы запустить независимый сторожевой таймер.
Нижний правый угол — это параметр инициализации, на примере микросхемы 40 кГц конфигурация, показанная на рисунке, составляет 40000/4/4095=2,5 раза в секунду, то есть сброс происходит каждые 400 мс. Собаку необходимо кормить в течение 400 мс, а интервал между любыми двумя кормлениями не должен превышать 400 мс.По истечении времени ожидания собака залает, и MCU немедленно перезапустится.

кормить собаку

Включите эту ссылку в файл, который должен кормить собаку

#include "iwdg.h"		//在需要喂狗的文件中加入此引用

Следующая строка — покормить собаку.

HAL_IWDG_Refresh(&hiwdg);	//喂狗

Советы по кормлению собак

1 Покормить собаку в основном цикле, это самый простой способ
2 Покормить собаку в функции мигания, это легко проигнорировать
3 Покормить собаку в функции функции, если выполнение функции занимает много времени, обратите внимание на лай собаки
4 в задержке Подайте собаку в функции времени.
Когда сторожевого таймера нет, задержку можно записать следующим образом

HAL_Delay(1000);	//延时1秒

При включении сторожевого таймера вышеупомянутая собака залает, и система перезагрузится, это должно быть написано следующим образом:

//延时1秒
for(i=0; i<10; i++)
{
    
    
	HAL_Delay(100);				//每次延时0.1秒
	HAL_IWDG_Refresh(&hiwdg);	//喂狗
}

5 Не рекомендуется открывать прерывание таймера, чтобы специально покормить собаку.

Supongo que te gusta

Origin blog.csdn.net/13011803189/article/details/130042669
Recomendado
Clasificación