【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触发复位

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

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

相关推荐
cmpxr_12 小时前
【C】局部变量和全局变量及同名情况
c语言·开发语言
网域小星球14 小时前
C 语言从 0 入门(十七)|结构体指针 + 动态内存 + 文件综合实战
c语言·开发语言·文件操作·结构体指针·动态内存·综合项目
ipod74114 小时前
电子电路的元器件
单片机·嵌入式硬件
清风66666614 小时前
基于单片机的脉搏与呼吸监测报警设备设计与实现
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
Hello_Embed15 小时前
嵌入式上位机开发入门(十九):Socket 状态检测与断线重连
网络·单片机·网络协议·tcp/ip·嵌入式
foundbug99915 小时前
STM32 内部温度传感器测量程序(标准库函数版)
stm32·单片机·嵌入式硬件·算法
天狼IoT15 小时前
STM32-keil+CubeMX快速开发:新建项目
stm32·单片机·嵌入式硬件
Tomhex15 小时前
STM32型号命名解析
stm32
lcj251115 小时前
【C语言】数据在内存中的存储
c语言·数据结构
gihigo199816 小时前
量程自动切换数字电压表Proteus仿真+程序
单片机·嵌入式硬件·proteus