STM32F4 内部自带了 2 个看门狗:独立看门狗(IWDG)和窗口看门狗(WWDG)。用于检测并解决由软件错误导致的故障;当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位。
1、独立看门狗
1.1、简介
独立看门狗本质上是一个定时器,这个定时器有一个输出端,可以输出复位信号。该定时器是一个 12 位的递减计数器,从初始值递减至 0 时出发复位。如果在计数没减到 0 之前,通过重载值(IWDG_RLR)刷新计数器,那么就不会产生复位信号,这个动作称为喂狗。看门狗功能由 VDD 电压域供电,在停止模式和待机模式下仍然可以工作,并且其时钟源为独立低速时钟 LSI (约 32kHz),不受主时钟故障的影响。
下图就是独立看门狗的框图:
使用场景:
- 系统整体运行监控,防止死循环或程序卡死。
- IWDG 最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。
- 对喂狗时间无严格要求,但需高可靠性。
1.2、独立看门狗寄存器
1.2.1、关键寄存器(IWDG_KR)
当通过对关键字寄存器 (IWDG_KR) 写入值 0xCCCC 启动独立看门狗时,计数器开始从复位值 0xFFF 递减计数。当计数器计数到终值 (0x000) 时会产生一个复位信号( IWDG 复位)。
任何时候将关键字 0xAAAA 写到 IWWDG_KR 寄存器中, IWDG_RLR 的值就会被重载到计数器,从而避免产生看门狗复位。
1.2.2、预分频寄存器(IWDG_PR)
该寄存器用来设置看门狗时钟(LSI)的分频系数,最低为 4,最高为 256,该寄存器是一个 32 位的寄存器,但是只使用最低 3 位,其他都是保留位。
1.2.3、重载寄存器(IWDG_RLR)
该寄存器用来保存重装载到计数器中的值。该寄存器也是一个 32 位寄存器,只有低 12 位是有效的。
1.3、标准库配置步骤
- 解除 IWDG 寄存器写保护。
- 设置预分频器(4 ~ 256 分频)。
- 设置重载值(RLR)。
- 启动看门狗。
- 定期喂狗。
超时时间计算公式:
IWDG 初始化: