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

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

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

相关推荐
零一iTEM4 小时前
MAX98357A_音频输出测试
单片机·嵌入式硬件·开源·音视频·硬件工程
逐步前行4 小时前
STM32_标准库结构
stm32·单片机·嵌入式硬件
Hello_Embed4 小时前
libmodbus STM32 主机实验(USB 串口版)
笔记·stm32·学习·嵌入式·freertos·modbus
不做无法实现的梦~4 小时前
PX4各个模块的作用(3)
linux·stm32·嵌入式硬件·机器人·自动驾驶
清风6666664 小时前
基于单片机的喷漆机器人自动控制系统
单片机·嵌入式硬件·机器人·毕业设计·课程设计·期末大作业
不能跑的代码不是好代码5 小时前
STM32独立看门狗(IWDG)知识点及标准库使用指南
stm32·嵌入式硬件
程序员良许5 小时前
嵌入式处理器架构
后端·单片机·嵌入式
wengqidaifeng5 小时前
数据结构(三)栈和队列(上)栈:计算机世界的“叠叠乐”
c语言·数据结构·数据库·链表
来自晴朗的明天5 小时前
15、隔离 DC-DC 电源电路(18S12 模块)
单片机·嵌入式硬件·硬件工程
我送炭你添花5 小时前
电子世界的奇妙冒险:从一个电阻开始(系列目录)
人工智能·单片机·嵌入式硬件·fpga开发