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) × (T5: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)
相关推荐
炸膛坦客13 小时前
单片机开发工具篇:(九)MCU 芯片包的安装
单片机·嵌入式硬件
融智兴科技17 小时前
一张校园卡学生证,如何连接学习、生活与校园管理?
大数据·科技·物联网
慧都小妮子17 小时前
ThingsBoard PE 接入物联网关 MQTT 数据配置流程:从规则链到遥测入库
物联网·mqtt·数据采集·iot·规则引擎·工业通信·thingsboard
智者知已应修善业18 小时前
【51单片机实现初始化数码管不显示按启动从0秒计时到60按暂停一次显示当前秒按2次恢复原始状态】2024-6-11
c语言·c++·经验分享·笔记·嵌入式硬件·算法·51单片机
电气_空空19 小时前
基于LabVIEW的数据采集系统设计与实现
单片机·嵌入式硬件·labview
caimouse19 小时前
ReactOS BootCD 光盘布局完整深度分析
单片机·reactos
数字新视界19 小时前
智能变电站配电房集中监控系统解决方案
物联网·动环监控·新人首发·配电监控
TDengine (老段)20 小时前
TDengine DML SELECT — 完整查询语法参考
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
zlinear数据采集卡21 小时前
从万用表的6步调零到硅片级微秒自校准:硬核拆解LHAMP188的宽压轨到轨与零漂移实战
arm开发·stm32·单片机·嵌入式硬件·fpga开发
三品吉他手会点灯21 小时前
嵌入式机器学习 - 学习笔记1.2.3 - 机器学习软件框架
人工智能·笔记·嵌入式硬件·学习·机器学习