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

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

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

相关推荐
wuminyu3 小时前
专家视角看Java字节码加载与存储指令机制
java·linux·c语言·jvm·c++
Deitymoon3 小时前
STM32——蓝牙模块双串口控制led
stm32·单片机·嵌入式硬件
Navigator_Z4 小时前
LeetCode //C - 1033. Moving Stones Until Consecutive
c语言·算法·leetcode
xiangw@GZ5 小时前
智能锁TouchKey的抗干扰设计【2】-软件算法
嵌入式硬件
iCxhust5 小时前
微机原理实践教程(C语言篇)---A001闪烁灯
c语言·开发语言·汇编·单片机·嵌入式硬件·51单片机·微机原理
一起搞IT吧5 小时前
相机Camera日志实例分析之二十:相机Camx【照片后置4800/5000/6400万拍照】单帧流程日志详解
android·嵌入式硬件·数码相机·智能手机
爱编码的小八嘎5 小时前
C语言完美演绎9-9
c语言
笨笨饿6 小时前
69_如何给自己手搓一个串口
linux·c语言·网络·单片机·嵌入式硬件·算法·个人开发
智者知已应修善业7 小时前
【51单片机不用数组动态数码管显示字符和LED流水灯】2023-10-3
c++·经验分享·笔记·算法·51单片机
爱编码的小八嘎8 小时前
C语言完美演绎9-16
c语言