当前位置: 首页 > article >正文

STM32学习之WWDG(原理+实操)

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨
📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】
📢:文章若有幸对你有帮助,可点赞 👍 收藏 ⭐不迷路🙉
📢:内容若有错误,敬请留言 📝指正!原创文,转载注明出处

文章目录

    • WWDG工作原理
    • WWDG关键寄存器
    • 上窗口值和下窗口值
    • 问答
      • WWDG使能后,递减计数器就开始工作了是吗?
      • 上窗口值为0x5f,计数器初始值设置为0x7f,那么计数器递减到什么时候开始喂狗?
      • 是减到0x5e,立马就喂狗吗?
      • 所以如果上窗口值设置的比较小,喂狗很可能来不及完成吗?


WWDG工作原理

WWDG 内部有一个递减计数器,从设定的初始值开始向下计数。它设定了一个特定的时间窗口,系统必须在这个窗口内完成特定的操作或响应,即计数器值必须落在有效刷新时间窗口内时才能成功喂狗。如果计数器计数到 0 时,未及时刷新,或者在计数器值大于上窗口阈值时就进行刷新,都会触发系统复位。

WWDG关键寄存器

以 STM32 为例,窗口看门狗的功能通过以下寄存器配置实现:
控制寄存器(WWDG_CR)
位 7(WDGA):使能看门狗功能。
位 6:0(W [6:0]):设置上窗口阈值,决定有效刷新时间窗口的上限。
配置寄存器(WWDG_CFR)
位 8:7(EWI):使能提前唤醒中断(当计数器值降至 0x40 时触发中断,用于提前提醒程序刷新看门狗)。
位 6:0(T [6:0]):设置计数器时钟分频系数,用于调整计数器递减速度。
状态寄存器(WWDG_SR)
仅 1 位(EWIF):记录提前唤醒中断是否发生,需软件清零。

上窗口值和下窗口值

上窗口值和下窗口值是决定其有效刷新时间范围的核心参数,二者共同定义了一个 “时间窗口”,程序必须在该窗口内完成 “喂狗”(刷新计数器)操作,否则将触发系统复位。

下窗口值:是一个固定不变的阈值,在大多数微控制器(如 STM32)中,其值固定为 0x40。
上窗口值:是一个可通过寄存器配置的阈值,代表有效刷新时间窗口的上限。
在 STM32 中,上窗口值由 WWDG_CR 寄存器的 W [6:0] 位 定义,取值范围为 0x40 < 上窗口值 ≤ 0x7F(即 65~127,共 63 个可选值)。

程序必须在计数器值从初始值递减至小于等于上窗口值,且大于下窗口值(0x40)时进行刷新。
过早刷新(计数器值 > 上窗口值时刷新)会被视为无效操作,同样会触发复位。

问答

WWDG使能后,递减计数器就开始工作了是吗?

是的,WWDG 使能后,递减计数器就开始工作

上窗口值为0x5f,计数器初始值设置为0x7f,那么计数器递减到什么时候开始喂狗?

当计数器递减到小于 0x5F 且大于等于 0x40 时就可以开始喂狗。即计数器从 0x7F 开始递减,减到 0x5E 及以下(但不小于 0x40)时,就进入了可以喂狗的窗口范围。

是减到0x5e,立马就喂狗吗?

窗口看门狗的喂狗时机是在计数器的值处于上窗口值和下窗口值之间时进行。当计数器从初始值 0x7F 递减到 0x5E 时,已经进入了可喂狗的窗口范围,但具体的喂狗时机可以根据程序的实际情况来决定,只要在计数器递减到 0x40 之前完成喂狗操作,就可以避免看门狗复位。

所以如果上窗口值设置的比较小,喂狗很可能来不及完成吗?

上窗口值决定了喂狗窗口的起始时间。上窗口值较小,意味着计数器从初始值递减到可喂狗窗口的时间较短,留给程序执行到喂狗代码的时间就少。例如,若初始值为 0x7F,上窗口值设为 0x45,计数器从 0x7F 递减到 0x45 很快,可能程序还未执行到喂狗部分,计数器就已经接近或达到下窗口值 0x40 了,容易导致喂狗来不及。

http://www.lryc.cn/news/2398469.html

相关文章:

  • Keil MDK5.37或更高版本不再预装ARM Compiler Version5导致编译错误的解决方法
  • 【iOS(swift)笔记-14】App版本不升级时本地数据库sqlite更新逻辑二
  • 前端性能优化:提升用户体验的关键策略
  • Unity-UI组件详解
  • 基于大模型的短暂性脑缺血发作(TIA)全流程预测与干预系统技术方案
  • 嵌入式学习 D31:系统编程--Framebuf帧缓冲
  • 黑马点评完整代码(RabbitMQ优化)+简历编写+面试重点 ⭐
  • Java 大视界 -- Java 大数据在智能安防视频监控中的异常事件快速响应与处理机制(273)
  • 【数据库】安全性
  • 【图像处理入门】4. 图像增强技术——对比度与亮度的魔法调节
  • D2-基于本地Ollama模型的多轮问答系统
  • HALCON 深度学习训练 3D 图像的几种方式优缺点
  • 123网盘SDK-npm包已发布
  • 强制卸载openssl-libs导致系统异常的修复方法
  • 乐播视频v4.0.0纯净版体验:高清流畅的视听盛宴
  • Linux 命令全讲解:从基础操作到高级运维的实战指南
  • FreeRTOS的简单介绍
  • DeepSeek模型安全部署与对抗防御全攻略
  • Docker容器使用手册
  • 深入解析C++引用:从别名机制到函数特性实践
  • Fuse.js:打造极致模糊搜索体验
  • MyBatis分页插件(以PageHelper为例)与MySQL分页语法的关系
  • CentOS 7.9 安装 宝塔面板
  • 使用Redis作为缓存优化ElasticSearch读写性能
  • 项目交付后缺乏回顾和改进,如何持续优化
  • 从0开始学习R语言--Day15--非参数检验
  • Linux或者Windows下PHP版本查看方法总结
  • EC2 实例详解:AWS 的云服务器怎么玩?☁️
  • 第三发 DSP 点击控制系统
  • saveOrUpdate 有个缺点,不会把值赋值为null,解决办法