目录
1. 目标
通过HAL库使用看门狗
2. 背景知识
STM32提供两类看门狗:独立看门狗IWDG,系统窗口看门狗WWDG
2.1 独立看门狗IWDG
看门狗会在计数器向下计数溢出时,会触发系统复位,而复位定时器的操作被叫做喂狗
某些地方不小心卡住了就可以通过看门狗解决,看门狗由专门的低速RC时钟驱动,不可更改频率,这样即使主时钟故障,看门狗依然能够工作
通过CubeMX查看时钟树,可以得到为32KHz
支持预分频系数,但只能为特定值
另外也可单独设置阈值,高于阈值喂狗也会产生复位
通过简单的计算,看门狗最大支持32s,对于绝大多数情况下是适用的
1 / (32K/256) * 4096
2.2 系统窗口看门狗WWDG
与独立看门狗类似,但定时更为精准,支持中断即在复位之前执行某些必要的操作,还有其他一些高级的特性
通过查阅手册,WWDG挂载在APB1外设时钟线上,通过CubeMX查看时钟树,频率为60MHz,这个值会通过一个固定的分频系数4096分频(14KHz),之后通过自己设置的分频值分频
复位条件,T为7位计数器(free-running downcounter value),W为7位窗口值(window value)
3 代码
3.1 独立看门狗IWDG
简单的测试代码
for (int i = 0 ; i < 10 ; ++i) {
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_7);
HAL_Delay(500);
HAL_IWDG_Refresh(&hiwdg);
}
while (1) {
}
3.2 系统窗口看门狗WWDG
简单的测试代码
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_7);
int i = 0;
while (1) {
HAL_WWDG_Refresh(&hwwdg);
if (!i) {
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_7);
i = 1;
}
}