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

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

师从洋桃电子,杜洋老师


📑文章目录


一、看门狗核心原理

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 配置示例代码

c 复制代码
// 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 配置代码示例

c 复制代码
// 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步](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) *** ** * ** *** 💬 技术讨论(请在评论区留言\~) *** ** * ** *** > **📌 下期预告** :下一期将探讨看门狗应用程序分析,欢迎持续关注! > > [点击查阅🔍往期【STM32专栏】文章](https://blog.csdn.net/liwangsb2/category_12899382.html) > > **版权声明** :本文采用\[CC BY-NC-SA 4.0\]协议,转载请注明来源 > **实测开发版** :洋桃1号开发版(基于STM32F103C8T6) > **更新日志**: > > * v1.0 初始版本(2025-04-06)

相关推荐
行之无边3 小时前
零基础入门物联网-远程门禁开关:硬件介绍
物联网
编程墨客7 小时前
STM32F103C8T6单片机内部执行原理及启动流程详解
stm32·单片机·嵌入式硬件
TDengine (老段)7 小时前
TDengine 数据库建模最佳实践
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
行之无边7 小时前
零基础入门物联网-远程门禁开关:云平台创建
物联网
Gauss松鼠会7 小时前
GaussDB应用场景全景解析:从金融核心到物联网的分布式数据库实践
数据库·分布式·物联网·金融·database·gaussdb
Wangshanjie_988 小时前
【STM32】-SPI通讯
stm32
qq_411262429 小时前
整体无需占用任何硬件 UART,即可新增一条全双工软串口
单片机·嵌入式硬件
Narnat10 小时前
Rk3568驱动开发_阻塞IO_15
驱动开发
sukalot10 小时前
window显示驱动开发—BGRA 扫描输出支持
驱动开发
XINVRY-FPGA11 小时前
XCZU47DR-2FFVG1517I Xilinx FPGA AMD ZynqUltraScale+ RFSoC
人工智能·嵌入式硬件·fpga开发·信息与通信·信号处理·射频工程·fpga