STM32CubeMX之独立看门狗(IWDG)和窗口看门狗(WWDG)


参考资料:

  1. STM32中文参考手册_V10
  2. STM32F1开发指南(精英版)-HAL库版本_V1.0

1 独立看门狗

1.1 独立看门狗工作原理

独立看门狗用通俗一点的话来解释就是一个 12 位的递减计数器,当计数器的值从某个值一直减到 0 的时候,系统就会产生一个复位信号,即 IWDG_RESET。如果在计数没减到 0 之前,刷新了计数器的值的话,那么就不会产生复位信号,这个动作就是我们经常说的喂狗。

1.2 独立看门狗时钟选择

独立看门狗的时钟由独立的RC振荡器LSI提供,即使主时钟发生故障它仍然有效,非常独立。LSI的频率一般在30~60KHZ之间,根据温度和工作场合会有一定的漂移,我们一般取 40KHZ,所以独立看门狗的定时时间并一定非常精确,只适用于对时间精度要求比较低的场合。
在这里插入图片描述

2 窗口看门狗

2.1 窗口看门狗工作原理

窗口看门狗通常被用来监测,由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。
除非递减计数器的值在T6位变成0前被刷新,否则看门狗电路在达到预置的时间周期时,会产生一个MCU复位。即时间计数超过了窗口下限;
在递减计数器达到窗口寄存器数值之前,如果7位的递减计数器数值(在控制寄存器中)被刷新, 那么也将产生一个MCU复位。即时间计数还没达到窗口的上限;
这表明递减计数器需要在一个有限的时间窗口中被刷新。
在这里插入图片描述

2.2 窗口看门狗时钟选择

窗口看门狗时钟为PCLK1,如下图所示:
在这里插入图片描述PCLK1时钟源如下:
在这里插入图片描述

3 独立看门狗和窗口看门狗的区别

独立看门狗IWDG–独立于系统之外,因为有独立时钟,所以不受系统影响的系统故障探测器,主要用于监视硬件错误。
窗口看门狗WWDG----系统内部的故障探测器,时钟与系统相同。如果系统时钟不走了,这个狗也就失去了作用了,主要用于监视软件错误。
简单的讲,看门狗就是检测系统故障的,如果因为系统故障而没有及时喂狗,则引发复位重启。
对于一般的看门狗,程序可以在它产生复位前的任意时刻刷新看门狗,但是这样有一个隐患,有可能程序跑乱了又跑回正常的地方,或者跑乱的程序正好执行了刷新看门狗操作,这样的情况下一般的看门狗就检测不出来故障了;但是如果使用窗口看门狗,程序员可以根据程序正常执行的时间设置刷新看门狗的一个时间窗口,保证不会提前刷新看门狗,也不会滞后刷新看门狗,这样可以检测出程序没有按照正常的路径运行,非正常地跳过了某些程序段的情况。
WWDG与IWDG的主要区别是有一个窗口控制,WWDG的中断不是用于日常喂狗的,如果用于日常喂狗动作,那WWDG的相对于IWDG,功能也就没什么特别了。WWDG的中断是给程序员最后一次喂狗的机会,一般进入这个中断时,表示你在其他地方安排的喂狗操不能凑效了,而发生这种现象时,肯定是系统有问题了,或者程序有Bug或者干扰,在这种情况下,这个中断时为了让你的程序在发生真正的看门狗复位前,有一个紧急处理的机会,如保存重要数据,或者系统刹车,说白了,就是让CPU写“遗嘱”;
由此看出,简单的在WWDG中断中喂狗,既没有发挥WWDG相对于IWDG的优势,又因为在中断中喂狗,而为以后的产品留下了隐患

4 独立看门狗的应用

4.1 参数计算

溢出时间计算: 以1000ms时间计算,Tout = prv/40 * rlv (s) , prv 可 以 是[4,8,16,32,64,128,256]。prv可以取 IWDG_Prescaler_64,rlv取 625,Tout=64/40*625=1000ms。
在这里插入图片描述

4.2 生成代码

生成代码后,调用该函数更新(喂狗)

HAL_IWDG_Refresh(&hiwdg);

5 窗口看门狗的应用

5.1 参数计算

在STM32CubeMX配置如下:
在这里插入图片描述

  1. WWDG counter clock prescaler:时钟分频( 1、2、4、8);
  2. WWDG window value(W[6:0]):窗口上限值(64~127),下限值固定为0x40(64) ;
  3. WWDG free-running downcounter value(T[6:0]):计数器(64~127)

在这里插入图片描述T[6:0]就是窗口看门狗的计数器,而 W[6:0]则是窗口看门狗的上窗口,下窗口值是固定的(0X40)。
当窗口看门狗的计数器在上窗口值之外被刷新,或者低于下窗口值都会产生复位。

例如:
W[6:0]:100 , b1100100 ,0x64(都是十进制数100)
T[6:0]:127 ,b1111111 , 0x7F(都是十进制数127)

当上电初始化窗口看门狗(WWDG)或执行HAL_WWDG_Refresh函数时,T[6:0]从新重127开始向下计数(计数速率由WWDG counter clock prescaler决定),
在127~100为上窗口,不可以执行HAL_WWDG_Refresh函数喂狗,否则会复位;
在100~64位窗口,只能在该窗口执行HAL_WWDG_Refresh函数喂狗,程序正常;
当计数小于64(0x40)时,会产生复位,如果使能了中断,计数在0x40是会产生一个中断。

计算窗口时间:
Twwdg = 0.00002840928*36 ≈ 33ms

如何得到最大窗口值,当W[6:0] = T[6:0] = 127时
Twwdg = 0.00002840928*64 ≈ 58.72ms

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值