单片机基础核心知识点汇总(三十三)

目录

前言

一、看门狗核心本质

[二、独立看门狗 IWDG(最常用、量产首选)](#二、独立看门狗 IWDG(最常用、量产首选))

[1. 原理特性](#1. 原理特性)

[2. 核心优缺点](#2. 核心优缺点)

[3. 工程完整代码](#3. 工程完整代码)

[4. 使用规范](#4. 使用规范)

[三、窗口看门狗 WWDG(高级容错、防跑飞专用)](#三、窗口看门狗 WWDG(高级容错、防跑飞专用))

[1. 原理特性](#1. 原理特性)

[2. 为什么需要窗口看门狗?](#2. 为什么需要窗口看门狗?)

[3. 核心特点](#3. 核心特点)

[4. 工程初始化代码](#4. 工程初始化代码)

[四、IWDG 与 WWDG 终极选型(量产必看)](#四、IWDG 与 WWDG 终极选型(量产必看))

[1、独立看门狗 IWDG](#1、独立看门狗 IWDG)

[2、窗口看门狗 WWDG](#2、窗口看门狗 WWDG)

[五、看门狗十大玄学 Bug 深度解析](#五、看门狗十大玄学 Bug 深度解析)

[1. 设备偶尔莫名复位](#1. 设备偶尔莫名复位)

[2. 中断里喂狗导致看门狗失效](#2. 中断里喂狗导致看门狗失效)

[3. 上电瞬间直接复位](#3. 上电瞬间直接复位)

[4. 窗口看门狗一直复位](#4. 窗口看门狗一直复位)

[5. 业务阻塞导致复位](#5. 业务阻塞导致复位)

[6. 死机不复位](#6. 死机不复位)

[7. 频繁复位但程序正常](#7. 频繁复位但程序正常)

[8. RTOS 任务卡死不复位](#8. RTOS 任务卡死不复位)

[9. 关闭全局中断导致看门狗复位](#9. 关闭全局中断导致看门狗复位)

[10. 看门狗开启后无法下载程序](#10. 看门狗开启后无法下载程序)

六、量产级标准看门狗架构(推荐所有项目套用)

1、正确架构

2、绝对禁止架构

七、如何判断复位来源(故障定位神器)

小结


前言

量产设备 中,比功能实现更重要的是:设备不能死机、不能卡死、不能挂机、必须永久自恢复

嵌入式设备长期跑现场:干扰、电源抖动、程序跑飞、堆栈溢出、硬件异常、总线卡死,都会导致单片机卡死死机。一旦死机,设备永久瘫痪,只能断电重启。

解决这个问题的唯一硬件方案:看门狗(WatchDog)

很多新手只会随便开个看门狗喂狗,完全不懂: 独立看门狗和窗口看门狗区别、为什么偶尔复位、喂狗过快也会复位、卡死不喂狗、中断卡死导致看门狗失效。

本篇彻底讲透两种看门狗原理、适配场景、标准工程代码、所有玄学复位坑点,根治设备现场死机、卡死、挂机问题

一、看门狗核心本质

看门狗就是一个硬件独立递减计数器

核心逻辑:

  • 计数器不断减,减到 0 ------ 单片机直接硬件复位
  • 想要不死机,必须定时喂狗(重装载计数器数值)

作用:

  • 程序正常运行 → 按时喂狗 → 永不复位
  • 程序跑飞、卡死、死循环、阻塞 → 无法喂狗 → 计数器清零 → 硬件自动重启

重点:看门狗是硬件外设,不受程序 Bug、卡死、中断异常影响,是最后一道生命线。

二、独立看门狗 IWDG(最常用、量产首选)

1. 原理特性

  • 独立时钟:由内部 LSI 低速时钟驱动,不受系统时钟影响
  • 系统死机、时钟异常、主程序跑飞,IWDG 依旧工作
  • 适合:全局死机监测、防卡死、现场设备保活

2. 核心优缺点

  • 优点: 完全独立、极其可靠、不会失效
  • 缺点: 时钟精度低,定时时间不准,只能做秒级监测

3. 工程完整代码

复制代码
#include "wwdg.h"

//独立看门狗初始化 1秒超时
void IWDG_Init(void)
{
    IWDG_HandleTypeDef hiwdg;

    hiwdg.Instance = IWDG;
    //分频64,重载值625,超时约1s
    hiwdg.Init.Prescaler = IWDG_PRESCALER_64;
    hiwdg.Init.Reload = 625;

    HAL_IWDG_Init(&hiwdg);
}

//定时喂狗,100ms~800ms调用一次即可
void IWDG_Feed(void)
{
    HAL_IWDG_Refresh(&hiwdg);
}

4. 使用规范

  • 必须在主循环正常业务中喂狗
  • 禁止在定时器中断、后台定时中断喂狗
  • 中断喂狗:主程序卡死依旧能喂狗,看门狗彻底失效

三、窗口看门狗 WWDG(高级容错、防跑飞专用)

1. 原理特性

  • 挂载在系统 PCLK1 时钟
  • 有窗口限制:只能在指定时间段喂狗
  • 喂狗太早、喂狗太晚,全部直接复位

2. 为什么需要窗口看门狗?

独立看门狗有一个致命漏洞:

程序跑飞但依旧在执行喂狗代码 ,假死不复位。

例如:

堆栈异常、指针跑飞、程序乱飞,刚好跳到喂狗函数,一直喂狗。

设备卡死、功能失效、但是永不复位。

窗口看门狗根治这个问题:

不允许无脑频繁喂狗,必须在合法时间窗口内喂狗

3. 核心特点

  • 喂狗太快 → 复位
  • 喂狗太慢 → 复位
  • 只有程序正常、时序正常、调度正常,才能成功喂狗

专治:程序跑飞、指针异常、代码乱飞

4. 工程初始化代码

复制代码
void WWDG_Init(void)
{
    WWDG_HandleTypeDef hwwdg;

    hwwdg.Instance = WWDG;
    hwwdg.Init.Prescaler = WWDG_PRESCALER_8;
    hwwdg.Init.Window = 0x50;
    hwwdg.Init.Counter = 0x7F;
    hwwdg.Init.EWIMode = WWDG_EWI_DISABLE;

    HAL_WWDG_Init(&hwwdg);
}

void WWDG_Feed(void)
{
    HAL_WWDG_Refresh(&hwwdg);
}

四、IWDG 与 WWDG 终极选型(量产必看)

1、独立看门狗 IWDG

适用场景:

  • 工业设备长期运行防死机
  • 电源干扰、时钟异常防护
  • RTOS、裸机通用 90% 量产项目首选

2、窗口看门狗 WWDG

适用场景:

  • 高可靠设备、医疗、工控、精密仪器
  • 需要防程序跑飞、防异常喂狗
  • 对安全性要求极高的产品

五、看门狗十大玄学 Bug 深度解析

1. 设备偶尔莫名复位

  • 原因:喂狗间隔不稳定,偶尔超时
  • 解决:拉长最大喂狗间隔,保证业务阻塞不超时

2. 中断里喂狗导致看门狗失效

  • 原因:主循环卡死,中断依旧运行,永久喂狗
  • 解决:禁止中断喂狗,必须主业务喂狗

3. 上电瞬间直接复位

  • 原因:初始化完看门狗未立刻喂狗
  • 解决:初始化结束立即喂一次狗

4. 窗口看门狗一直复位

  • 原因:喂狗时机不对,过早或过晚
  • 解决:严格遵守窗口时间,固定周期喂狗

5. 业务阻塞导致复位

  • 原因:SPI/I2C/Flash 操作阻塞太久
  • 解决:底层操作加超时,禁止永久阻塞

6. 死机不复位

  • 100% 原因:用了中断喂狗!

7. 频繁复位但程序正常

  • 原因:LSI 时钟偏差,独立看门狗超时提前

8. RTOS 任务卡死不复位

  • 原因:喂狗放在空闲任务,卡死依旧空闲运行
  • 解决:喂狗放在核心业务任务

9. 关闭全局中断导致看门狗复位

  • 长时间关中断,主循环卡死,无法喂狗

10. 看门狗开启后无法下载程序

  • 原因:上电太快复位,拖死下载链路
  • 解决:下载时屏蔽看门狗,或者上电延时初始化

六、量产级标准看门狗架构(推荐所有项目套用)

1、正确架构

  1. 上电延时 1s 初始化看门狗
  2. 核心业务任务 / 主循环喂狗
  3. 底层阻塞操作全部加超时
  4. 异常故障自动复位、重启日志记录

2、绝对禁止架构

  1. 中断喂狗
  2. 空闲任务喂狗
  3. 初始化不立刻喂狗
  4. 无超时底层阻塞代码

七、如何判断复位来源(故障定位神器)

工程中可以读取复位标志位,判断设备为什么重启:

  • 上电复位
  • 硬件复位
  • 看门狗复位
  • 独立看门狗复位
  • 窗口看门狗复位

通过标志位可以精准定位现场偶现死机问题。

小结

独立看门狗保「设备不死」

窗口看门狗保「程序不飞」

普通开发者用看门狗防死机, 高级开发者用看门狗做系统容错、故障自愈、现场稳定性兜底

只要是量产设备,必须标配看门狗,否则现场死机、返工、售后无解。

相关推荐
爱吃苹果的日记本2 小时前
数据结构第一课
c语言·数据结构·数据库·学习·c#
张小姐的猫3 小时前
【AI大模型接入SDK】 —— Gemini接入封装
android·数据结构·数据库·c++·人工智能·python
数字新视界3 小时前
机房动环监控的智能化管理与安全提升探索
嵌入式硬件·物联网·数据中心·数据中心基础设施管理·dcim管理系统
Thomas21433 小时前
mysql 索引面试复习
数据库·mysql·面试
Elastic 中国社区官方博客3 小时前
Elasticsearch Python DSL 客户端开发
大数据·数据库·python·elasticsearch·搜索引擎·全文检索
风哥2号3 小时前
数据库教程FGMT03‑生产环境Linux+Oracle19c+ASM安装配置与项目实战
linux·数据库
龙亘川4 小时前
旅游强国建设|一网统管智慧旅游服务模块,赋能节假日文旅数字化治理
大数据·数据库·人工智能·科技·智慧城市·旅游
@嵌入式扫地僧4 小时前
TFLite Micro STM32/ESP32 开箱即用推理骨架 + INT8 量化脚本实战:零调试跑通端侧 AI 推理完整步骤
人工智能·嵌入式硬件·tinyml·端侧ai·tflite micro