STM32看门狗应用实战:独立看门狗与窗口看门狗深度解析(下) | 零基础入门STM32第九十五步

主题 内容 教学目的/扩展视频
看门狗 什么是看门狗,原理分析,启动喂狗方法,读标志位。 熟悉在程序里用看门狗。

师从洋桃电子,杜洋老师


📑文章目录


回顾上期🔍STM32看门狗原理与应用详解:独立看门狗 vs 窗口看门狗(上) | 零基础入门STM32第九十四步


一、看门狗应用架构分析

1.1 系统监控流程图

任务阻塞/异常 系统启动 看门狗初始化 主循环运行 执行核心任务 定时喂狗 未及时喂狗 看门狗超时 系统复位

1.2 双看门狗应用场景对比

特性 独立看门狗(IWDG) 窗口看门狗(WWDG)
触发条件 任意时间未喂狗 窗口期外喂狗/超时未喂狗
响应速度 约1秒(可配置) 毫秒级响应
中断支持 提供早期预警中断
典型应用 基础系统监控 实时任务时序控制

二、独立看门狗实战解析

2.1 测试程序核心代码

c 复制代码
// main.c关键逻辑
IWDG_Init(); // 初始化看门狗(预分频64,重载值625)
while(1) {
    IWDG_Feed(); // 喂狗操作
    if(按键按下) delay_s(2); // 人为制造喂狗失败
}

2.2 代码执行流程图

MCU IWDG 初始化(设置预分频/重载值) 定期喂狗 执行正常任务 延时2秒(跳过喂狗) alt [按键按下] loop [主循环] 超时复位 MCU IWDG

2.3 关键参数计算

math 复制代码
超时时间 = \frac{预分频值 \times 重载值}{40} \ (ms)

示例配置:

  • 预分频值:64(实际分频系数=4×64=256)
  • 重载值:625
  • 理论超时时间:≈1秒

三、窗口看门狗进阶应用

3.1 测试程序核心逻辑

c 复制代码
// main.c关键代码
WWDG_Init(); // 初始化窗口看门狗
while(1) {
    delay_ms(54); // 精确窗口时间控制
    WWDG_Feed();  // 窗口期内喂狗
}

3.2 程序运行原理图

0x40 0x3F 窗口期内 主时钟 预分频器 7位递减计数器 触发中断 系统复位 喂狗操作

3.3 时间窗口参数解析

math 复制代码
时间窗口 = \frac{4096 \times 预分频值 \times (CNT-WR)}{PCLK1} \ (μs)

示例配置:

  • 计数器初值(CNT):0x7F(127)
  • 窗口值(WR):0x50(80)
  • 预分频值:8
  • PCLK1时钟:36MHz
  • 实际窗口时间:48ms~64ms

四、关键代码剖析

4.1 独立看门狗初始化

c 复制代码
void IWDG_Init(void) {
    IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
    IWDG_SetPrescaler(pre);    // 设置预分频
    IWDG_SetReload(rlr);       // 设置重载值
    IWDG_ReloadCounter();      // 重载计数器
    IWDG_Enable();             // 启动看门狗
}

4.2 窗口看门狗中断处理

c 复制代码
void WWDG_IRQHandler(void) {
    WWDG_ClearFlag();          // 清除中断标志
    // 紧急处理代码
    // 保存系统状态/发送警报
    WWDG_SetCounter(WWDG_CNT); // 重置计数器
}

五、扩展应用设计

5.1 复合监控系统架构

主任务 IWDG喂狗 实时任务 WWDG喂狗 中断预警 异常处理 基础监控

5.2 调试技巧

  1. IWDG冻结功能:在调试模式设置DBGMCU_CR寄存器
  2. WWDG时间测量:使用定时器捕获喂狗脉冲
  3. 安全喂狗策略:
    • 多任务协同喂狗
    • 喂狗前进行系统自检
  4. 状态保存机制:在复位前将关键数据存入备份寄存器

六、常见问题解答

Q1:喂狗操作导致程序卡顿?

  • 优化喂狗位置:放在主循环空闲时段
  • 使用DMA或硬件自动喂狗

Q2:窗口时间计算不准确?

  • 校准主时钟源
  • 使用公式:实际时间 = (4096×预分频×(CNT-WR))/PCLK1

Q3:同时使用双看门狗要注意什么?

  • 设置不同的超时周期
  • IWDG周期 > WWDG周期
  • 错开喂狗时间点

七、性能优化建议

优化方向 实施方法 预期效果
时钟精度 使用外部晶振 提高时间计算精度
喂狗策略 多任务协同喂狗 避免单点故障
异常处理 在WWDG中断中保存系统状态 提升故障诊断能力
功耗控制 在低功耗模式下调整预分频 平衡监控与功耗需求

附:看门狗配置速查表

寄存器 IWDG WWDG
控制寄存器 IWDG_KR WWDG_CR
预分频寄存器 IWDG_PR WWDG_CFR
重载寄存器 IWDG_RLR WWDG_CFR
状态寄存器 - WWDG_SR

八、相关资源

1\] [洋桃电子B站课程-STM32入门100步](http://www.doyoung.net/) \[2\] [STM32官方文档手册](https://pan.baidu.com/s/1dO5v1lRnl_wtaUCM8Exjcg?pwd=mt6d) \[3\] [STM32F103固件函数库用户手册(中文)](https://pan.baidu.com/s/1YOrsuYdEYKuwpmFLE1vPUA?pwd=ix56) \[4\] [看门狗原理.pptx](https://pan.baidu.com/s/1E40ehieEHm0Rs_2WAx6V6g?pwd=iiin) \[5\] [独立看门狗测试程序](https://pan.baidu.com/s/1GHZOD8U7FGY3Sermn8wZQA?pwd=rnxf) \[6\] [窗口看门狗测试程序](https://pan.baidu.com/s/1Kq51JxylCCpj1luQWKT7vg?pwd=rnxf) *** ** * ** *** 💬 技术讨论(请在评论区留言\~) *** ** * ** *** > **📌 下期预告** :下一期将探讨TIM定时器`重点课程`,欢迎持续关注! > > [点击查阅🔍往期【STM32专栏】文章](https://blog.csdn.net/liwangsb2/category_12899382.html) > > **版权声明** :本文采用\[CC BY-NC-SA 4.0\]协议,转载请注明来源 > **实测开发版** :洋桃1号开发版(基于STM32F103C8T6) > **更新日志**: > > * v1.0 初始版本(2025-04-07)

相关推荐
自小吃多41 分钟前
FreeRTOS Semaphore信号量-笔记
笔记·stm32
Star Curry1 小时前
【读书笔记】《编码:隐匿在计算机软硬件背后的语言》01 逻辑与开关
stm32·单片机·嵌入式硬件·职场和发展·51单片机·学习方法
(未雨绸缪)2 小时前
STM32F103单片机在不需要使用 JTAG 调试接口的情况下,释放引脚给其他功能使用。
stm32·单片机·嵌入式硬件
不脱发的程序猿3 小时前
STM32实现九轴IMU的卡尔曼滤波
stm32·嵌入式硬件
吃货界的硬件攻城狮4 小时前
【STM32 学习笔记】USART串口
笔记·stm32·单片机·学习
k↑4 小时前
物联网之使用Vertx实现MQTT-Server最佳实践【响应式】
物联网·mqtt·微服务·响应式
吃货界的硬件攻城狮5 小时前
【STM32 学习笔记】I2C通信协议
笔记·stm32·单片机·学习
Blossom.1185 小时前
《从零开始:构建你的第一个区块链应用》
人工智能·驱动开发·python·深度学习·区块链·aigc·交互
双叶8366 小时前
(51单片机)LCD显示红外遥控相关数字(Delay延时函数)(LCD1602教程)(Int0和Timer0外部中断教程)(IR红外遥控模块教程)
c语言·数据库·c++·单片机·嵌入式硬件·mongodb·51单片机
通信大模型7 小时前
基于注意力机制的无人机轨迹优化方法:面向无线能量传输的物联网系统
人工智能·深度学习·物联网·无人机·信息与通信