1. 看门狗预分频系数基础解析
看门狗定时器(WDT)作为嵌入式系统中的"安全卫士",其核心功能是通过周期性复位来防止程序跑飞。预分频系数(Prescaler)的配置直接决定了看门狗的"心跳频率",这个参数设置不当会导致两种极端情况:频繁误复位或失去保护作用。
以STM32系列芯片为例,独立看门狗(IWDG)的时钟源通常为32kHz低速内部时钟(LSI),经过预分频器分频后得到实际计数时钟。8分频意味着将基准时钟频率除以8,此时:
- 原始时钟周期 = 1/32kHz ≈ 31.25μs
- 分频后周期 = 31.25μs × 8 = 250μs
- 对应计数频率 = 32kHz / 8 = 4kHz
关键提示:预分频系数的选择必须与重装载值(RLR)协同计算,确保看门狗复位间隔(Tout)符合实际需求。公式为:
Tout = (Prescaler × RLR) / LSI_freq
2. 8分频配置的实操演示
2.1 硬件寄存器配置逻辑
在STM32标准外设库中,8分频对应的寄存器配置值为0x02(二进制010),这个映射关系由芯片参考手册定义。以HAL库实现为例:
c复制IWDG_HandleTypeDef hiwdg;
hiwdg.Instance = IWDG;
hiwdg.Init.Prescaler = IWDG_PRESCALER_8; // 预分频系数宏定义
hiwdg.Init.Reload = 0xFFF; // 重装载值
if (HAL_IWDG_Init(&hiwdg) != HAL_OK) {
Error_Handler();
}
2.2 定时周期计算实例
假设我们需要设置1秒的超时窗口:
-
已知条件:
- LSI频率 = 32kHz
- 预分频 = 8
- 目标时间 = 1s
-
计算重装载值:
Tout = (Prescaler × RLR) / LSI_freq
1 = (8 × RLR) / 32000
RLR = 32000 / 8 = 4000 (0xFA0) -
验证最大支持时间:
STM32的RLR寄存器为12位,最大值4095
最大超时 =
