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

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

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

师从洋桃电子,杜洋老师


📑文章目录

    • 一、看门狗核心原理
      • 1.1 工作原理图解
      • 1.2 经典水桶比喻
    • 二、STM32看门狗双雄对比
      • 2.1 参数对照表
      • 2.2 架构框图
        • 独立看门狗架构
        • 窗口看门狗架构
    • 三、独立看门狗(IWDG)深度解析
      • 3.1 关键特性
      • 3.2 配置示例代码
    • 四、窗口看门狗(WWDG)进阶应用
      • 4.1 核心特征
      • 4.2 配置代码示例
    • 五、设计实践指南
      • 5.1 参数计算工具
      • 5.2 调试技巧
    • 六、常见问题解答
    • 七、扩展应用
      • 7.1 复合监控系统
      • 7.2 看门狗高级用法
    • 八、相关资源


一、看门狗核心原理

1.1 工作原理图解

正常流程
异常状态
程序启动
看门狗初始化
程序运行中
定时喂狗
未及时喂狗
计数器重置
计数器归零
系统复位

1.2 经典水桶比喻

比喻要素技术对应
水龙头流速计数器递减频率
桶容量初始重载值
倒水操作喂狗动作
水溢出系统复位

二、STM32看门狗双雄对比

2.1 参数对照表

特性独立看门狗(IWDG)窗口看门狗(WWDG)
时钟源独立40kHz RC振荡器主时钟(PCLK1)
计数器位宽12位递减计数器7位递减计数器
工作模式停机/待机模式可用需主时钟运行
喂狗时间任意时间指定时间窗口
特殊功能自由定时器模式早期预警中断
典型应用场景基础监控/低功耗场景时序严格控制系统

2.2 架构框图

独立看门狗架构
归零
40kHz RC振荡器
8位预分频器
12位递减计数器
系统复位
喂狗操作
窗口看门狗架构
下窗口值
上窗口值
窗口期内
主时钟
预分频器
7位递减计数器
复位信号
中断预警
喂狗操作

三、独立看门狗(IWDG)深度解析

3.1 关键特性

  • 独立时钟源:不受主系统时钟影响
  • 最长超时时间:26.2秒(预分频256,重载值0xFFF)
  • 硬件看门狗模式:通过选项字节配置
  • 调试模式冻结:方便单步调试

3.2 配置示例代码

// IWDG初始化
void IWDG_Init(uint16_t reload, uint8_t prescaler)
{
    IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
    IWDG_SetPrescaler(prescaler);
    IWDG_SetReload(reload);
    IWDG_ReloadCounter();
    IWDG_Enable();
}

// 喂狗操作
void Feed_Dog(void)
{
    IWDG_ReloadCounter();
}

四、窗口看门狗(WWDG)进阶应用

4.1 核心特征

  • 精确时间窗口:必须在上窗口(0x40)与下窗口(0x3F)之间喂狗
  • 早期预警中断:计数器达到0x40时触发中断
  • 时钟依赖:需要稳定主时钟源
  • 最短超时时间:1.09ms(PCLK1=36MHz)

4.2 配置代码示例

// WWDG初始化
void WWDG_Init(uint8_t counter, uint8_t window)
{
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);
    WWDG_SetPrescaler(WWDG_Prescaler_8);
    WWDG_SetWindowValue(window);
    WWDG_Enable(counter);
    WWDG_ClearFlag();
    WWDG_EnableIT();
}

// 中断服务函数
void WWDG_IRQHandler(void)
{
    if(WWDG_GetFlagStatus() != RESET) {
        // 处理早期预警
        WWDG_SetCounter(0x7F);
        WWDG_ClearFlag();
    }
}

五、设计实践指南

5.1 参数计算工具

看门狗类型计算公式示例计算(超时1s)
IWDGTout = (4×2^prescaler) × reload / 40kprescaler=4(256分频), reload=1250
WWDGTout = (4096×2^WDGTB) × (T[5:0]+1) / PCLK1PCLK1=36M, WDGTB=3, T=54

5.2 调试技巧

  1. 利用IWDG冻结功能:在调试模式暂停计数器
  2. WWDG窗口时间测量:使用逻辑分析仪捕获喂狗信号
  3. 安全喂狗策略:在多个关键节点重复喂狗
  4. 异常处理机制:在复位前保存系统状态

六、常见问题解答

Q1:看门狗导致频繁复位怎么办?

  • 检查喂狗间隔是否小于超时时间
  • 验证时钟源配置是否正确
  • 确认未在中断外进行长时间阻塞操作

Q2:如何选择看门狗类型?

  • 低功耗场景选IWDG
  • 实时性要求高选WWDG
  • 关键系统可同时使用双看门狗

Q3:窗口看门狗窗口值如何设置?

  • 上窗口值 = 允许最早喂狗时间
  • 下窗口值 = 最晚喂狗时间
  • 典型设置:窗口值 = 0x5F,计数器初始值 = 0x7F

七、扩展应用

7.1 复合监控系统

主任务
IWDG喂狗
关键子任务
WWDG喂狗
硬件级监控
时序级监控

7.2 看门狗高级用法

  1. 系统自检模式:故意触发复位测试看门狗功能
  2. 低功耗唤醒:配合停机模式实现定时唤醒
  3. 安全认证:通过看门狗记录系统运行状态

附:STM32看门狗相关寄存器速查表

寄存器IWDGWWDG
控制寄存器IWDG_KRWWDG_CR
预分频寄存器IWDG_PRWWDG_CFR
重载寄存器IWDG_RLRWWDG_CFR
状态寄存器-WWDG_SR

八、相关资源

[1] 洋桃电子B站课程-STM32入门100步
[2] STM32官方文档手册
[3] STM32F103固件函数库用户手册(中文)
[4] 看门狗原理.pptx


💬 技术讨论(请在评论区留言~)

📌 下期预告:下一期将探讨看门狗应用程序分析,欢迎持续关注!

点击查阅🔍往期【STM32专栏】文章

版权声明:本文采用[CC BY-NC-SA 4.0]协议,转载请注明来源
实测开发版:洋桃1号开发版(基于STM32F103C8T6)
更新日志

  • v1.0 初始版本(2025-04-06)

相关文章:

  • 设计模式:为什么使用模板设计模式(不相同的步骤进行抽取,使用不同的子类实现)减少重复代码,让代码更好维护。
  • C++语言的网络编程
  • 第一章:服务架构演进史_《凤凰架构:构建可靠的大型分布式系统》_Notes
  • 英文单词记忆系统:基于PyQt5与DeepSeek大模型的智能学习工具
  • UDP学习笔记(四)UDP 为什么大小不能超过 64KB?
  • 高级:性能优化面试题深度剖析
  • Node.js局部生效的中间件
  • pyTorch框架-迁移学习-实现四种天气图片多分类问题
  • 【Windows批处理】命令入门详解
  • Rust 2024介绍 | 开发环境搭建详细教程(rust 1.85.0)
  • 《Glance:一站式聚合信息,告别浏览器切换烦恼》
  • 国产芯片解析:龙讯USB Type-C/DP Transmitter多场景覆盖,定义高速互联新标杆
  • 21.OpenCV获取图像轮廓信息
  • 【js逆向】某日番动漫网视频地址解密
  • 车辆监控平台技术标准解析
  • Bert论文解析
  • 2019 CCF CSP-S2.树的重心
  • Linux驱动学习笔记(七)
  • IDEA加载项目时依赖无法更新
  • Visual Studio 2022 QT5.14.2 新建项目无法打开QT的ui文件,出现闪退情况
  • 阿里云怎么申请域名/广州网站优化外包
  • 哪个网站可以做一对一老师/百度推广官网登录
  • 网站不能复制 设置/网络营销的基本功能
  • server2008 做网站/品牌营销策划方案怎么做
  • 网站建设学什么语言/app推广好做吗
  • 建设网站能盈利吗/企业网站建设步骤