嵌入式开发之STM32学习笔记day21
STM32F103C8T6 WDG看门狗
1 WDG简介
看门狗(Watchdog)是一种硬件或软件机制,用于监控程序的运行状态。当程序因设计漏洞、硬件故障、电磁干扰等原因出现卡死或跑飞现象时,看门狗能够及时复位程序,避免程序长时间罢工,从而保证系统的可靠性和安全性。例如,在嵌入式系统中,看门狗可以有效防止设备因软件故障而停止工作,确保设备的持续运行。
看门狗本质上是一个定时器。当程序正常运行时,需要定期执行“喂狗”操作,即重置看门狗的计数器。如果在指定的时间范围内没有执行喂狗操作,看门狗硬件电路会自动产生复位信号,将系统复位到初始状态。例如,如果看门狗的超时时间设置为1秒,而程序在1秒内没有执行喂狗操作,看门狗就会触发复位。
STM32微控制器内置了两种类型的看门狗:独立看门狗(IWDG)和窗口看门狗(WWDG)。
独立看门狗(IWDG):特点:独立工作,对时间精度要求较低,适合对复位时间要求不严格的场景。
应用场景:常用于一般嵌入式系统中,如智能家居设备、工业控制器等,这些设备对复位时间的精确性要求不高,但需要确保设备在出现故障时能够及时复位。
工作原理:IWDG通过一个内部时钟源独立运行,即使主系统时钟出现故障,IWDG仍然可以正常工作。它通过一个计数器来检测程序是否正常运行,如果计数器溢出,就会触发系统复位。窗口看门狗(WWDG):特点:要求看门狗在精确的时间窗口内起作用,对时间精度要求较高。
应用场景:适用于对复位时间精度要求较高的场景,如航空航天设备、汽车电子等,这些设备需要在精确的时间窗口内完成复位操作,以确保系统的安全性和可靠性。
工作原理:WWDG通过一个外部时钟源运行,需要在特定的时间窗口内进行喂狗操作。如果喂狗操作超出了这个时间窗口,WWDG就会触发复位。这种机制可以有效防止程序在短时间内多次复位,同时也能确保在规定时间内完成复位操作。
2 IWDG独立看门狗框图
图中展示了独立看门狗(IWDG)的框图,该看门狗由STM32微控制器提供。图中显示,IWDG由几个关键部件组成:预分频寄存器(IWDG_PR)、状态寄存器(IWDG_SR)、重装载寄存器(IWDG_RLR)和键寄存器(IWDG_KR)。
- 预分频器:由一个8位的预分频器和一个40kHz的LSI(低速内部)时钟源组成,用于调整看门狗计数器的时钟频率。
- 12位递减计数器:这是看门狗的核心部件,它从重装载寄存器(IWDG_RLR)中加载一个初始值,并开始递减计数。当计数器达到0时,如果程序没有及时“喂狗”(即重置计数器),就会触发IWDG复位,从而重启系统。
- 重装载寄存器:用于设置递减计数器的初始值。在写入新的值之前,需要通过键寄存器(IWDG_KR)进行解锁。
- 键寄存器:用于解锁重装载寄存器,以便写入新的重装载值。这增加了系统的安全性,防止意外修改看门狗的设置。
图中还指出,看门狗功能处于VDD供电区,这意味着即使在停机和待机模式下,看门狗仍然可以正常工作。这种设计确保了系统的可靠性,即使在低功耗模式下也能监控程序的运行状态。
3 IWDG键寄存器
写入键寄存器的值 | 作用 |
0xCCCC | 启用独立看门狗 |
0xAAAA | IWDG_RLR中的值重新加载到计数器(喂狗) |
0x5555 | 解除IWDG_PR和IWDG_RLR的写保护 |
0x5555之外的其他值 | 启用IWDG_PR和IWDG_RLR的写保护 |
- 键寄存器本质上是控制寄存器,用于控制硬件电路的工作
- 在可能存在干扰的情况下,一般通过在整个键寄存器写入特定值来代替控制寄存器写入一位的功能,以降低硬件电路受到干扰的概率
4 IWDG超时时间
超时时间:TIWDG = TLSI × PR预分频系数 × (RL + 1)
其中:TLSI = 1 / FLSI
案例计算:
预分频系数为4,输入时钟为40kHz
TIWDG = 1/40000 × 4 × (RL + 1) = 0.1ms × (RL + 1) = [0.1ms, 409.6ms]
5 WWDG窗口看门狗框图
上图展示了窗口看门狗的框图,它由配置寄存器(WWDG_CFR)、控制寄存器(WWDG_CR)、预分频器(WWDGTB)、递减计数器(CNT)、比较器和复位逻辑组成。WWDG通过PCLK1(来自RCC时钟控制器)驱动,预分频器对时钟进行分频,递减计数器从控制寄存器(WWDG_CR)加载初始值并开始递减。当计数器值低于窗口寄存器(WWDG_CFR)设置的窗口值时,比较器会触发,若此时没有及时喂狗(即写入WWDG_CR),则产生复位信号,重启系统。这种机制确保了程序在指定的时间窗口内运行,防止程序卡死或跑飞,提高了系统的可靠性。
6 WWDG工作特性
- 递减计数器T[6:0]的值小于0x40时,WWDG产生复位
- 递减计数器T[6:0]在窗口W[6:0]外被重新装载时,WWDG产生复位
- 递减计数器T[6:0]等于0x40时可以产生早期唤醒中断(EWI),用于重装载计数器以避免WWDG复位
- 定期写入WWDG_CR寄存器(喂狗)以避免WWDG复位
7 WWDG超时时间
超时时间:
TWWDG = TPCLK1 × 4096 × WDGTB预分频系数 × (T[5:0] + 1)
窗口时间:
TWIN = TPCLK1 × 4096 × WDGTB预分频系数 × (T[5:0] - W[5:0])
其中:TPCLK1 = 1 / FPCLK1
案例计算:
实现超时时间为50ms, 窗口时间为30ms
TPCLK1 = 1/36MHz
50 = 1/36000 × 4096 × 8 × (T[5:0] + 1)
T[5:0] = 54
30= 1/36000 × 4096 × 8 × (54 - W[5:0])
W[5:0] = 33
8 IWDG和WWDG对比
IWDG独立看门狗 | WWDG窗口看门狗 | |
复位 | 计数器减到0后 | 计数器T[5:0]减到0后、过早重装计数器 |
中断 | 无 | 早期唤醒中断 |
时钟源 | LSI(40KHz) | PCLK1(36MHz) |
预分频系数 | 4、8、32、64、128、256 | 1、2、4、8 |
计数器 | 12位 | 6位(有效计数) |
超时时间 | 0.1ms~26214.4ms | 113us~58.25ms |
喂狗方式 | 写入键寄存器,重装固定值RLR | 直接写入计数器,写多少重装多少 |
防误操作 | 键寄存器和写保护 | 无 |
用途 | 独立工作,对时间精度要求较低 | 要求看门狗在精确计时窗口起作用 |