1. 看门狗预分频系数基础概念
在嵌入式系统设计中,看门狗定时器(WDT)是确保系统可靠性的关键组件。预分频系数作为看门狗的核心参数之一,直接影响着定时器的溢出时间和系统监控的精确度。
独立看门狗(IWDG)通常由内部低速时钟(LSI)驱动,STM32系列芯片的LSI频率典型值为40kHz(实际范围30-60kHz)。预分频器的作用是将这个基础时钟频率进行分频,从而获得不同的计时基准。以STM32为例,其预分频系数可选值为:[4,8,16,32,64,128,256],这些值通过配置预分频寄存器(IWDG_PR)来实现。
8分频意味着将原始时钟频率除以8。对于40kHz的LSI时钟,经过8分频后:
- 分频后频率 = 40kHz / 8 = 5kHz
- 时钟周期 = 1 / 5kHz = 0.2ms
这个分频后的时钟将作为看门狗计数器的计数基准。12位的递减计数器从重装载值开始,每个分频时钟周期减1,当减到0时触发系统复位。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 8分频配置的具体实现方法
2.1 寄存器级配置
在寄存器层面配置8分频,需要操作IWDG_PR寄存器。以下是典型操作步骤:
- 解锁写保护:向IWDG_KR寄存器写入0x5555
- 等待状态寄存器(IWDG_SR)的PVU位清零(表示可以修改预分频值)
- 向IWDG_PR寄存器写入0x01(对应8分频)
- 重新锁定:向IWDG_KR寄存器写入0x0000
c复制// 寄存器级配置示例
#define IWDG_KR (*((volatile uint32_t *)0x40003000))
#define IWDG_PR (*((volatile uint32_t *)0x40003004))
#define IWDG_SR (*((volatile uint32_t *)0x4000300C))
void IWDG_SetPrescaler_8(void) {
IWDG_KR = 0x5555; // 解锁PR和RLR寄存器
while(IWDG_SR & 0x01); // 等待PVU位清零
IWDG_PR = 0x01; // 设置8分频
IWDG_KR = 0x0000; // 锁定寄存器
}
