看门狗

**简介:独立看门狗用通俗一点的话来解释就是一个12位的递减计数器,当计数器的值从某个值一直减到0的时候,系统就会产生一个复位信号,即IWDG_RESET。 如果在计数没减到0之前,刷新了计数器的值的话,那么就不会产生复位信号,这个动作就是我们经常说的喂狗。**看门狗功能由 VDD 电压域供电,在停止模式和待机模式下仍能工作。

IWDG的作用和应用

主要用于检测外界电磁干扰,或硬件异常导致的程序跑飞问题,外界电磁干扰或者自身系统(硬件或软件)异常,造成程序跑飞,如:陷入某个不正常的死循环,打断正常的程序运行。

主要应用在一些需要高稳定性的产品中,并且对时间精度要求较低的场合。

独立看门狗是异常处理的最后手段,不可依赖,应在设计时尽量避免异常的发生!

IWDG功能框图剖析

CPU必须及时喂狗,否则系统复位重启!

在stm32cubemx中激活IWDG后,LSI时钟会自动开启。

键寄存器(IWDG_KR)介绍

作用:用于喂狗,解除PR和RLR寄存器写访问保护,以及启动看门狗工作

预分频器寄存器 (IWDG_PR)

重装载寄存器(IWDG_RLR)

作用:用于存放重装载值,低12位有效,即最大值为4096。

状态寄存器(IWDG_SR)

作用:用于判断预分频值和重装载值是否已经被更新

寄存器配置操作步骤

  1. 通过在键寄存器 (IWDG_KR) 中写入 0xCCCC 来使能 IWDG。
  2. 通过在键寄存器 (IWDG_KR) 中写入 0x5555 来使能寄存器访问。
  3. 通过将预分频器寄存器 (IWDG_PR) 编程为 0~7 中的数值来配置预分频器。
  4. 对重载寄存器 (IWDG_RLR) 进行写操作。
  5. 等待寄存器更新 (IWDG_SR = 0x0000 0000)。
  6. 刷新计数器值为 IWDG_RLR 的值 (IWDG_KR = 0xAAAA)。

IWDG溢出时间计算

IWDG最短最长超时时间:

HAL库:Tout =psc∗rlr/fIWDG

$$
寄存器:Tout
=(4∗2^prer)∗rlr/(f IWDG)

$$

参数解释:

Tout是看门狗溢出时间
f 𝐼𝑊𝐷𝐺是看门狗的时钟源频率
psc是看门狗预分频系数
rlr是看门狗重装载值

编程实战

方向:验证不及时喂狗,系统将复位重启