【STM32】预分频因子(Prescaler)和重装载值(Reload Value)

在 STM32 的 独立看门狗(IWDG) 中(结合上文【STM32】独立看门狗(提供完整实例代码)),为了控制看门狗的超时时间(溢出时间),我们主要设置两个参数:

名称 控制寄存器 控制函数 作用
预分频因子 Prescaler IWDG_PR IWDG_SetPrescaler() 决定看门狗时钟变慢多少倍
重装载值 Reload Value IWDG_RLR IWDG_SetReload() 看门狗倒计时起始值,越大超时越久

IWDG 超时时间计算公式

c 复制代码
Tout = ((4×2^prer) ×rlr) /40 (M3)

其中:

PR:预分频因子寄存器的值(0~7)
RL:重装载寄存器中的值(0~0x0FFF)
40:LSI 时钟频率为 40kHz

预分频因子(Prescaler)

📘 设置位置:

寄存器:IWDG_PR 的位 [2:0]

函数:IWDG_SetPrescaler(IWDG_Prescaler_xxx);

PR值 分频因子 实际频率(Hz)
0 /4 10,000 Hz
1 /8 5,000 Hz
2 /16 2,500 Hz
3 /32 1,250 Hz
4 /64 625 Hz
5 /128 312.5 Hz
6/7 /256 156.25 Hz

分频因子越大 → 看门狗时钟越慢 → 超时时间越长

重装载值(Reload)

📘 设置位置:

寄存器:IWDG_RLR 的位 [11:0]

函数:IWDG_SetReload(uint16_t value);

RL值 含义
0x0000 最小计数(最短时间)
0x0FFF 最大计数(最长时间)

实质上是"看门狗计数器初始值",倒计时到 0 就触发复位。

举个完整例子

设置:

  • 预分频因子 = /256(PR = 6)
  • 重装载值 = 4095(0x0FFF)
c 复制代码
Tout = ((4 × 2^6) × 4095) / 40
     = (256 × 4095 × 4) / 40
     = 419430 / 40
     = 10485.75 ms ≈ 10.5 秒

即,如果程序 10.5 秒内不喂狗,系统将自动复位。
复制代码
调节思路:
想要超时长一点	增大 PR 或 RL
想要超时短一点	减小 PR 或 RL
注意事项
  1. 写保护机制
    • 修改 PR 和 RL 之前必须执行:
c 复制代码
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
  1. 最大 RL = 0x0FFF(4095)
  2. 修改时需等待状态寄存器清除
c 复制代码
while(IWDG_GetFlagStatus(IWDG_FLAG_PVU) != RESET);
while(IWDG_GetFlagStatus(IWDG_FLAG_RVU) != RESET);
简化时序
c 复制代码
LSI 40kHz --[预分频PR]--> 低速时钟 --[倒计时从RL开始]--> 到0触发复位

预分频因子决定"计数器走得多慢",重装载值决定"从多少开始倒计时",两者共同决定看门狗的超时时间。

以上,欢迎有从事同行业的电子信息工程、互联网通信、嵌入式开发的朋友共同探讨与提问,我可以提供实战演示或模板库。希望内容能够对你产生帮助!

相关推荐
Navigator_Z4 小时前
LeetCode //C - 1289. Minimum Falling Path Sum II
c语言·算法·leetcode
himobrinehacken5 小时前
取模运算的汇编奥秘揭秘
c语言·安全
Tronlong创龙6 小时前
SBC‑TLT153 嵌入式 Linux 应用开发,交叉编译与 GDB 调试实践(上)
嵌入式硬件·嵌入式开发·硬件开发·工业控制·工业开发板
巴渝小禹6 小时前
单片机死循环delay_us()计算方法
单片机·嵌入式硬件
Yiran_G6 小时前
LoRa串口模组和SoC模组怎么选?从MCU架构看无线通信方案设计
嵌入式硬件·物联网
HQB20267 小时前
CN6150|简芯维尔 6V/500mA 高速低噪声 CMOS‑LDO 线性稳压器
嵌入式硬件·硬件工程
青岚_Nox8 小时前
C语言实战:带你手写一个带"计时功能"的猜数字小游戏
c语言
科芯创展8 小时前
XZ3445 高集成升压/升降压DC-DC电源芯片技术解析
单片机·嵌入式硬件
艾芯微科技8 小时前
高充放电流锂电充放 SoC:ETA9885E10,便携储能、小移动电源 BOM 选型笔记
网络·单片机·嵌入式硬件·集成测试·51单片机