STM32 IWDG独立看门狗超详细笔记:一篇不容错过的指南!
STM32–独立看门狗IWDG笔记
一、看门狗是什么?
答:看门狗是一个12bit的递减计数器。当计数器的值从某个值一直减到0的时候,系统就会产生一个复位信号,CPU收到复位信号,系统复位重新运行。在计数没减到0之前,重置了计数器的值的话,那么就不会产生复位信号,CPU收不到复位信号,系统就会继续正常运行,并不会产生复位,这个重置计数器的动作就是我们说的 “喂狗”。
二、看门狗的作用是什么?
答:基本功能就是在发生软件问题和程序跑飞时使系统复位,重新启动。可以用于环境比较恶劣的情况下。
三、看门狗分类以其功能
答:看门狗分为两类:
区别在于:
窗口看门狗:假如没有定时喂狗,则
触发一个中断或产生系统复位
。
独立看门狗:假如没有定时喂狗,会产生系统复位
。
独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,
即使主时钟发生故障它也仍然有效
。
窗口看门狗由从APB1时钟分频后得到的时钟驱动,通过可配置的时间窗口
来检测应用程序非正常的过迟或过早的操作。
四、原理框图
五、独立看门狗的四个寄存器
(1)预分频寄存器(PR)
(2)状态寄存器(SR)
RVU位为0时,才能设置重装载值。
PVU位为0时,才能设置预分配。
(3)重装载寄存器(RLR)
(4)键寄存器(KR)


六、独立看门狗的溢出时间计算公式
#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的情况下
则根据公式计算得到此独立看门狗溢出时间Tout=64*500/32000=1秒
参考:https://blog.csdn.net/qq_48361010/article/details/134387093
作者:马叉虫0.0