STM32中独立看门狗(IWDG)与窗口看门狗(WWDG)设计及时间计算
文章目录
- STM32中独立看门狗(IWDG)与窗口看门狗(WWDG)设计及时间计算
- 一、独立看门狗(IWDG)
- 1.1 IWDG 原理
- 1.2 IWDG 时间计算公式
- 1.3 IWDG 配置案例
- 二、窗口看门狗(WWDG)
- 2.1 WWDG 原理
- 2.2 WWDG 时间计算公式
- 2.3 WWDG 配置案例
- 三、总结
STM32中独立看门狗(IWDG)与窗口看门狗(WWDG)设计及时间计算
在嵌入式系统设计中,看门狗是一种用于防止系统死机的保护机制,能够在系统发生故障时自动复位。STM32 系列单片机提供了两种看门狗机制:独立看门狗(Independent Watchdog, IWDG)和窗口看门狗(Window Watchdog, WWDG)。本文将详细介绍这两种看门狗的原理、计时设计及相关计算公式,并结合具体案例说明如何进行配置。
一、独立看门狗(IWDG)
1.1 IWDG 原理
独立看门狗(IWDG)是一个基于低速内部时钟(LSI)的看门狗计时器,通常用于要求较高安全性的应用场合。IWDG 不受系统时钟影响,具有独立的时钟源,通常为 32 kHz。它可以在系统出现软件故障时通过自动复位来重启系统,从而保证系统稳定运行。
1.2 IWDG 时间计算公式
IWDG 的计时由预分频器(Prescaler)和重载寄存器(Reload Register)的值决定:
- 预分频器(Prescaler):可以设置为 4、8、16、32、64、128 或 256。
- 重载寄存器(Reload Register):值范围为 0 到 0xFFF(4095)。
其超时时间的计算公式为:
[
T_{timeout} = \frac{(Reload + 1) \times Prescaler}{LSI_frequency}
]
其中:
- ( Reload ) 为重载寄存器的值(0 到 4095)。
- ( Prescaler ) 为预分频器的值,可选范围是 4 到 256。
- ( LSI_frequency ) 是低速内部时钟的频率,通常为 32 kHz。
1.3 IWDG 配置案例
假设设备需要每 4 秒喂狗一次,否则系统将复位。LSI 时钟频率为 32 kHz。
配置步骤:
-
选择预分频器(Prescaler):
可选的预分频器值为 4、8、16、32、64、128 或 256。为了满足约 4 秒的超时时间,我们选择预分频器为 64。 -
计算重载值(Reload):
根据公式:[
4 = \frac{(Reload + 1) \times 64}{32000}
]解得:
[
Reload + 1 = \frac{4 \times 32000}{64} = 2000
]因此:
[
Reload = 1999
]
总结:
通过选择预分频器为 64,重载寄存器值设为 1999,独立看门狗的超时时间将接近 4 秒。如果在 4 秒内没有重置 IWDG,系统将复位。
二、窗口看门狗(WWDG)
2.1 WWDG 原理
窗口看门狗(WWDG)是一种基于高速外部时钟(通常为主系统时钟)计时的看门狗计时器。WWDG 通过设置一个允许喂狗的时间窗口,当系统在该窗口之外进行喂狗操作时,将触发复位。因此,WWDG 适用于对喂狗时机有严格要求的场合。
2.2 WWDG 时间计算公式
WWDG 的时间计算涉及计数器初始值、窗口值和预分频器:
- 计数器(Counter):初始值设置在 0x40 到 0x7F 之间。
- 窗口值(Window Value):设置允许喂狗的时间窗口,范围为 0x40 到 0x7F。
- 预分频器(Prescaler):分频因子可为 1、2、4 或 8。
超时时间计算公式为:
[
T_{timeout} = \frac{(Counter - 0x40) \times Prescaler}{Clock_frequency}
]
其中:
- ( Counter ) 为计数器的初始值(0x40 到 0x7F)。
- ( Prescaler ) 为预分频器的值(1、2、4 或 8)。
- ( Clock_frequency ) 为看门狗使用的时钟频率(通常为分频后的系统时钟)。
2.3 WWDG 配置案例
假设要求设备在 200 毫秒到 400 毫秒之间喂狗,否则系统复位。系统时钟频率为 8 MHz。
配置步骤:
-
选择预分频器(Prescaler):
我们选择预分频器为 8,以降低计数器递减的速度。 -
设置计数器初始值(Counter):
设置计数器初始值为 0x7F(十进制 127)。 -
设置窗口值(Window Value):
为满足 200 毫秒到 400 毫秒之间喂狗的需求,选择窗口值为 0x50(十进制 80)。 -
计算最小和最大超时时间:
-
最小超时时间(对应窗口值 0x50):
[
T_{min} = \frac{(0x50 - 0x40) \times 8}{8000000} = \frac{16 \times 8}{8000000} = 16 \text{毫秒}
] -
最大超时时间(对应计数器初始值 0x7F):
[
T_{max} = \frac{(0x7F - 0x40) \times 8}{8000000} = \frac{63 \times 8}{8000000} = 504 \text{毫秒}
]
-
总结:
设置计数器初始值为 0x7F,窗口值为 0x50,预分频器为 8,可确保喂狗操作的时间窗口在约 16 毫秒到 504 毫秒之间,即满足了 200 到 400 毫秒的要求。
三、总结
STM32 中的独立看门狗(IWDG)和窗口看门狗(WWDG)各自适用于不同的场合:
- IWDG 具有独立时钟源(LSI),适用于对系统安全性要求较高的应用场合。其超时时间取决于重载寄存器和预分频器的配置。
- WWDG 通过窗口机制对喂狗的时间范围进行限制,适用于要求喂狗时机较为精确的应用。其时间计算涉及计数器、窗口值和预分频器的设置。
通过合理设置看门狗的参数,可以达到对系统故障进行有效监控的目的,确保嵌入式系统的稳定和安全运行。