WWDG—窗口看门狗
窗口看门狗跟独立看门狗一样,也是一个递减计数器不断的往下递减计数,当减到一个固定值 0X40时还不喂狗的话,产生复位,这个值叫窗口的下限,是固定的值,不能改变。这个是跟独立看门狗类似的地方,不同的地方是窗口看门狗的计数器的值在减到某一个数之前喂狗的话也会产生复位,这个值叫窗口的上限,上限值由用户独立设置。窗口看门狗计数器的值必须在上窗口和下窗口之间才可以喂狗,这就是窗口看门狗中窗口两个字的含义
(只是在递减的过程中分了一块窗口区,只有在窗口的范围里才能进行喂狗操作)
大纲
- 功能框图
- 时钟和寄存器
具体案例
功能框图
RLR 是重装载寄存器,用来设置独立看门狗的计数器的值。TR 是窗口看门狗的计数器的值,由用户独立设置,WR 是窗口看门狗的上窗口值,由用户独立设置
时钟和寄存器
计数器时钟
计数器时钟由 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 * 4096 * (2^WDGTB)
这里主要强调说明一下时间的计算方式
对于最开始的时钟,我们需要分频,然后按照手册除以4096,这样我们就得到了递减一次的时间,然后再乘以我们设定的次数,就得到了时间
对时钟进行分频是在CFR的WDGTB位进行配置的
计数器
窗口看门狗的计数器是一个递减计数器,共有 7 位,其值存在控制寄存器 CR 的位 6:0,即 T[6:0],
当 7 个位全部为 1 时是 0X7F,这个是最大值,当递减到 T6 位变成 0 时,即从 0X40 变为 0X3F
时候,会产生看门狗复位。这个值 0X40 是看门狗能够递减到的最小值,所以计数器的值只能是:
0X40~0X7F 之间,实际上真正用来计数的是 T[5:0]。当递减计数器递减到 0X40 的时候,还不会
马上产生复位,如果使能了提前唤醒中断:CFR 位 9EWI 置 1,则产生提前唤醒中断,如果真进
入了这个中断的话,就说明程序肯定是出问题了,那么在中断服务程序里面我们就需要做最重要
的工作,比如保存重要数据,或者报警等,这个中断我们也叫它死前中断。
窗口值
我们知道窗口看门狗必须在计数器的值在一个范围内才可以喂狗,其中下窗口的值是固定的
0X40,上窗口的值可以改变,具体的由配置寄存器 CFR 的位 6:0 W[6:0] 设置。其值必须大于
0X40,如果小于或者等于 0X40 就是失去了窗口的价值
状态寄存器
时间的计算
这个图来自数据手册,从图我们知道看门狗超时时间:Twwdg = Tpclk1 x 4096 x 2^wdgtb x (T[5:0]
-
- ms,当 PCLK1 = 36MHZ 时,WDGTB 取不同的值时有最小和最大的超时时间,那这个最小和
最大的超时时间该怎么理解,又是怎么算出来的?讲起来有点绕,这里我稍微讲解下 WDGTB=0
时是怎么算的。递减计数器有 7 位 T[6:0] ,当位 6 变为 0 的时候就会产生复位,实际上有效的计
数位是 T[5:0],而且 T6 必须先设置为 1。如果 T[5:0]=0 时,递减计数器再减一次,就产生复位
了,那这减一的时间就等于计数器的周期 =1/CNT_CK = Tpclk1 * 4096 * (2^WDGTB) = 1/36 * 4096
2^0 =113.7us,这个就是最短的超时时间。如果 T[5:0] 全部装满为 1,即 63,当他减到 0X40 变
成 0X3F 时,所需的时间就是最大的超时时间 =113.72^5=113.7*64=7.2768ms。同理,当 WDGTB
等于 1/2/3 时,代入公式即可
- ms,当 PCLK1 = 36MHZ 时,WDGTB 取不同的值时有最小和最大的超时时间,那这个最小和
从0X111111到0x100000(0x4f)这里其实只用到了5位,而当从0x100000到0x011111这还需要一次,所以最后就是五位加一次