STM32中,如何理解看门狗

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


看门狗类型及特点

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

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

  • 特点

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

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

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

  • 工作流程

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

  • 特点

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

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

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

  • 工作流程

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

关键概念详解

超时时间计算
  • 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库)

cs 复制代码
#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 精确时间窗口,可捕获逻辑错误
低功耗应用 IWDG LSI功耗低于主时钟

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

相关推荐
电子工程师-C518 小时前
基于单片机的智能手表
单片机·嵌入式硬件·智能手表
蓁蓁啊9 小时前
ARM交叉编译中编译与链接参数不一致导致的问题
开发语言·arm开发·嵌入式硬件
Jerry丶Li11 小时前
二十八、STM32的USART (介绍)
stm32·单片机·嵌入式硬件
偶像你挑的噻12 小时前
3-Linux驱动开发-简单内核模块代码详解
linux·驱动开发·stm32·嵌入式硬件
p666666666812 小时前
【☀Linux驱动开发笔记☀】linux下led驱动(非设备树)_03
linux·驱动开发·笔记·嵌入式硬件·学习
千年糊涂13 小时前
STM32使用薄膜压力传感器
stm32·单片机·嵌入式硬件
13 小时前
ADC单通道采集实验
单片机·stm中adc单通道采样
点灯小铭21 小时前
基于单片机的窗帘、灯光、空调智能家居控制系统设计
单片机·嵌入式硬件·毕业设计·智能家居·课程设计·期末大作业
飞凌嵌入式1 天前
【玩转多核异构】T153核心板RISC-V核的实时性应用解析
linux·嵌入式硬件·嵌入式·risc-v
怎么就重名了1 天前
STM32+蓝牙模块+超声波模块+QT
stm32·嵌入式硬件·qt