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

目录

前言

一、看门狗核心本质

[二、独立看门狗 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. 无超时底层阻塞代码

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

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

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

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

小结

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

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

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

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

相关推荐
龙腾AI白云5 小时前
AI检索增强生成(RAG):解决大模型幻觉的核心落地技术
数据库·人工智能·机器学习·知识图谱
一 乐5 小时前
动漫书销售商城|基于springboot + vue动漫书销售商城(源码+数据库+文档)
java·数据库·vue.js·spring boot·毕业设计
zzj_2626105 小时前
MySQL常用操作
数据库·mysql
其实防守也摸鱼6 小时前
Fastjson 反序列化漏洞(JNDI注入)
android·数据库·安全·oracle·自动化·fastjson·反序列化
haerapi6 小时前
把 PostgreSQL 复制巡检做成可审计闭环:确定性采集、阈值判定与受控模型归纳
数据库·postgresql
微学AI7 小时前
不让每一步都调用最贵模型:用蓝耘智能路由改造自主式研究 Agent
数据库·人工智能·蓝耘
yjb.gz7 小时前
Oracle19 RAC查看集群状态及磁盘空间情况(巡检)
数据库
钝挫力PROGRAMER7 小时前
开发踩坑记:MyBatis selectKey、空 SQL
数据库·sql·mybatis
JosieBook7 小时前
【数据库】MySQL 实战精通系列 · 第6篇:InnoDB 存储引擎、日志与崩溃恢复
数据库·mysql
杨云龙UP8 小时前
TDengine 3.4.2.8 Community 三节点三副本生产集群部署实战(DNode/MNode/taosAdapter/Explorer)
大数据·linux·运维·数据库·tdengine·时序库