什么是窗口看门狗
1、之所以称为窗口就是因为其喂狗时间是一个有上下限的范围内(窗口),你可以通过设定相关寄存器,设定其上限时间(下限固定)。喂狗的时间不能过早也不能过晚。
2、而独立看门狗限制喂狗时间在0-x内,x由相关寄存器决定。喂狗的时间不能过晚。
窗口看门狗工作原理
STM32F的窗口看门狗中有一个7位的递减计数器,它会在出现下述2种情况之一时产生看门狗复位:
①、当喂狗的时候如果计数器的值大于某一设定数值W[6:0]时,此设定数值在WWDG_CFR寄存器定义。
②、当计数器的数值从0x40减到0x3F时【T6位跳变到0】
窗口看门狗的中断
如果启动了看门狗并且允许中断,当递减计数器等于0x40时产生早期唤醒中断。
假如在中断中喂狗,就可以避免复位了。
窗口看门狗的溢出时间计算
T
o
u
t
=
(
4096
∗
2
W
D
G
T
B
∗
(
T
[
5
:
0
]
+
1
)
)
/
F
p
c
l
k
1
Tout = (4096* 2^{WDGTB}*(T [5:0]+1))/Fpclk1
Tout=(4096∗2WDGTB∗(T[5:0]+1))/Fpclk1
其中:
Twwdg: 超时时间
Fpclk1:APB1的时钟频率
WDGTB:WWDG的预分频系数
T [5:0]:窗口看门狗的计数器低6位
注意事项
1、上窗口值W[6:0]必须大于下窗口值0x40。否则就无窗口了。
2、窗口看门狗时钟来源PCLK1(APB1总线时钟)分频后。
为什么要窗口看门狗,独立看门狗不好吗
对于一般的看门狗,程序可以在它产生复位前的任意时刻刷新看门狗,但这有一个隐患,有可能程序跑乱了又跑回到正常的地方,或跑乱的程序正好执行了刷新看门狗操作,这样的情况下一般的看门狗就检测不出来了;
如果使用窗口看门狗,程序员可以根据程序正常执行的时间设置刷新看门狗的一个时间窗口,保证不会提前刷新看门狗也不会滞后刷新看门狗,这样可以检测出程序没有按照正常的路径运行非正常地跳过了某些程序段的情况