主题 | 内容 | 教学目的/扩展视频 |
---|---|---|
看门狗 | 什么是看门狗,原理分析,启动喂狗方法,读标志位。 | 熟悉在程序里用看门狗。 |
师从洋桃电子,杜洋老师
📑文章目录
- 一、看门狗应用架构分析
- 1.1 系统监控流程图
- 1.2 双看门狗应用场景对比
- 二、独立看门狗实战解析
- 2.1 测试程序核心代码
- 2.2 代码执行流程图
- 2.3 关键参数计算
- 三、窗口看门狗进阶应用
- 3.1 测试程序核心逻辑
- 3.2 程序运行原理图
- 3.3 时间窗口参数解析
- 四、关键代码剖析
- 4.1 独立看门狗初始化
- 4.2 窗口看门狗中断处理
- 五、扩展应用设计
- 5.1 复合监控系统架构
- 5.2 调试技巧
- 六、常见问题解答
- 七、性能优化建议
- 八、相关资源
▲ 回顾上期🔍STM32看门狗原理与应用详解:独立看门狗 vs 窗口看门狗(上) | 零基础入门STM32第九十四步
一、看门狗应用架构分析
1.1 系统监控流程图
1.2 双看门狗应用场景对比
特性 | 独立看门狗(IWDG) | 窗口看门狗(WWDG) |
---|---|---|
触发条件 | 任意时间未喂狗 | 窗口期外喂狗/超时未喂狗 |
响应速度 | 约1秒(可配置) | 毫秒级响应 |
中断支持 | 无 | 提供早期预警中断 |
典型应用 | 基础系统监控 | 实时任务时序控制 |
二、独立看门狗实战解析
2.1 测试程序核心代码
// main.c关键逻辑
IWDG_Init(); // 初始化看门狗(预分频64,重载值625)
while(1) {
IWDG_Feed(); // 喂狗操作
if(按键按下) delay_s(2); // 人为制造喂狗失败
}
2.2 代码执行流程图
2.3 关键参数计算
超时时间 = \frac{预分频值 \times 重载值}{40} \ (ms)
示例配置:
- 预分频值:64(实际分频系数=4×64=256)
- 重载值:625
- 理论超时时间:≈1秒
三、窗口看门狗进阶应用
3.1 测试程序核心逻辑
// main.c关键代码
WWDG_Init(); // 初始化窗口看门狗
while(1) {
delay_ms(54); // 精确窗口时间控制
WWDG_Feed(); // 窗口期内喂狗
}
3.2 程序运行原理图
3.3 时间窗口参数解析
时间窗口 = \frac{4096 \times 预分频值 \times (CNT-WR)}{PCLK1} \ (μs)
示例配置:
- 计数器初值(CNT):0x7F(127)
- 窗口值(WR):0x50(80)
- 预分频值:8
- PCLK1时钟:36MHz
- 实际窗口时间:48ms~64ms
四、关键代码剖析
4.1 独立看门狗初始化
void IWDG_Init(void) {
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
IWDG_SetPrescaler(pre); // 设置预分频
IWDG_SetReload(rlr); // 设置重载值
IWDG_ReloadCounter(); // 重载计数器
IWDG_Enable(); // 启动看门狗
}
4.2 窗口看门狗中断处理
void WWDG_IRQHandler(void) {
WWDG_ClearFlag(); // 清除中断标志
// 紧急处理代码
// 保存系统状态/发送警报
WWDG_SetCounter(WWDG_CNT); // 重置计数器
}
五、扩展应用设计
5.1 复合监控系统架构
5.2 调试技巧
- IWDG冻结功能:在调试模式设置DBGMCU_CR寄存器
- WWDG时间测量:使用定时器捕获喂狗脉冲
- 安全喂狗策略:
- 多任务协同喂狗
- 喂狗前进行系统自检
- 状态保存机制:在复位前将关键数据存入备份寄存器
六、常见问题解答
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步
[2] STM32官方文档手册
[3] STM32F103固件函数库用户手册(中文)
[4] 看门狗原理.pptx
[5] 独立看门狗测试程序
[6] 窗口看门狗测试程序
💬 技术讨论(请在评论区留言~)
📌 下期预告:下一期将探讨TIM定时器
重点课程
,欢迎持续关注!
点击查阅🔍往期【STM32专栏】文章
版权声明:本文采用[CC BY-NC-SA 4.0]协议,转载请注明来源
实测开发版:洋桃1号开发版(基于STM32F103C8T6)
更新日志:
- v1.0 初始版本(2025-04-07)