看门狗(stm32笔记)
简介:
- WDG(Watchdog)看门狗
- 看门狗可以监控程序的运行状态,当程序因为设计漏洞、硬件故障、电磁干扰等原因,出现卡死或跑飞现象时,看门狗能及时复位程序,避免程序陷入长时间的罢工状态,保证系统的可靠性和安全性
- 看门狗本质上是一个定时器,当指定时间范围内,程序没有执行喂狗(重置计数器)操作时,看门狗硬件电路就自动产生复位信号
- STM32内置两个看门狗(APB1时钟)
- 独立看门狗(IWDG):独立工作,对时间精度要求较低
- 窗口看门狗(WWDG):要求看门狗在精确计时窗口起作用
独立看门狗框图:
LSI内部低速时钟,40KHz,进入预分频器(8位最大256分频)。随后12位递减寄存器每来一个时钟就减一个数。直到减少到0,产生IWDG复位。正常运行时,为了避免复位。我们可以往重装载寄存器里写入一个值。在键寄存器里写入特定的值,控制电路进行喂狗,这时重装载寄存器的值就会复制到递减寄存器中。这时候递减计数器就会重新变回重装载寄存器的值,重新自减运行。
键寄存器:
- 键寄存器本质上是控制寄存器,用于控制硬件电路的工作
- 在可能存在干扰的情况下,一般通过在整个键寄存器写入特定值来代替控制寄存器写入一位的功能,以降低硬件电路受到干扰的概率
问:为什么不用一个控制寄存器的一个位来控制是否喂狗呢?
答:上面第二点就是原因所在,控制寄存器只设置一个位,可能会受到干扰造成这一位数值的改变。而键寄存器是写入整个16位寄存器,抗干扰能力大。
独立看门狗的超时时间:
窗口看门狗框图:
PCLK1时钟36MHz,进入看门狗预分频器进行分频。随后分频后的时钟驱动递减计数器运行。
递减计数器中只有T5到T0位是有效位。T6位作为溢出标志位。T6 = 1时,没溢出。T6 = 0时,溢出。(也可以理解为T6到T0位由111 1111减到100 0000时,下一次100 0000 到011 1111开始产生溢出,T6顺着上方的线路产生复位.)
WDGA:是窗口看门狗的激活位。WDGA = 1,启用窗口看门狗。WDGA = 0,不启用窗口看门狗。
上面的看门狗配置寄存器,写入最早时间,假设一开始下面自减计数器的值小于上面寄存器的值,此时可以运行,执行自减操作。如果喂狗时,导致计数器的值大于最早时间,那就说明喂早了,开始复位。(喂狗太早)(太晚的情况是计数器自减到0)
窗口看门狗的工作特性:
递减计数器T[6:0]的值小于0x40时,WWDG产生复位
递减计数器T[6:0]在窗口W[6:0]外被重新装载时,WWDG产生复位
递减计数器T[6:0]等于0x40时可以产生早期唤醒中断(EWI),用于重装载计数器以避免WWDG复位
定期写入WWDG_CR寄存器(喂狗)以避免WWDG复位