【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. 写保护机制
    • 修改 PRRL 之前必须执行:
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触发复位

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

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

相关推荐
_F_y1 天前
MySQL用C/C++连接
c语言·c++·mysql
BackCatK Chen1 天前
C语言学习栏目目录
c语言·保姆级教程·c语言入门·c语言学习栏目目录
点灯小铭1 天前
基于单片机的多功能LCD音乐播放器设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
极客数模1 天前
【2026美赛赛题初步翻译F题】2026_ICM_Problem_F
大数据·c语言·python·数学建模·matlab
shansz20201 天前
暂时无法解决的关于STM32F103的RTC日期更新问题
stm32·嵌入式硬件·实时音视频
2501_927773071 天前
嵌入式——时序IIC
单片机·嵌入式硬件
LS_learner1 天前
针对VMware Workstation虚拟机无法联网问题排查
嵌入式硬件
项目題供诗1 天前
51单片机入门(七)
单片机·嵌入式硬件·51单片机
请注意这个女生叫小美1 天前
C语言 斐波那契而数列
c语言
Legendary_0081 天前
Type-C 一拖二快充线:突破单口限制的技术逻辑
c语言·开发语言