当前位置: 首页 > 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…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...