目录
一、简单介绍

独立看门狗,顾名思义,是不依靠系统而独立存在的看门狗
可以脱离应用运行,但缺陷在于时序精度比窗口看门狗低
主要是为了系统运行安全而设置的,时钟来源是专用的LSI
二、特性

启动看门狗后会从0xFFF开始递减计数,一旦减至零,就会触发复位
在减至零前进行喂狗,就能重新加载IWDG_RLR的值到计数器中

三、窗口选项

如果喂狗的时候,计数器的值比窗口值要大,那么也会触发复位。只有计数器值介于窗口值和0之间时喂狗才能正常运行

32kHz的LSI下,不同的分配系数和计数值对应不同的喂狗时间,详见下表

四、cubeMX配置
不使用窗口功能
笔者使用32分频,4095计数值,则喂狗时间为4095ms

直观起见,把剩余喂狗计数器的值显示在tft屏幕上
cpp
sprintf(str, "%d ", wdgCnt);
ST7735_ShowString(0, 0, str, Font_11x18, GREEN, BLACK);
PA6引脚连接外部按键,当按键按下时触发喂狗动作,重置剩余喂狗计数器值为4095
cpp
if (HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin) == GPIO_PIN_RESET)
{
HAL_Delay(10);
if (HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin) == GPIO_PIN_RESET)
{
HAL_IWDG_Refresh(&hiwdg);
wdgCnt = hiwdg.Init.Reload;
}
while (HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin) == GPIO_PIN_RESET);
}
这种情况下,只要在倒计时结束前单击按键,就可以喂狗,避免触发复位
使用窗口功能

设置窗口值为2000。如果当计数器的值介于2000和4095之间时喂狗,就会触发复位;只有计数器的值介于0和2000之间时喂狗才能正常运行。
实验现象是当计数值为3xxx时按下按键,立即复位
当计数值小于2000但高于0时按下按键,重新装载继续运行
当计数值小于0时立即复位
可见窗口选项为系统提供了较高的时序保障
