STM32 IWDG独立看门狗超详细笔记:一篇不容错过的指南!

STM32–独立看门狗IWDG笔记

一、看门狗是什么?

答:看门狗是一个12bit的递减计数器。当计数器的值从某个值一直减到0的时候,系统就会产生一个复位信号,CPU收到复位信号,系统复位重新运行。在计数没减到0之前,重置了计数器的值的话,那么就不会产生复位信号,CPU收不到复位信号,系统就会继续正常运行,并不会产生复位,这个重置计数器的动作就是我们说的 “喂狗”。

二、看门狗的作用是什么?

答:基本功能就是在发生软件问题和程序跑飞时使系统复位,重新启动。可以用于环境比较恶劣的情况下。

三、看门狗分类以其功能

答:看门狗分为两类:

  • 独立看门狗(IWDG)
  • 窗口看门狗(WWDG)。
  • 区别在于:

    窗口看门狗:假如没有定时喂狗,则触发一个中断或产生系统复位
    独立看门狗:假如没有定时喂狗,会产生系统复位

    独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效
    窗口看门狗由从APB1时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。

    四、原理框图

    五、独立看门狗的四个寄存器

    (1)预分频寄存器(PR)

    (2)状态寄存器(SR)
    RVU位为0时,才能设置重装载值。
    PVU位为0时,才能设置预分配。

    (3)重装载寄存器(RLR)

    (4)键寄存器(KR)

  • 写入0xAAAA: 喂狗。
  • 写入0XCCCC:使能看门狗。
  • 写入0X5555: 解除预分频寄存器(PR)和重装载寄存器(RLR)的写保护。

  • 六、独立看门狗的溢出时间计算公式

    #define IWDG_PRESCALER_4                0x00u            		/*!< IWDG prescaler set to 4   */
    #define IWDG_PRESCALER_8                0x01U                  	/*!< IWDG prescaler set to 8   */
    #define IWDG_PRESCALER_16               0x02U                   /*!< IWDG prescaler set to 16  */
    #define IWDG_PRESCALER_32               0x03U 				  /*!< IWDG prescaler set to 32  */
    #define IWDG_PRESCALER_64               0x04U                  /*!< IWDG prescaler set to 64  */
    #define IWDG_PRESCALER_128              0x05U 				  /*!< IWDG prescaler set to 128 */
    #define IWDG_PRESCALER_256              0x06U 				  /*!< IWDG prescaler set to 256 */
    

    由上面代码可以看出,HAL库中宏定义IWDG_PRESCALER_32实际值是:0x03
    IWDG_PRESCALER_32 此宏定义名字代表的意思是:独立看门狗预分频器设置为32分频

    此处,设宏定义IWDG_PRESCALER_32实际值为prer,设独立看门狗预分频值为psc,则prer与psc之间有关系:

                             psc=2^(prer+2)
    
    #define IWDG_PRESCALER_128              0x05U 
    

    例:IWDG_PRESCALER_128宏定义的实际值prer=5,独立看门狗预分频值为psc=2^(5+2)=128分频,所以此宏定义名字中的x_xxx_128就是这么来的。

    独立看门狗溢出时间计算公式:

    代入psc=2^(prer+2)即:

    Tout:溢出时间
    prer:设置看门狗时钟预分频寄存器宏定义实际值
    rlr:重装载寄存器设置的值
    fIWDG:看门狗时钟源频率(LSI:32KHz)

    在HAL库程序里如果初始化如下一句:

    IWDG_Init(IWDG_PRESCALER_64,500);
    

    看门狗时钟源频率LSI为32KHz的情况下

  • psc=64
  • rlr=500
  • fIWDG=32kHz=32000
    则根据公式计算得到此独立看门狗溢出时间Tout=64*500/32000=1秒
  • 参考:https://blog.csdn.net/qq_48361010/article/details/134387093

    作者:马叉虫0.0

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32 IWDG独立看门狗超详细笔记:一篇不容错过的指南!

    发表回复