当前位置: 首页 > news >正文

STM32-- 看门狗--介绍、使用场景、失效场景

STM32 中的看门狗(Watchdog Timer,简称 WDG)有两种主要类型:独立看门狗(IWDG)窗口看门狗(WWDG)。它们的喂狗机制各有特点,主要区别如下:


1. 独立看门狗(IWDG)

喂狗模式:常规定时喂狗
  • 喂狗方式: 调用 IWDG_ReloadCounter() 函数,在任何时刻都可以重装载计数器,从而避免超时复位。

  • 超时机制: 如果计数器倒计时到 0 且没有及时喂狗,系统会复位。

  • 特点

    • 喂狗没有时间窗口限制,只要在超时时间之前喂狗即可。
    • 内部低速时钟(LSI,约 32kHz) 提供时钟,不依赖主系统时钟。
    • 无法被软件或调试工具停止,一旦启用只能通过硬件复位重启。
优点
  • 配置简单,适用于通用场景。
  • 独立于主系统时钟(HCLK),可靠性高。
缺点
  • 无法防止程序在特定时间段反复喂狗(如错误逻辑进入喂狗环)。

2. 窗口看门狗(WWDG)

喂狗模式:窗口限制喂狗
  • 喂狗方式: 调用 WWDG_SetCounter() 函数时,喂狗必须在指定的时间窗口内完成。

    • 窗口时间是由 WWDG 的计数器和窗口寄存器共同决定的。
    • 如果喂狗太早(计数器值大于窗口值)或太晚(计数器倒计时到 0),系统会复位。
  • 超时机制

    • 必须在窗口时间内重装载计数器。
    • 超过窗口的时间范围(太早或太晚)都会导致复位。
  • 特点

    • 使用 APB1 时钟(PCLK1) 提供时钟源,依赖主系统时钟。
    • 可以通过调试工具暂停计数。
    • 可设置窗口值,要求喂狗在特定时间范围内完成,防止程序因逻辑错误频繁喂狗。
优点
  • 增强程序可靠性,防止错误逻辑无限循环喂狗。
  • 支持更精确的复位条件控制。
缺点
  • 配置稍复杂,需要合理选择窗口值和计数器初始值。
  • 依赖主系统时钟,可靠性略低于 IWDG。

两种模式的对比

特性独立看门狗(IWDG)窗口看门狗(WWDG)
时钟来源内部低速时钟(LSI,32kHz)APB1 时钟(PCLK1)
喂狗机制任何时间都可以喂狗必须在时间窗口内喂狗
配置复杂度简单较复杂
适用场景通用场景,保证基本的系统稳定性高可靠场景,防止逻辑错误频繁喂狗
可靠性更高略低,依赖主系统时钟
调试控制不可暂停支持暂停
可控性不限制喂狗时间支持细粒度时间窗口控制

选择建议

  1. 使用场景简单,侧重可靠性:选择 独立看门狗(IWDG)

    • 如在嵌入式系统中需要一个独立于系统时钟的简单复位保护机制。
  2. 高可靠性要求,需防止逻辑错误:选择 窗口看门狗(WWDG)

    • 如工业控制场景,程序卡死可能导致危险,需要精确控制喂狗行为。

代码示例

1. 独立看门狗喂狗
#include "stm32f10x_iwdg.h"void IWDG_Init(void) {RCC_LSICmd(ENABLE); // 启用 LSI 时钟while (!RCC_GetFlagStatus(RCC_FLAG_LSIRDY)); // 等待 LSI 就绪IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); // 使能配置IWDG_SetPrescaler(IWDG_Prescaler_64);        // 设置预分频器为 64IWDG_SetReload(625);                         // 设置重装载值(1 秒超时)IWDG_ReloadCounter();                        // 加载值到计数器IWDG_Enable();                               // 启动 IWDG
}void Feed_Dog(void) {IWDG_ReloadCounter(); // 喂狗
}/*上下两种初始化和使用,没有关系*********************///在main函数中的使用初始化看门狗,不同库函数,初始化函数不一样
// 启用 LSI 时钟,看门狗要用RCC_LSICmd(ENABLE);while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET); // 等待 LSI 就绪// 配置 IWDG,超时时间为 1 秒IWDG_Config(IWDG_Prescaler_64, 625);printf("初始化初始化喂狗\n");// 定时喂狗,防止复位,放在while循环里面
IWDG_ReloadCounter();
printf("喂狗\n");
2. 窗口看门狗喂狗
#include "stm32f10x_wwdg.h"void WWDG_Init(void) {RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE); // 启用 WWDG 时钟WWDG_SetPrescaler(WWDG_Prescaler_8);       // 设置预分频器WWDG_SetWindowValue(80);                   // 设置窗口值(喂狗窗口)WWDG_Enable(100);                          // 启动 WWDG 并设置计数器值
}void Feed_Dog(void) {WWDG_SetCounter(100); // 喂狗(需在窗口时间内)
}还没有使用过,用的时候再说

通过对比,可以根据实际场景选择合适的看门狗类型并合理设置喂狗机制。

看门狗使用场景

在嵌入式系统中,看门狗的主要目的是检测系统异常并自动复位,保障系统的稳定运行。以下是常见需要喂狗的场景:


1. 系统可能出现死循环或卡死的场景

  • 现象
    • 系统因软件错误、逻辑陷阱或资源争用导致无限循环或停止响应。
  • 应用
    • 工业自动化控制(PLC 等)。
    • 智能家居设备(如网关、传感器)。
    • 通信设备(如路由器、交换机)。
  • 原因: 看门狗可以在系统卡死时触发复位,避免长时间停机。

2. 系统存在较高可靠性要求的场景

  • 现象
    • 嵌入式设备长时间无人值守,需要保持长期稳定运行。
  • 应用
    • 医疗设备(监护仪、输液泵)。
    • 交通设备(信号灯控制、车载 ECU)。
    • 军事和航空航天设备。
  • 原因: 使用看门狗复位系统,可提高容错能力和整体可靠性。

3. 外设数据采集或处理超时的场景

  • 现象
    • 数据采集模块长时间未能完成任务,可能导致整个系统响应缓慢或失效。
  • 应用
    • 数据采集终端(温度、压力传感器)。
    • 多任务实时系统(RTOS)。
  • 原因: 配合看门狗的定期复位机制,避免单个模块卡死影响整体系统。

4. 系统通信异常的场景

  • 现象
    • 外部设备或模块因通信中断而停止响应。
  • 应用
    • 网络设备(IoT 网关、通信模组)。
    • 智能设备(摄像头、机器人)。
  • 原因: 如果通信超时,看门狗可复位系统重新尝试连接。

5. 电磁干扰或外界环境影响较大的场景

  • 现象
    • 嵌入式设备可能受到环境干扰(电磁干扰、静电等),导致系统异常。
  • 应用
    • 工业环境(高压设备、变电站)。
    • 军用电子设备。
  • 原因: 看门狗可检测因环境干扰导致的系统失效并触发复位,恢复正常运行。

6. 软件升级或运行复杂任务的场景

  • 现象
    • 系统执行复杂的算法或升级任务时,可能发生资源争用或异常。
  • 应用
    • 在线升级固件的 IoT 设备。
    • 人工智能推理设备(如车载计算机)。
  • 原因: 看门狗可以监控长时间任务运行,避免任务因不可预测的问题导致系统停滞。

7. 用户无法频繁维护设备的场景

  • 现象
    • 设备分布在偏远或不便维护的位置。
  • 应用
    • 太阳能监控设备。
    • 海上浮标、地震监测设备。
    • 无人机、卫星等。
  • 原因: 看门狗自动复位功能降低了人工干预的频率,提升系统可用性。

8. 高安全性场景

  • 现象
    • 系统的异常可能带来严重后果(如数据丢失或生命危险)。
  • 应用
    • 银行 ATM 系统。
    • 医疗设备。
    • 车辆控制系统(自动驾驶)。
  • 原因: 看门狗能在意外时快速恢复系统,避免造成重大损失。

总结:典型需要喂狗的场景

场景主要原因示例应用
死循环或逻辑卡死防止程序因意外逻辑错误停滞工业设备、智能终端
高可靠性要求长期无人值守,需自我修复医疗设备、交通控制
数据采集或超时控制模块运行超时可能影响整个系统RTOS 系统、数据采集设备
通信异常网络或模块中断可能影响设备响应路由器、物联网设备
电磁干扰环境环境干扰可能引起系统故障工业控制、军事设备
复杂任务或软件升级防止任务中断导致系统不可恢复人工智能设备、在线升级
无法维护的设备减少人工维护频率,提高设备可靠性远程监控设备、无人机
高安全性需求确保关键设备在故障时快速恢复ATM 机、自动驾驶系统

在这些场景中,合理配置看门狗的超时时间和喂狗逻辑,可以有效提升系统的健壮性和可靠性。

看门狗失效的场景

理论上,看门狗是一种硬件模块,独立于主处理器运行,设计上可以在系统卡死时强制复位。但在某些特殊情况下,即使有看门狗,也可能无法复位。这种情况通常与硬件设计或系统架构有关。以下是可能的原因和解决方法:


1. 系统进入低功耗模式

  • 原因
    • 有些嵌入式设备在进入深度睡眠模式时,会关闭看门狗定时器。
    • 如果设备卡死在低功耗模式中,看门狗无法触发复位。
  • 解决方法
    • 确保看门狗模块在低功耗模式下仍保持工作(某些芯片支持此功能)。
    • 使用独立看门狗(如外部硬件看门狗),保证看门狗与主处理器的运行无关。

2. 系统总线或时钟停止工作

  • 原因
    • 系统因为严重错误(如总线死锁或时钟停止),导致看门狗依赖的时钟源失效。
  • 解决方法
    • 使用内部低速时钟(如独立的低速振荡器 LSI)驱动看门狗。
    • 确保时钟源具有高可靠性,并在设计中添加冗余机制。

3. 电源故障

  • 原因
    • 硬件因供电不足或瞬间断电,导致看门狗和主处理器均停止工作。
  • 解决方法
    • 添加稳压电路和电源监控芯片,确保系统供电稳定。
    • 使用外部看门狗模块,其独立供电可提升可靠性。

4. 看门狗配置或逻辑错误

  • 原因
    • 看门狗初始化错误或喂狗逻辑未正确实现,导致看门狗无法正常运行。
    • 误配置过长的超时时间,程序卡死后仍在喂狗。
  • 解决方法
    • 充分测试看门狗初始化和喂狗逻辑。
    • 使用合理的超时时间,避免因喂狗间隔过长或喂狗频率过高而失效。

5. 硬件设计缺陷

  • 原因
    • 某些硬件设计中,看门狗复位信号未正确连接或复位信号不起作用。
    • 外部硬件看门狗模块未正确实现逻辑复位。
  • 解决方法
    • 确保看门狗复位信号正确连接到处理器的复位引脚。
    • 测试硬件设计的复位功能是否正常。

6. 看门狗自身故障

  • 原因
    • 看门狗模块内部硬件故障,导致其无法工作。
    • 例如独立看门狗的振荡器损坏或芯片老化。
  • 解决方法
    • 定期检测和维护设备,确保硬件正常。
    • 使用多个看门狗模块(例如内部和外部看门狗结合)。

7. 看门狗复位后依旧死循环

  • 原因
    • 程序设计问题导致复位后重复进入死循环,触发看门狗再次复位。
  • 解决方法
    • 复位后执行硬件自检和初始化,避免问题反复发生。
    • 在看门狗超时后,将复位状态记录在非易失性存储器中,方便分析问题根源。

8. 极端硬件或环境问题

  • 原因
    • 硬件遭受极端环境干扰(如高强度电磁辐射、雷击)。
    • 存在硬件级别的设计缺陷或材料老化。
  • 解决方法
    • 提升设备抗干扰能力,例如添加屏蔽罩、滤波器。
    • 定期更新设备,避免使用超出寿命的硬件。

如何降低看门狗失效的可能性

  1. 设计冗余系统
    • 使用多个独立的看门狗模块,主从备份。
  2. 合理选择看门狗类型
    • 使用独立看门狗(如外部芯片)而非依赖于主处理器的内部看门狗。
  3. 测试看门狗功能
    • 定期在程序中模拟卡死场景,验证看门狗是否能正常复位。
  4. 使用外部复位电路
    • 配合电源管理芯片(如带复位功能的电源监控芯片),提供额外的复位保障。
  5. 做好复位后程序设计
    • 确保复位后系统能进入正常工作状态,避免重复复位。

总结

虽然看门狗是一种非常可靠的保护机制,但它并不是万能的。如果系统设计或硬件环境存在问题,看门狗也可能无法复位。通过合理设计、冗余机制和充分测试,可以最大程度地降低看门狗失效的风险。

相关文章:

STM32-- 看门狗--介绍、使用场景、失效场景

STM32 中的看门狗(Watchdog Timer,简称 WDG)有两种主要类型:独立看门狗(IWDG) 和 窗口看门狗(WWDG)。它们的喂狗机制各有特点,主要区别如下: 1. 独立看门狗&a…...

【赵渝强老师】PostgreSQL的数据库

PostgreSQL的逻辑存储结构主要是指数据库中的各种数据库对象,包括:数据库集群、数据库、表、索引、视图等等。所有数据库对象都有各自的对象标识符oid(object identifiers),它是一个无符号的四字节整数,相关对象的oid都…...

linux安全管理-会话安全

文章目录 1 设置命令行界面超时退出2 配置终端登录失败策略3 配置 SSH 登录失败策略 1 设置命令行界面超时退出 1、检查内容 检查操作系统是否设置命令行界面超时退出。 2、配置要求 操作系统设置命令行界面超时退出。 3、配置方法 配置命令行界面超时时间,编辑/et…...

Ubuntu监视显卡占用情况

在终端中运行 watch -n 0.5 nvidia-smi【以下内容由大模型生成】 watch -n 0.5 nvidia-smi 是一个组合命令,用于在 Linux 终端中定期执行 nvidia-smi 命令并显示其输出。让我们分解一下这个命令的各个部分: watch: watch 是一个用于定期执行其他命令并显…...

学成在线day06

上传视屏 断点续传 通常视频文件都比较大,所以对于媒资系统上传文件的需求要满足大文件的上传要求。http协议本身对上传文件大小没有限制,但是客户的网络环境质量、电脑硬件环境等参差不齐,如果一个大文件快上传完了网断了没有上传完成&…...

Mac安装及合规无限使用Beyond Compare

文章目录 Beyond CompareBeyond Compare简介Beyond Compare安装Beyond Compare到期后继续免费使用 Beyond Compare Beyond Compare简介 Beyond Compare 是一款由 Scooter Software 开发的文件和文件夹比较工具。它主要用于对比两个文件或文件夹之间的差异,并支持文…...

【青牛科技】2K02 电动工具专用调速电路芯片描述

概述: 2K02 是电动工具专用调速电路。内置稳压电路,温度系数好,可以调节输出频率以及占空比的振荡输出,广泛的应用于小型电钻,割草机等工具。 主要特点: ● 电源电压范围宽 ● 占空比可调 ● 温度系数好 …...

基于SpringBoot实现的民宿管理系统(代码+论文)

🎉博主介绍:Java领域优质创作者,阿里云博客专家,计算机毕设实战导师。专注Java项目实战、毕设定制/协助 📢主要服务内容:选题定题、开题报告、任务书、程序开发、项目定制、论文辅导 💖精彩专栏…...

安装QT6.8(MSVC MinGW)+QT webengine+QT5.15.2

本篇主要针对只使用过QT5的qmake,没有用过MSVC,VS的老同学。 建议一部分一部分安装,全部勾选安装遇到问题会中断,前功尽弃。 我自己需要的是QT5,编出的软件用在公司设备上。 QT6:建议也安装学习&#xf…...

MinIO常见操作及Python实现对象的增删改查

MinIO常见操作 MinIO是一个高性能的开源对象存储服务,它兼容Amazon S3云存储服务API。在MinIO中,常见的操作包括: 存储桶操作: 创建、列出、获取信息、删除存储桶。 对象操作: 上传、下载、列出、删除对象。 权限管理&…...

网络编程中的字节序函数htonl()、htons()、ntohl()和ntohs()

目录 1,网络字节序和主机字节序 2. 函数的具体作用 2.1,htonl(Host to Network Long) 2.2,htons(Host to Network Short) 2.3,ntohl(Network to Host Long) 2.4,ntohs(Network to Host Sho…...

【dvwa靶场:File Upload系列】File Upload低-中-高级别,通关啦

目录 一、low级别,直接上传木马文件 1.1、准备一个木马文件 1.2、直接上传木马文件 1.3、访问木马链接 1.4、连接蚁剑 二、medium级别:抓包文件缀名 2.1、准备一个木马文件,修改后缀名为图片的后缀名 2.2、上传文件,打开burpSuite&…...

RHCE NFS

RHCE NFS 1.11. 2 NFS 主机名格式1.3 NFS 服务器配置1.3.1 /etc/exports 配置文件1.3.1.1 导出条目1.3.1.2 默认选项1.3.1.3 默认和覆盖选项 1.4 启动 NFS 服务器1.5 练习1.5.1 配置 NFS 服务器和客户端挂载1.5.2 配置autofs自动挂载(需要时才挂载) 1.6 …...

【数据结构】ArrayList与顺序表

ArrayList与顺序表 1.线性表2.顺序表2.1 接口的实现 3. ArrayList简介4. ArrayList使用4.2 ArrayList常见操作4.3 ArrayList的遍历4.4 ArrayList的扩容机制 5. ArrayList的具体使用5.1 杨辉三角5.2 简单的洗牌算法 6. ArrayList的问题及思考 【本节目标】 线性表顺序表ArrayLis…...

互联网基础

TCP/IP协议(协议组) 分层名称TCP/IP协议应用层HTTP,FTP,mDNS,WebSocket,OSC...传输层TCP,UDP网络层IP链路层(网络接口层)Ethernet,Wi-Fi... 链路层(网络接口层) 链路层的主要作用…...

ffmpeg.js视频播放(转换)

chrome 临时设置SharedArrayBuffer "C:\Program Files\Google\Chrome\Application\chrome.exe" --enable-featuresSharedArrayBuffer 引用的js及相关文件 ffmpeg.min.js ffmpeg.min.js.map ffmpeg-core.js ffmpeg-core.wasm ffmpeg-core.worker.js 以上几个现…...

后端 Java发送邮件 JavaMail 模版 20241128测试可用

配置授权码 依赖 <dependency><groupId>javax.mail</groupId><artifactId>javax.mail-api</artifactId><version>1.5.5</version> </dependency> <dependency><groupId>com.sun.mail</groupId><artifa…...

电脑中的vcruntime140_1.dll文件有问题要怎么解决?一键修复vcruntime140_1.dll

遇到“vcruntime140_1.dll无法继续执行代码”的错误通常表明电脑中的vcruntime140_1.dll文件有问题。这个文件属于Visual C Redistributable&#xff0c;对很多程序的运行至关重要。本文将提供几个步骤&#xff0c;帮助你迅速修复这一错误&#xff0c;使电脑恢复正常工作状态。…...

探索 Vue 3.0中Treeshaking特性?

Vue 3.0 中的 Tree Shaking 特性 Tree Shaking 是一种优化技术,旨在通过静态分析代码,去除未使用的模块或函数,从而减小最终的打包文件大小。在 Vue 3.0 中,由于其模块化设计和代码按需引入的特性,Vue 的 Tree Shaking 特性得到了增强,能够有效地去除那些在生产环境中未…...

Paddle Inference部署推理(十)

十&#xff1a;Paddle Inference推理 &#xff08;python&#xff09;API详解 9. 启用内存优化 API定义如下&#xff1a; # 开启内存 / 显存复用&#xff0c;具体降低内存效果取决于模型结构 # 参数&#xff1a;None # 返回&#xff1a;None paddle.inference.Config.enable…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...

HTML前端开发:JavaScript 获取元素方法详解

作为前端开发者&#xff0c;高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法&#xff0c;分为两大系列&#xff1a; 一、getElementBy... 系列 传统方法&#xff0c;直接通过 DOM 接口访问&#xff0c;返回动态集合&#xff08;元素变化会实时更新&#xff09;。…...