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

发布于:2025-04-07 ⋅ 阅读:(26) ⋅ 点赞:(0)
主题 内容 教学目的/扩展视频
看门狗 什么是看门狗,原理分析,启动喂狗方法,读标志位。 熟悉在程序里用看门狗。

师从洋桃电子,杜洋老师



一、看门狗核心原理

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)