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

STM32中,如何理解看门狗

在STM32微控制器中,看门狗(Watchdog)是一种硬件计时器,用于监控系统运行状态,防止软件死锁或跑飞。其核心机制是:系统需定期“喂狗”(复位看门狗计数器),若未及时喂狗,则触发系统复位,使程序恢复至初始状态。


看门狗类型及特点

STM32提供两种看门狗,各有适用场景:

1. 独立看门狗(IWDG)
  • 时钟源:独立内部低速时钟(LSI,~32-40kHz),不受主时钟影响(即使主时钟故障仍有效)。

  • 特点

    • 配置后无法停止(只能通过复位关闭)。

    • 超时时间范围宽(毫秒到秒级)。

    • 适合监控严重故障(如程序跑飞、死循环)。

  • 工作流程

初始化 → 启动计数器 → 定期喂狗(复位计数器)→ 若超时未喂狗 → 触发系统复位
2. 窗口看门狗(WWDG)
  • 时钟源:APB1总线时钟(PCLK1)分频。

  • 特点

    • 必须在指定时间窗口内喂狗(既不能过早也不能过晚)。

    • 提供提前唤醒中断(EWI),允许在复位前执行紧急操作。

    • 适合监控代码执行时效性(如任务调度超时)。

  • 工作流程

初始化 → 启动计数器 → 在窗口期内喂狗 → 若喂狗过早/过晚 → 触发复位

关键概念详解

超时时间计算
  • IWDG公式

    示例(LSI=40kHz,预分频=32,RLR=1000):
    Ttimeout=100040000×32=0.8秒Ttimeout​=400001000​×32=0.8秒

  • WWDG公式

喂狗操作
  • IWDG喂狗:向键寄存器(IWDG_KR)写入0xAAAA

  • WWDG喂狗:向控制寄存器(WWDG_CR)写入值(需在0x40~0x7F之间)。


配置步骤(以IWDG为例,HAL库)

#include "stm32f1xx_hal.h"IWDG_HandleTypeDef hiwdg;void IWDG_Init(void) {hiwdg.Instance = IWDG;hiwdg.Init.Prescaler = IWDG_PRESCALER_32;  // 预分频系数hiwdg.Init.Reload    = 1000;               // 重载值(超时时间)HAL_IWDG_Init(&hiwdg);                     // 初始化HAL_IWDG_Start(&hiwdg);                    // 启动看门狗
}void main(void) {IWDG_Init();while (1) {// ... 正常代码 ...HAL_IWDG_Refresh(&hiwdg);  // 定期喂狗(需在超时前执行)}
}

使用注意事项

  1. 喂狗位置

    • 放在主循环或关键任务中,避免在阻塞函数中饿死看门狗

    • 若使用RTOS,可在空闲任务中喂狗(但需确保任务调度正常)。

  2. 调试影响

    • 调试时暂停MCU会导致看门狗复位,可通过DBGMCU模块临时冻结看门狗。

  3. 窗口看门狗窗口期

    • 窗口上限由WWDG_CFR寄存器设定,喂狗需在[窗口值, 0x3F]之间。


应用场景对比

场景推荐看门狗原因
高可靠性系统(工业控制)IWDG独立时钟,抗干扰能力强
实时任务监控WWDG精确时间窗口,可捕获逻辑错误
低功耗应用IWDGLSI功耗低于主时钟

通过合理配置看门狗,可显著提升STM32系统的抗故障能力,确保设备在异常状态下自动恢复。

http://www.lryc.cn/news/2391755.html

相关文章:

  • Cursor从入门到精通实战指南(一):开始使用Cursor
  • 麒麟v10+信创x86处理器离线搭建k8s集群完整过程
  • 计算机组成原理——cache
  • EasyExcel使用导出模版后设置 CellStyle失效问题解决
  • 关于AWESOME-DIGITAL-HUMAN的部署
  • WebAssembly 及 HTML Streaming:重塑前端性能与用户体验
  • python同步mysql数据
  • shell之通配符及正则表达式,grep参数
  • RuoYi前后端分离框架集成手机短信验证码(一)之后端篇
  • Knife4j框架的使用
  • 深兰科技陈海波率队考察南京,加速AI医诊大模型区域落地应用
  • 【芯片设计中的交通网络革命:Crossbar与NoC架构的博弈C架构的博弈】
  • deepseek告诉您http与https有何区别?
  • mac将自己网络暴露到公网
  • 考研政治资料分享 百度网盘
  • 拓扑排序算法剖析与py/cpp/Java语言实现
  • 罗马-华为
  • 单例模式的隐秘危机
  • 微信小程序常用方法
  • 切片器导航-大量报告页查看的更好方式
  • 火山引擎声音复刻
  • 【数据分析】Pandas
  • 【ROS2】Qt Debug日志重定向到ROS2日志管理系统中
  • 经典SQL查询问题的练习第一天
  • ubuntu 22.04安装k8s高可用集群
  • 使用java实现word转pdf,html以及rtf转word,pdf,html
  • 使用LSTM进行时间序列分析
  • 【密码学——基础理论与应用】李子臣编著 第十三章 数字签名 课后习题
  • k8s中kubeSphere的安装使用+阿里云私有镜像仓库配置完整步骤
  • Agilent安捷伦Cary3500 UV vis光谱仪Cary60分光光度计Cary1003004000500060007000 UV visible