目录
一、独立看门狗与窗口看门狗
1.功能描述
2.两者区别
二、WWDG功能描述
1.窗口看门狗时钟
2.计数器时钟
3. 计数器
4.窗口值
三、WWDG超时时间
一、独立看门狗与窗口看门狗
1.功能描述
STM32有两个看门狗:一个是独立看门狗(IWDG),一个是窗口看门狗(WWDG)。
独立看门狗的工作原理是一个递减计数器不断地递减计数,当减到0之前如果没有喂狗的话,产生复位。窗口看门狗跟独立看门狗一样,也是一个递减计数器不断地递减计数,当减到一个固定值0x40 时还不喂狗的话,产生复位,这个值叫窗口的下限,是固定的值,不能改变。这点与独立看门狗类似。
不同的地方是窗口看门狗的计数器的值在减到某一个数之前喂狗的话也会产生复位,这个值叫窗口的上限,由用户自主设置。窗口看门狗计数器的值必须在上窗口和下窗口之间才可以喂狗,这就是窗口看门狗中窗口两个字的含义。
2.两者区别
二、WWDG功能描述
1.窗口看门狗时钟
时钟来自 PCLK1, PCLK1最大是36MHz,由RCC时钟控制器开启。
2.计数器时钟
由CK计时器时钟经过预分频器分频得到,分频系数由配置寄存器CFR的位8:7 WDGTB[1:0]配置,可以是 [ 0, 1, 2, 3 ],其中CK计时器时钟=PCLK1 / 4096 ( 除以4096是手册规定的 )。
所以计数器的时钟 CNT_CK = PCLK1 / 4096 / (2^WDGTB)
所以计数器减一个数的时间 T = 1 / CNT_CK = Tpclk1 x 4096 x(2^WDGTB)
3. 计数器
为递减计数器,共7位,其值存在控制寄存器CR的位6:0,即T[6:0],当7位全部为1时是0x7F,这是最大值。当递减到T6 位变成0时,即从0x40 变为0x3F时候,会产生看门狗复位,这个值0x40是看门狗能够递减到的最小值。所以计数器的值只能是 0x40~0x7F,实际上真正用来计数的是T[5:0]。
当递减计数器递减到0x40的时候,还不会马上产生复位,如果使能了提前唤醒中断( CFR位 9 EWI 置 1 ),则产生提前唤醒中断。如果真进入了这个中断的话,就说明程序肯定是出问题了,那么在中断服务程序里面我们就需要做一些重要工作。这个中断也叫“死前中断”。
4.窗口值
下窗口的值是固定的0x40,上窗口的值可以改变,具体的由配置寄存器 CFR的位6:0 W[6:0]设置。其值必须大于0x40,如果小于或者等于0x40就失去了窗口的价值,而且也不能大于计数器的值,所以必须得小于 0x7F。
窗口值具体要设置成多大,要根据我们需要监控的程序的运行时间来决定。如果在窗口时间内没有喂狗的话,那程序肯定是出问题了。一般计数器的值TR设置成最大0x7F,窗口值为WR,计数器减一个数的时间为T,那么时间(TR-WR) x T稍微大于程序运行时间即可,这样就能做到刚执行完程序段之后喂狗,也就可以算出WR的值。
三、WWDG超时时间
看门狗超时时间:Twwdg=Tpclk1 x 4096 × 2^wdgtb ×(T[5:0] + 1) ms。当PCLK1 = 36MHz时,WDGTB 取不同的值时有最小和最大的超时时间。以WDGTB = 0为例:
递减计数器有 7位 T[6:0], 当位 6 变为 0 的时候就会产生复位,实际上有效的计数位是T[5:0],而且 T6 必须先设置为 1。
如果 T[5:0]=0 时,递减计数器再减一次,就产生复位了,那这 减1的时间 = 计数器的周期 = 1 / CNT_CK=Tpclk1 × 4096 x(2^WDGTB) = 1/36x4096×2^0=113.7us,这个就是最短的超时时间。
如果 T[5:0]全部为1,即 63,当由 0x40 变成 0x3F 时,所需的时间就是 最大的超时时间 = 113.7×2^5=113.7×64=7.2768ms。
同理,当WDGTB等于1、2、3时,代入公式即可算出最长最短超时值。
可结合这边文章:
嵌入式——窗口看门狗(WWDG)
http://t.csdnimg.cn/60FCjhttp://t.csdnimg.cn/60FCj