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)
    IWDG Tout = (4×2^prescaler) × reload / 40k prescaler=4(256分频), reload=1250
    WWDG Tout = (4096×2^WDGTB) × (T[5:0]+1) / PCLK1 PCLK1=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看门狗相关寄存器速查表

    寄存器 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


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


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

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

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

  • v1.0 初始版本(2025-04-06)
  • 作者:触角01010001

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32看门狗原理及应用:独立看门狗与窗口看门狗详解——零基础入门教程第九十四步

    发表回复