STM32的看门狗(WDG)

WDG(Watchdog)看门狗

看门狗可以监控程序的运行状态,当程序因为设计漏洞、硬件故障、电磁干扰等原因,出现卡死或跑飞现象时,看门狗能及时复位程序,避免程序陷入长时间的罢工状态,保证系统的可靠性和安全性。

看门狗本质上是一个定时器,当指定时间范围内,程序没有执行喂狗(重置计数器)操作时,看门狗硬件电路就自动产生复位信号。

STM32内置两个看门狗

独立看门狗(IWDG):独立工作,对时间精度要求较低。(专用的LSI,40kHz,即使主时钟出现问题了,独立看门狗也可以正常工作)独立看门狗只有一个最晚喂狗界限,只要喂狗不超过这个界限就行,否则看门狗就会硬件复位电路。

窗口看门狗(WWDG):要求看门狗在精确计时窗口起作用。(使用APB1的时钟,即36MHz,没有专门的时钟,所以不算独立) 要求看门狗在精确计时窗口起作用,相当于有最早和最晚喂狗界限,提前喂狗和超过最晚界限都会产生复位。

注意事项

在大型项目中,各种状态和可能都非常多,写程序时一不小心就会留下bug,让你的程序卡死或崩溃。

解决办法:

1.程序员设计时就考虑程序运行的各种情况,避免常见的BUG,合理规划程序。

2.定期对程序进行迭代更新,修复存在的BUG。

3.看门狗,出现卡死/崩溃,让看门狗帮我们硬件复位一下。

硬件故障:例如想读取传感器的内容,但传感器坏了,程序就有可能死等去获取数据。

电磁干扰:强的电磁干扰可能让电子元器件失灵/程序跑飞的现象,有看门狗的话,程序进行复位,就会再次正常运行。

独立看门狗的框图

独立看门狗的框图与定时器很像,主要的部分都是预分频器PSC、自动重载器ARR、计数器CNT。

STM32的看门狗(WDG)_第1张图片

独立看门狗的预分频器(IWDG_PR)是8位的,最大值是2^8-1=255,最大可进行256分频。

独立看门狗的重装载寄存器和递减计数器是12位的,(IWDG_RLR)重装载数值与计数器值的最大值是2^12-1=4095,最多可计数4096次。

定时器的重要结构

STM32的看门狗(WDG)_第2张图片

需要注意的是定时器的PSC/ARR/CNT均为16位。

IWDG_KR寄存器

STM32的看门狗(WDG)_第3张图片

0xCCCC:1100 1100 1100 1100

0xAAAA:1010 1010 1010 1010

0x5555:0101 0101 0101 0101

IWDG_SR(状态寄存器)是可读不可写的。

IWDG超时时间

STM32的看门狗(WDG)_第4张图片

IWDG的预分频值有PR[2:0]决定,并不像定时器那样PSC值+1,而是有特定的预分频系数。

RL[11:0]由于是12位的,最小值是0,最大值是2^12-1,对应的计数值就是1-2^12(4096)。

WWDG框图

STM32的看门狗(WDG)_第5张图片

WWDG工作特性

STM32的看门狗(WDG)_第6张图片

STM32的看门狗(WDG)_第7张图片

超时时间是喂狗的最晚时间,即定时器减到0的时间。

窗口时间是最早的喂狗时间,由之前的框图,T[5:0]=W[5:0]时就可以喂狗了。

IWDG与WWDG对比

STM32的看门狗(WDG)_第8张图片

你可能感兴趣的:(单片机,嵌入式硬件)