江科大笔记—WDG开门狗

WDG开门狗简介

在这里插入图片描述
独立看门狗,它的特点就是独立运行,对时间精度要求较低。独立运行就是独立看门狗的时钟是专用的,LSI内部低速时钟,即使主时钟出现问题了,看门狗也能正常工作,这也是独立看门狗独立的得名原因,对时间精度要求较低,就是独立看门狗只有一个最晚时间界限,你喂狗间隔只要不超过这个最晚界限就行了,你说很快的喂、疯狂的喂、连续不断的喂,那都没问题。

窗口看门狗,要求看门狗在精确计时窗口起作用,意思就是喂狗的时间有个最晚的界限,也有个最早的界限,必须在这个界限的窗口内喂狗。因为对于独立看门狗来说,可能程序就卡死在喂狗的部分了,或者程序跑飞,但是喂狗代码也意外执行了,或者程序有时候很快喂狗,有时候又比较慢喂狗,那这些状态独立看门狗就检测不到了,但是窗口看门狗是可以检测到这些问题的,因为它对喂狗的时间窗口可以卡的很死,快了慢了都不行,最后窗口开门口使用的是APB1的时钟,它没有专用的时钟,所以不算是独立。

独立看门狗框图

在这里插入图片描述
它的结构和定时器是非常相似的,只不过是定时器溢出产生中断,而看门狗定时器溢出直接产生复位信号。
喂狗操作其实也就是重置这个计数器,这是一个递减计数器,减到零之后就复位,那程序正常运行时,为了避免复位,就得在这个计数器减到零之前,及时把记数值加大点,这个操作就是喂狗,如果你程序卡死了,没有及时加大这个记数值,那减到零之后就自动复位了,就是看门狗的工作逻辑。
在这里插入图片描述

那预分频器之前输入时钟是LSI内部低速时钟,时钟频率为40KHz,之后时钟进入预分频器进行分频,这个预分频器只有8位,所以它最大只能进行256分频。

这个预分频寄存器,IWDG_PR可以配置分频系数,后面经过预分配器分频之后,时钟驱动递减计数器,每来一个时钟自减一个数,另外这个计数器是12位的,所以最大值是2^12-1=4095,然后当自减到0之后,产生IEDG复位。正常运行时,为了避免复位,我们可以提前在重装寄存器写个值,那当我们预先写好值之后,在运行过程中,我们在这个键寄存器里写个特定数据,控制电路进行喂狗。这时重装值就会复制到当前的计数器中,这样计数器就会回到重装值,重新自减运行了。

状态寄存器SR,就是标志电路运行的状态了,SR里只有两个更新同步位。

最后 这些寄存器位于1.8V供电区,下面主要的工作电路都位于VDD供电区,所以这下面写了看门狗功能处于vdd供电区,即在停机和待机模式时仍能正常工作。

IWDG键寄存器

在这里插入图片描述

最后两条是写保护的逻辑啊,意思就是执行指令必须写入指定的键值,所以指令抗干扰能力是很强的。
但这里(上面框图里)还有PR、SR和RLR 3个寄存器,他们也要有防止误操作的功能,SR是只读的不用保护,剩下的PR和RLR的写操作,可以设置一个写保护措施,然后只有在键寄存器写入5555,才能解除写保护,一旦写入其他值,PR和RLR再次被保护,这样PR和RLR就跟随键寄存器一起,被保护了起来,防止误操作,这是键寄存器设计的用途。

独立看门狗超时时间

也就是定时器溢出时间

在这里插入图片描述
时间计算:LSI是输入时钟,40KHZ,FLSI就是40K ,TLSI就是周期。

PR写入2就是16分频,RL就是计数目标,乘个(RL+1)就是最终超时时间。
TLSI =1/40K=0.025ms
TIWDG =0.025ms16(99+1)=40
最短时间RL=0,最长时间RL为0xFFF,即4095。

窗口看门狗

在这里插入图片描述
在这里插入图片描述

左下角是时钟源部分,这个时钟源是PCLK1,右边这个是预分频器,它这个预分频器,叫WDGTB。
上面这个是6位递减计数器CNT,计数器是位于控制寄存器CR里的,计数器和控制寄存器合二为一了。
窗口看门狗没有重装寄存器,那如何重装计数器进喂狗呢:这个我们直接在CNT写个数据就行了,想写多少就写多少。
这上面是窗口值,由此喂狗的最早时间界限就写到这里存起来。
最后左边就是输出信号的操作逻辑,什么情况下会产生复位,就这几个逻辑门来确定。

工作流程:首先还是从左下角开始看,时钟来源是PCLK1,也就是APB1的时钟,这个时钟默认是36MHz,所以就是36MHz的时钟进来,之后还是先经过一个预分频器进分频,就是灵活的调节后面计数器的时钟频率,同时预分频系数也是计算计数器溢出时间的重要参数,那接着分频之后的时钟驱动这个计数器进行计数,这个计数器和独立看门狗一样,也是一个递减计数器,每来一个时钟自减一次,不过这个计数器比较特殊,其实是因为这个计数器只有T5到T0这六位是有效的就值,最高位T6这里用来当做溢出标志位,第六位等于1时,表示计数器没溢出,T6位等于0时表示计数器溢出,不过对于硬件电路来说,T6位其实也是计数器的一部分,只不过是T6位被单独拎出来,当做标志位了而已。

总结,就是如果你把T6位看作是计数器的一部分,那要是整个计数器值减到0X40之后移出。而如果你把T6位当成溢出标志位,低6位当做计数器,那就是低6位的计数值减到0之后溢出。

在这里插入图片描述
左边的复位信号输出部分,首先这个WDGA是窗口看门狗的激活位,也就是使能,WDGA写入1启用窗口看门狗,使能位作用于这个与门。

意思是,T6位一旦等于0,就表示计数器溢出,就产生复位信号。在程序正常状态下,必须保证T6位为1,这样才能避免复位。

门狗时间的最早界限,由上面这一块来实现,首先我们要计算一个最早界限的计数值,写到这里的W6~W0中,写入之后是固定不变的,在这里一旦我们执行写入CR操作时,这个与门开关就会打开,写入CR其实就是写入计数器,也就是喂狗,在喂狗时,这个比较器开始工作,一旦它比较我们当前的计数器,T6:0>窗口值W6:0,比较结果就等于1,这个一通过或门也可以去申请复位,这是喂狗最早时间窗口的实现流程,就是喂狗的时候,我把当前记数值和预设的窗口值进行比较。

窗口开门狗工作特性

在这里插入图片描述
递减计数器T[6:0]等于0x40时可以产生早期唤醒中断(EWI),用于重装载计数器以避免WWDG复位
这里的意思就是,减到0X40时产生中断,然后再减一个数到0X3F时产生复位,那这个中断其实就是在溢出的前一刻发生,所以这个中断也可以称作死前中断,马上就要溢出复位了,再提醒一下你要不要干点啥。

我们一般可以用来执行一些紧急操作,比如保存重要数据,关闭危险设备等等,或者还有一种写法,虽然超时喂狗了,但是我们可以在中断里执行一些代码,进行解决,或者这个任务不是很危险,超时了我就只想做一些提示,不想让他复位了,这样的话我们就可以在这个早期唤醒中断里直接执行喂狗,阻止系统复位,然后提示一下信息就完事儿了。

窗口开门狗超时时间

在这里插入图片描述

超时时间是喂狗的最晚时间,窗口时间是喂狗的最早时间。

这里要多乘一个4096,是因为这里PCLK1进来之后,其实是先执行了一个固定的4096分频,这里框图没画出来,实际上是有的,因为36M的频率还是太快了,先来个固定分频给降一降
在这里插入图片描述
WDGTB的值和分频系数的关系
分频系数=2^WDGTB,对应表,当WDGTB=0时,是1分频,就是2的0次方。分频系数只有这4种选择。 例:
在这里插入图片描述
比如当WDGTB=0时,分频系数是1
TPCLK1 = 1 / FPCLK1=1/36M 。当计数器给0时,就是最小超时;当计数器给最大值时,6位的计数最大值是:2^6-1=63,这样计算得到下面最大超时值。
当T=0时,T+1=1;当T=63时,T+1=64
最小超时值:TWWDG = TPCLK1 × 4096 × WDGTB预分频系数 × (T[5:0] + 1)=1/36M × 4096 ×1×(0+1)=0.113ms
最大超时值:TWWDG = TPCLK1 × 4096 × WDGTB预分频系数 × (T[5:0] + 1)=1/36M × 4096 ×1×(63+1)=7.28ms

独立看门狗和窗口看门狗对比

在这里插入图片描述

参考手册

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 29
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值