.webp)
一文读懂STM32之独立看门狗的原理
看门狗
**简介:独立看门狗用通俗一点的话来解释就是一个12位的递减计数器,当计数器的值从某个值一直减到0的时候,系统就会产生一个复位信号,即IWDG_RESET。 如果在计数没减到0之前,刷新了计数器的值的话,那么就不会产生复位信号,这个动作就是我们经常说的喂狗。**看门狗功能由 VDD 电压域供电,在停止模式和待机模式下仍能工作。
IWDG的作用和应用
主要用于检测外界电磁干扰,或硬件异常导致的程序跑飞问题,外界电磁干扰或者自身系统(硬件或软件)异常,造成程序跑飞,如:陷入某个不正常的死循环,打断正常的程序运行。
主要应用在一些需要高稳定性的产品中,并且对时间精度要求较低的场合。
独立看门狗是异常处理的最后手段,不可依赖,应在设计时尽量避免异常的发生!
IWDG功能框图剖析
CPU必须及时喂狗,否则系统复位重启!
在stm32cubemx中激活IWDG后,LSI时钟会自动开启。
键寄存器(IWDG_KR)介绍
作用:用于喂狗,解除PR和RLR寄存器写访问保护,以及启动看门狗工作
预分频器寄存器 (IWDG_PR)
重装载寄存器(IWDG_RLR)
作用:用于存放重装载值,低12位有效,即最大值为4096。
状态寄存器(IWDG_SR)
作用:用于判断预分频值和重装载值是否已经被更新
寄存器配置操作步骤
- 通过在键寄存器 (IWDG_KR) 中写入 0xCCCC 来使能 IWDG。
- 通过在键寄存器 (IWDG_KR) 中写入 0x5555 来使能寄存器访问。
- 通过将预分频器寄存器 (IWDG_PR) 编程为 0~7 中的数值来配置预分频器。
- 对重载寄存器 (IWDG_RLR) 进行写操作。
- 等待寄存器更新 (IWDG_SR = 0x0000 0000)。
- 刷新计数器值为 IWDG_RLR 的值 (IWDG_KR = 0xAAAA)。
IWDG溢出时间计算
IWDG最短最长超时时间:
HAL库:Tout =psc∗rlr/fIWDG
$$
寄存器:Tout
=(4∗2^prer)∗rlr/(f IWDG)
$$
参数解释:
Tout是看门狗溢出时间
f 𝐼𝑊𝐷𝐺是看门狗的时钟源频率
psc是看门狗预分频系数
rlr是看门狗重装载值
编程实战
方向:验证不及时喂狗,系统将复位重启
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载必须注明来自 卡卡罗特
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果