尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

STM32学习-WWDG

STM32学习-WWDG
📅 发布时间:2026/7/23 11:42:41

一、WWDG 简介

WWDG 的全称是Window Watchdog,即窗口看门狗。

从本质上看,WWDG 是一个能够产生系统复位信号和提前唤醒中断的递减计数器。它和普通“超时才复位”的看门狗不同,WWDG 对喂狗时间有更严格的要求:不能太晚,也不能太早,必须在规定的窗口期内喂狗。

1. WWDG 的核心特性

WWDG 具有以下特点:

特性说明
递减计数计数器从设定值开始向下递减
下限复位当计数器从0x40减到0x3F时复位
上限复位当计数器值大于窗口值W[6:0]时喂狗会复位
窗口喂狗必须在窗口期内刷新计数器
提前唤醒中断当计数器等于0x40时可产生 EWI 中断

其中,计数器从0x40减到0x3F时复位,也可以理解为计数器的T6位从 1 跳变到 0 时触发复位。

2. 什么是窗口期

WWDG 的喂狗不是任何时候都可以执行,而是必须落在窗口期内。

根据资料内容,窗口期满足:

W[6:0] >= 窗口期 > 0x3F

更直观地理解:

计数器值 > 窗口值 W -> 喂狗太早,系统复位 0x40 <= 计数器值 <= W -> 窗口期内,可以喂狗 计数器值 < 0x40 -> 喂狗太晚,系统已经复位

因此,WWDG 不仅可以检测程序是否“卡死”,还可以检测程序运行节奏是否异常。

3. WWDG 的作用

WWDG 主要用于监测单片机程序运行时效是否精准,重点检测软件异常。

典型异常包括:

  • 程序运行过慢,导致没有及时喂狗。

  • 程序运行过快,导致过早喂狗。

  • 程序流程错乱,喂狗位置被异常提前或延后执行。

  • 任务调度异常,导致关键任务周期不稳定。

WWDG 适用于需要精准检测程序运行时间的场合。相比只要求“别超时”的独立看门狗,窗口看门狗更强调“必须在正确时间范围内运行”。

二、WWDG 工作原理

WWDG 的工作过程可以概括为:

  1. 配置 WWDG 计数器初值、窗口值和预分频系数。

  2. 启动 WWDG 后,计数器开始递减。

  3. 当计数器值大于窗口值时,不能喂狗,否则复位。

  4. 当计数器值进入窗口期后,程序应及时喂狗。

  5. 如果计数器从0x40递减到0x3F,系统复位。

  6. 如果使能提前唤醒中断,当计数器等于0x40时可以进入 EWI 中断。

可以用下面的逻辑表示:

计数器从初值开始递减 | | 计数器值 > W | 过早喂狗会复位 v 进入窗口期:W >= 计数器值 > 0x3F | | 在窗口期内喂狗 | 计数器重新装载 v 如果没有及时喂狗 | v 计数器从 0x40 减到 0x3F,系统复位

WWDG 的核心不是“定时喂狗”这么简单,而是要根据窗口上限和超时下限设计合理的喂狗时机。

三、WWDG 框图理解

WWDG 的基本结构可以简化理解为:

PCLK1 -> 4096 分频 -> WWDG 预分频器 -> 递减计数器 -> 复位/提前唤醒中断 ^ | 窗口比较逻辑

关键模块说明:

模块作用
PCLK1WWDG 的时钟来源
4096 分频WWDG 内部固定分频
预分频器继续对 WWDG 时钟进行分频
递减计数器保存并递减当前计数值
窗口比较逻辑判断喂狗是否过早
EWI 中断计数器到达0x40时可触发提前唤醒中断

WWDG 的计数器范围与普通递减计数器不同,需要特别关注0x40和0x3F这两个边界。

四、WWDG 寄存器

WWDG 常见寄存器包括控制寄存器、配置寄存器和状态寄存器。

1. 控制寄存器 WWDG_CR

WWDG_CR用于使能窗口看门狗,并设置重装载计数器值,也就是完成喂狗。

常见关注点:

位/字段作用
WDGA使能 WWDG
T[6:0]计数器值,喂狗时会重新写入该值

使用 WWDG 时,T[6]必须保持为 1。因为当计数器从0x40减到0x3F时,T6位变为 0,系统会产生复位。

2. 配置寄存器 WWDG_CFR

WWDG_CFR用于配置窗口看门狗的工作参数。

字段作用
EWI使能提前唤醒中断
WDGTB设置预分频系数
W[6:0]设置窗口上限值

窗口值W[6:0]决定了“最早允许喂狗”的位置。如果计数器值仍然大于窗口值就喂狗,系统会立即复位。

3. 状态寄存器 WWDG_SR

WWDG_SR用于判断是否发生了 WWDG 提前唤醒中断。

当使能 EWI 后,计数器递减到0x40时可以触发提前唤醒中断。用户可以在中断回调函数中执行必要的异常处理、状态记录或最后一次补救操作。

五、WWDG 超时时间计算

WWDG 的超时时间由 PCLK1、固定 4096 分频、预分频系数以及计数器初值共同决定。

1. WWDG 计数时钟

WWDG 的计数时钟可理解为:

WWDG计数时钟 = PCLK1 / (4096 * 预分频系数)

其中预分频系数由WDGTB配置。常见关系为:

WDGTB预分频系数
01
12
24
38

2. 超时时间公式

WWDG 从计数器初值递减到0x3F时产生复位,因此可按下面公式估算超时时间:

Tout = (T[5:0] + 1) * 4096 * 预分频系数 / PCLK1

其中:

  • Tout:WWDG 超时时间,单位为秒。

  • T[5:0]:计数器低 6 位。

  • PCLK1:APB1 外设时钟频率。

  • 4096:WWDG 内部固定分频系数。

  • 预分频系数:由WDGTB设置。

如果计数器初值为0x7F,则低 6 位为0x3F,也就是 63,计数步数为63 + 1 = 64。

3. 计算示例

以 STM32F1 为例,假设:

PCLK1 = 36 MHz 计数器初值 T = 0x7F 预分频系数 = 8

则:

Tout = (63 + 1) * 4096 * 8 / 36000000 = 64 * 4096 * 8 / 36000000 ≈ 0.05825 s ≈ 58.25 ms

也就是说,如果没有在窗口期内及时喂狗,系统大约会在 58 ms 后复位。

4. 最短与最长超时时间

以 STM32F1、PCLK1 = 36 MHz估算:

条件估算方式时间
最短超时1 * 4096 * 1 / 36 MHz约 0.114 ms
最长超时64 * 4096 * 8 / 36 MHz约 58.25 ms

实际项目中,PCLK1 频率和芯片系列可能不同,计算时应以工程实际时钟树配置为准。

5. 窗口期时间理解

除了总超时时间,WWDG 还需要关注窗口开启时间。

如果窗口值为W,计数器初值为T,则从T递减到W之前都属于“过早喂狗区域”;当计数器值小于等于W且大于0x3F时,才进入允许喂狗的窗口期。

简化理解:

最早喂狗时间 = 从 T 递减到 W 所需时间 最晚喂狗时间 = 从 T 递减到 0x40 所需时间

工程上要保证程序正常执行到喂狗位置时,计数器正好处于窗口期内。

六、WWDG 配置步骤

使用 HAL 库配置 WWDG 时,可以按以下流程理解。

1. 设置分频系数和窗口值

调用:

HAL_WWDG_Init();

该函数用于初始化 WWDG,常见配置包括:

  • 计数器初值

  • 窗口值

  • 预分频系数

  • 是否启用提前唤醒中断

典型结构示意:

WWDG_HandleTypeDef hwwdg; ​ hwwdg.Instance = WWDG; hwwdg.Init.Prescaler = WWDG_PRESCALER_8; hwwdg.Init.Window = 0x5F; hwwdg.Init.Counter = 0x7F; hwwdg.Init.EWIMode = WWDG_EWI_ENABLE; ​ HAL_WWDG_Init(&hwwdg);

2. 完成 WWDG MSP 初始化

调用或重写:

HAL_WWDG_MspInit();

该函数通常用于配置 WWDG 相关底层资源,例如:

  • WWDG 外设时钟

  • NVIC 中断配置

3. 设置中断优先级并使能中断

如果使用提前唤醒中断,需要配置 NVIC:

HAL_NVIC_SetPriority(); HAL_NVIC_EnableIRQ();

如果没有正确配置 NVIC,即使 WWDG 产生 EWI 中断,CPU 也不会进入对应中断服务函数。

4. 编写中断服务函数

中断服务函数一般写成:

void WWDG_IRQHandler(void) { HAL_WWDG_IRQHandler(&hwwdg); }

HAL_WWDG_IRQHandler()会处理 HAL 内部中断逻辑,并进一步调用用户回调函数。

5. 重定义提前唤醒中断回调函数

常用回调函数:

void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg) { /* 用户处理逻辑 */ }

该回调函数可用于在即将复位前执行必要处理,例如记录异常状态、保存关键数据或进行最后一次系统检查。

6. 在窗口期内喂狗

调用:

HAL_WWDG_Refresh();

该函数用于刷新 WWDG 计数器,也就是喂狗。

需要注意:WWDG 必须在窗口期内喂狗。过早喂狗和过晚喂狗都会导致复位。

附:WWDG 使用注意事项

1. 喂狗不能只看“是否超时”

IWDG 更关注是否超时,而 WWDG 同时关注是否太早和是否太晚。因此,WWDG 的喂狗位置必须与程序运行周期严格匹配。

2. 窗口值不要设置得过窄

窗口值设置过窄会导致正常程序也很难稳定落入窗口期,容易出现误复位。实际项目中应结合任务周期、最大执行时间、中断延迟等因素留出裕量。

3. 提前唤醒中断适合做最后处理

EWI 中断发生时,计数器已经到达0x40,距离复位非常近。因此 EWI 中断中不适合执行复杂耗时操作,更适合做短小的异常记录或状态处理。

4. 时钟配置会影响超时时间

WWDG 使用 PCLK1 作为时钟来源,因此只要 APB1 时钟配置变化,WWDG 的超时时间也会变化。移植工程或修改时钟树后,需要重新核对 WWDG 时间参数。

相关新闻

  • 杰理之系统时间jiffies异常,可能导致不可预知的问题【篇】
  • 对比重庆多家黄金回收商家,教你快速筛选不压价诚信实体门店 - 日常比对手册
  • 沂水县消防安装公司推荐,发光字制作安装公司哪家好?2026避坑指南:4个坑+5条硬标准 - geo88

最新新闻

  • 专业靠谱场景细分的全国法帝诺厂商推荐 - 招财兔数字员工
  • 微信消息撤回机制解析与使用技巧
  • TPS4000x同步降压控制器:预测门驱动技术实现高效DC-DC转换
  • M-Robots 共建活动来啦,小伙伴们都来参加哦
  • 沈阳爱彼回收避坑指南2026年7月:平台实测对比,哪里收的价格更高?客户真实排行! - 尊奢回收二奢平台
  • OpenClaw智能文件处理:AI模型与养文件技术解析

日新闻

  • 亨得利盐城维修点在哪里?手表维修保养地址指南**公示(2026年7月最新) - 亨得利官方
  • 提升.NET API安全性:Boxed.AspNetCore.Swagger认证授权最佳实践
  • 帝舵佛山**网点地址更新:2026年7月售后热线电话与服务客户指南 - 帝舵中国官方服务中心

周新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号