STM32(二十六)——WDG看门狗

一、简介

•WDG(Watchdog)看门狗

•看门狗可以监控程序的运行状态,当程序因为设计漏洞、硬件故障、电磁干扰等原因,出现卡死或跑飞现象时,看门狗能及时复位程序,避免程序陷入长时间的罢工状态,保证系统的可靠性和安全性

•看门狗本质上是一个定时器,当指定时间范围内,程序没有执行喂狗(重置计数器)操作时,看门狗硬件电路就自动产生复位信号

•STM32内置两个看门狗

独立看门狗(IWDG):独立工作,对时间精度要求较低

窗口看门狗(WWDG):要求看门狗在精确计时窗口起作用

二、IWDG独立看门狗

IWDG框图

  1. 时钟与分频
  • 时钟源:LSI(内部低速 RC 振荡器,典型频率 40kHz),不受系统时钟影响,保证独立性

  • 预分频模块 :8 位预分频器,由IWDG_PR寄存器配置分频系数(4/8/16/32/64/128/256)

  • 作用:对 LSI 时钟分频,得到计数器计数时钟

  1. 计数与重装
  • 12 位递减计数器:核心计数单元,从初始值向下计数,计到 0 时触发 IWDG 复位

  • 12 位重装载寄存器IWDG_RLR:存储喂狗时的重载值,决定计数器溢出周期

  • 重装载数值模块 :在喂狗时将IWDG_RLR的值加载到递减计数器

  1. 控制与状态寄存器
  • 键寄存器IWDG_KR:

    • 写入0x5555:允许访问IWDG_PR和IWDG_RLR寄存器

    • 写入0xAAAA:喂狗(IWDG_RLR中的值重新加载到计数器)

    • 写入0xCCCC:启动 IWDG(一旦启动,硬件无法停止,只能复位)

    • 写入0x5555之外的其他值:启用IWDG_PR和IWDG_RLR的写保护

  • 状态寄存器IWDG_SR:

    • 位 0:PVU(预分频器更新忙标志)

    • 位 1:RVU(重装载值更新忙标志)

    • 用于判断寄存器配置是否完成

  1. 供电与独立性
  • 看门狗功能位于VDD 供电区,即使系统进入停机 / 待机模式,仍能正常工作
  • 1.8V 供电区存放配置寄存器,保证低功耗下配置不丢失

IWDG 超时时间

1、核心公式与表中数据对应

IWDG 超时时间计算公式:

TIWDG = TLSI × PR预分频系数 × (RL + 1)

TLSI = 1 / FLSI

TIWDG = 40000(RL11:0+1)×预分频系数​×1000 ms

  • 最短时间 :RL[11:0] = 0x000(即 RL=0),此时 Tmin=1/40000×1×预分频系数×1000 ms
  • 最长时间 :RL[11:0] = 0xFFF(即 RL=4095),此时 Tmax=1/40000×4096×预分频系数×1000 ms

数据验证(以预分频 / 64 为例)

  • 最短时间:(1/40000)×1×64×1000=1.6 ms ✅
  • 最长时间:(1/40000)×4096×64×1000=6553.6 ms ✅

2、完整参数对照表

表格

预分频系数 PR 2:0 位 最短时间 (ms) RL=0x000 最长时间 (ms) RL=0xFFF
/4 0 0.1 409.6
/8 1 0.2 819.2
/16 2 0.4 1638.4
/32 3 0.8 3276.8
/64 4 1.6 6553.6
/128 5 3.2 13107.2
/256 6 或 7 6.4 26214.4

3、关键使用要点

  1. 预分频系数越大,超时范围越宽:/256 分频时最长可达约 26.2 秒,适合需要长时间监控的场景
  2. RL 值决定实际超时时间:实际项目中需根据主循环执行周期,选择合适 RL 值,保证喂狗频率大于超时频率
  3. LSI 频率误差:表中基于 40kHz 理想值,实际 LSI 频率有 ±20% 误差,配置时需预留冗余
  4. PR 寄存器配置:PR 2:0 为 6 或 7 时,预分频系数均为 / 256,需注意寄存器写入值

三、WWDG窗口看门狗

WWDG框图

  1. 时钟与分频
  • 时钟源:PCLK1(来自 RCC 的 APB1 时钟),精度远高于 IWDG 的 LSI
  • 看门狗预分频器(WDGTB) :对 PCLK1 (框图中没画出来,在进行分频前硬件就已经对PCLK1 进行了12分频)进行分频(可配置为 1/2/4/8),为 6 位递减计数器提供计数时钟
  1. 核心寄存器
  • 控制寄存器(WWDG_CR) :
    • WDGA:看门狗激活位(写 1 启动 WWDG,启动后无法软件关闭)
    • T6~T0:7 位计数器(实际为 6 位递减计数器 + 第 6 位溢出位)
  • 配置寄存器(WWDG_CFR) :
    • W6~W0:7 位窗口值,定义喂狗的窗口下限
    • 额外包含预分频器配置位(WDGTB)和早期唤醒中断位(EWI)
  1. 比较与复位逻辑
  • 比较器 :实时比较计数器值T6:0与窗口值W6:0
    • 当 T6:0 > W6:0 时,比较结果 = 1(喂狗过早)
  • 复位触发条件 (满足任一即复位):
    1. 计数器第 6 位T6变为 0(计数器递减到 0x3F 以下,喂狗过晚)
    2. 在T6:0 > W6:0时执行喂狗操作(喂狗过早)

WWDG工作特性

•递减计数器T6:0的值小于0x40时,WWDG产生复位

•递减计数器T6:0在窗口W6:0外被重新装载时,WWDG产生复位

•递减计数器T6:0等于0x40时可以产生早期唤醒中断(EWI),用于重装载计数器以避免WWDG复位

•定期写入WWDG_CR寄存器(喂狗)以避免WWDG复位

喂狗流程

  • 启动计数 :WWDG 启动后,计数器T[6:0]从初始值(大于W[6:0])开始递减
  • 不允许刷新阶段 :计数器值仍大于W[6:0],此时若执行喂狗操作,硬件会直接判定为 "喂狗过早" 并触发复位
  • 进入刷新窗口 :计数器递减至T[6:0] ≤ W[6:0],此时进入合法喂狗窗口
  • 合法喂狗 :在刷新窗口内写入WWDG_CR,计数器重载为初始值,重新开始递减
  • 超时复位 :若未在窗口内喂狗,计数器继续递减至3Fh(T6 位变为 0),硬件判定为 "喂狗过晚",触发系统复位

WWDG超时时间

  • T → W :从启动到进入喂狗窗口前 的时间(这段时间不能喂狗,喂了就复位)
  • W → 0x3F :真正的喂狗窗口(这段时间喂狗才合法)
  • T → 0x3F:总超时时间(从启动到复位的总时间)

公式:

4096的由来:

  • 4096 = STM32 内置固定 12 分频,硬件自带
  • 作用:把高速 PCLK1 变慢,让 WWDG 计时不至于太快
  • 公式里必须乘它,因为算的是时间

超时时间:

TWWDG = TPCLK1 × 4096 × WDGTB预分频系数 × (T5:0 + 1)
•窗口时间:

TWIN = TPCLK1 × 4096 × WDGTB预分频系数 × (T5:0 - W5:0)
•其中:TPCLK1 = 1 / FPCLK1

WWDG和IWDG对比

相关推荐
不悔哥5 天前
开源OV-Watch:怎么做一个智能手表
单片机·开源·嵌入式
XiHongShi20165 天前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
优信电子6 天前
AIT1001 非接触式红外测温模块 STM32 驱动开发实战:从引脚到代码全解析
stm32·嵌入式·温度传感器·红外测温·非接触式测温·ait1001
深圳老胡6 天前
STM32F407 控制 L6470 步进电机驱动 —— 控制过程简介
笔记·stm32·单片机·嵌入式硬件·代码规范
wuyk5556 天前
《WiFi 嵌入式物联网开发全套实战》| 第 16 章 ESP32 AP+STA 双模共存原理与工程坑点
网络·stm32·物联网
女神下凡6 天前
嵌入式设计的各种存储芯片的硬件/软件设计规范,非常全面。
arm开发·单片机·嵌入式硬件
梅梅9666 天前
一款mipi转lvds的lcd调试(LT8912B)
单片机·计算机外设·电脑·显示器·pd芯片
开发笔记-阿牛6 天前
蓝牙音乐灯拆解,又一次拆到蓝牙音乐灯芯片CK6865L
人工智能·单片机·嵌入式硬件·音视频·音频
从零开始的嵌入式之旅6 天前
day47
arm开发·经验分享·笔记·嵌入式硬件
恒锐丰科技林技术员6 天前
EG1164 高压大电流升压同步整流芯片解析
经验分享·嵌入式硬件·硬件工程