STM32Cubemx配置独立看门狗(IWDG)
文章目录
- 1. 工作原理
- 2. IWDG的特点
- 3. IWDG的基本流程
- 4. IWDG的配置与使用
- 5. 应用场景
- 6. 使用STM32Cubemx配置IWDG
- 7. 总结
独立看门狗(Independent Watchdog,简称IWDG)是一种常见的硬件模块,主要用于监测嵌入式系统的运行状态,以确保系统在出现异常或死机时能够自动重启,恢复到正常工作状态。它是一种防止系统陷入死锁或无限循环的保护机制。
1. 工作原理
IWDG的基本原理是定期“喂狗”,即系统定期向看门狗发送信号(或重置看门狗计时器)。如果看门狗在规定的时间内没有收到信号,它会认为系统出现故障,触发系统复位(重启)。一般来说,IWDG独立于主系统运行,具有自带的时钟源,不依赖于系统的时钟。
2. IWDG的特点
- 独立性:与系统的主时钟源(如CPU时钟)无关,IWDG通常使用一个独立的低速振荡器(例如LSI),即使系统时钟出现故障,IWDG依然能正常工作。
- 自动重启:当系统出现故障时,IWDG触发复位,重新启动系统。
- 防止死锁:在系统出现死锁、死循环等问题时,看门狗可以有效地防止系统长时间处于不可恢复的状态。
- 可配置性:IWDG一般可以设置超时时间,超时后触发复位。这个超时时间通常是几百毫秒到几秒钟不等。
3. IWDG的基本流程
- 初始化:在程序开始时,配置IWDG的超时时间。通常,开发者需要指定看门狗的时间间隔。
- 喂狗:在主程序中,开发者需要定期向看门狗发送“喂狗”信号,通常是通过重载计时器来实现。
- 超时触发复位:如果IWDG在设定的时间内没有收到“喂狗”信号,它会触发复位信号,重新启动系统。
4. IWDG的配置与使用
以下是IWDG的一些常见配置步骤(以STM32为例):
- 启动IWDG时钟:通常通过一个独立的低速振荡器(LSI)提供时钟。
- 配置预分频器:根据需求调整IWDG的超时时间,通常是通过调整预分频器和计数器来实现。
- 喂狗:在主程序中定期调用函数来重载IWDG计时器。如果定时“喂狗”,系统就不会复位。
5. 应用场景
- 监控系统的稳定性:例如嵌入式设备、工业控制系统等,它们需要长时间运行。IWDG能确保系统在遇到异常时能自动恢复。
- 防止死机:如系统因为某种原因停止响应,IWDG可以避免系统处于死锁状态。
- 电池供电设备:在一些低功耗设备中,IWDG能够有效地管理设备的生命周期和电源管理。
6. 使用STM32Cubemx配置IWDG
开启IWDG:
Ttimeout:看门狗超时时间(单位:秒)
RLR :IWDG 重载寄存器的值(Reload Register,计数器的最大值)
PR :IWDG 预分频器的值(Prescaler Register)
fIWDG:IWDG 的时钟频率(单位:Hz)
这里的话IWDG的超时时间配置为了1s。
代码编写:
这里的代码每隔600ms进行喂狗,狗不会死。
将喂狗时间延迟狗死了,系统反复重启:
7. 总结
IWDG作为一种硬件看门狗机制,在嵌入式系统中扮演着重要角色。通过在系统中引入IWDG,可以有效防止系统死锁、崩溃等问题,提高系统的稳定性和可靠性。特别是在一些对稳定性要求较高的场景中(如工业自动化、医疗设备等),IWDG提供了一种简单而有效的自恢复机制。