主要外设:
IWDG
主要功能:监控MCU的程序,当程序发生故障或超时,使MCU自动重启
LSI(内部RC振荡器~40KHz)→8位预分频系数PR→装值RLR、12位递减计数器→IWDG复位
- 递减计数器:计数值从RLR减到0,IWDG会产生一个复位信号,系统复位重新启动
- 避免产生看门狗复位,则需在计数值减到0之前将重装值写入到计数器即“喂狗”
- 当程序出错时没有刷新计数器,计数器递减到0,系统复位重新启动
- 使用"独立"的内部RC振荡器作为时钟源,CM内核使用主时钟,在停机和待机模式可工作
- 最多PR/40KHZ*RLR时间不刷新IWDG则系统复位
硬件设计
32分频/40kHz*1000=800ms 不刷新IWDG则系统复位
CubeMX的配置
-
引脚分配:无
-
外设配置:
- System Core-IWDG →模式→ 勾选Actived
- System Core-IWDG →参数设置(时钟)→IWDG计数器时钟预分频系数=32、IWDG递减计数器重载值1000
用户代码
//USBR CODE3:后台程序(无限循环)
HAL_IWDG_Refresh(&hiwdg);//喂狗
WWDG
主要作用:保证MCU运行时间是否精准
PCLK1→4096分频→分频器系数CFR→重载值CR (TR)、窗口值CFR(WR)、7位递减计数器

- 递减计数器:从TR→WR→0x40:在IWDG的基础上画了一道线WR
- 只能在WR→0x40窗口上限和窗口下限之间可以"喂狗"(从而保证在一定时间内执行)
- TR→WR之间"喂狗"会产生复位
- 最小超时时间为WR→0x40:4096预分频值(TR-WR)/APB1时钟
- 最大超时时间为TR→0x40:4096预分频值(TR-0x39)/APB1时钟
- 早期预警中断:WWDG复位并不代表程序出错或死机,在MCU复位前,进行收尾工作(eg.保存数据)、
- 与CM内核共用主时钟
硬件设计
TR=127、WR=84、APB1=50MHz
(4096 * 8)(127-63)/ 50MHz =41.94ms
(4096 * 8)(127-84)/ 50MHz =28.18ms
CubeMX的配置
-
引脚分配:无
-
外设配置:
- System Core-WWDG →模式→ 勾选Actived
- System Core-WWDG →参数设置(看门狗时钟)→WWDG计数器时钟预分频系数=8、WWDG窗口值84、WWDG自运行递减计数器值127
//USBR CODE3:后台程序(无限循环)
HAL_Delay(35);//等待29ms~40ms喂狗的窗口时间
HAL_WWDG_Refresh(&hwwdg);//喂狗
STM32外设:看门狗定时器 IWDG、WWDG
原文:https://www.cnblogs.com/rayoli/p/14825231.html