目录
窗口看门狗用于监测单片机程序运行时效是否精准,主要检测软件异常,一般用于需要精准检测 程序运行时间的场合。
窗口看门狗的本质是一个能产生系统复位信号和提前唤醒中断的6位计数器。
产生复位条件:
产生中断条件:
在窗口期内重装载计数器的值,防止复位,也就是所谓的喂狗。






实验需求:
开启窗口看门狗,计数器值设置为 0X7F(127) ,窗口值设置为 0X5F(95)预分频系数为 8 ,程序启动时点亮 LED1 ,300ms 后熄灭。在提前唤醒中断服务函数进行喂狗,同时翻转 LED2 状态。
硬件接线:
编程实现思路:
打开cubemax
配置SYS:

配置RCC:

配置时钟:

配置WWDG:

打开NVIC:

生成代码之后打开keil5,加入下部分代码:
- //WWDG中断回调函数
- void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg)
- {
- HAL_WWDG_Refresh(hwwdg);
- HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_9);
- }
-
- int main()
- {
- MX_GPIO_Init();
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);
- HAL_Delay(300);
- MX_WWDG_Init();
-
- while(1)
- {
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET);
- HAL_Delay(40);
- }
- }
-
| 对比点 | 独立看门狗 | 窗口看门狗 |
| 时钟源 | 独立时钟,LSI (40KHz) ,不精确 | PCLK1或PCLK3,精确 |
| 复位条件 | 递减计数到0 | 窗口期外喂狗或减到0x3F |
| 中断 | 没有中断 | 计数值减到0x40可产生中断 |
| 递减计数器位数 | 12位(最大计数范围:4096~0) | 7位(最大计数范围:127~63) |
| 应用场合 | 防止程序跑飞,死循环,死机 | 检测程序时效,防止软件异常 |