WDG看门狗

243 阅读6分钟

1.WDG看门狗简介

image.png 看门狗本质上是一个重置计数器 独立看门狗(IWDG)独立工作,拥有独立始终LSI(内部低速时钟),即使主时钟出现问题,看门狗也能工作。


2.IWDG

1.IWDG框图

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

image.png

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

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

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

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


2.IWDG键寄存器

image.png

都是用来防止误操作


3..独立看门狗超时时间(定时器溢出时间)

image.png

TLSI=1/FLSI=1/40000;   RL:RLR计数目标

TIWDG=TLSI * PR预分频系数 * (PL+1)=0.025ms * 16 * 100;

3.WWDG

1.WWDG框图

image.png

  • 左下角是时钟源部分,这个时钟源是PCLK1(APB1 36MHZ),右边这个是预分频器,它这个预分频器,叫WDGTB。 上面这个是6位递减计数器CNT,计数器是位于控制寄存器CR里的,计数器和控制寄存器合二为一了。 窗口看门狗没有重装寄存器,那如何重装计数器进喂狗呢:这个我们直接在CNT写个数据就行了,想写多少就写多少。 这上面是窗口值,由此喂狗的最早时间界限就写到这里存起来。

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

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

2.WWDG工作特性

image.png 递减计数器T[6:0]等于0x40时可以产生早期唤醒中断(EWI)(也叫死前中断),用于重装载计数器以避免WWDG复位这里的意思就是,减到0X40时产生中断,然后再减一个数到0X3F时产生复位,那这个中断其实就是在溢出的前一刻发生,所以这个中断也可以称作死前中断,马上就要溢出复位了,再提醒一下你要不要干点啥。我们一般可以用来执行一些紧急操作,比如保存重要数据,关闭危险设备等等。

3.WWDG的超时时间

image.png

4096是在PCLK1紧接着的后面加了一个 提前分频。 WDGTB预分频系数=2^WDGTB系数

4.IWDG和WWDG的区别

image.png

5.代码步骤

独立看门狗

  • 第一步,开启LSI时钟(不需要写代码如果看门狗已由硬件或软件打开,LSI将被强制打开且不能被关闭)
  • 第二步,写入预分频器和重装定时器(首先解除写保护)
  • 第三步,写入预分频和重装值

窗口看门狗

  • 第一步,需要开启 窗户看门狗APB1的时钟,这个第一步需要我们自己来执行,不会像独立看门狗自动开启。
  • 第二步,就是配置各个寄存器了,比如预分频和窗口值。窗口看门狗没有写保护,可以直接写这些寄存器了。
  • 第三步,写入控制性器CR,控制寄存器包含:看门狗使能位、计数器溢出标志位和计数器有效位,这些需要一起设置。

之后在运行过程中,我们不断向计数器写入想要的重装值,这样就可以进行喂狗了,这是窗口看门狗的操作流程。