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_PRIWDG_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(RL[11: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工作特性

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

•递减计数器T[6:0]在窗口W[6:0]外被重新装载时,WWDG产生复位

•递减计数器T[6: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预分频系数 × (T[5:0] + 1)
•窗口时间:

TWIN = TPCLK1 × 4096 × WDGTB预分频系数 × (T[5:0] - W[5:0])
•其中:TPCLK1 = 1 / FPCLK1

WWDG和IWDG对比

相关推荐
集芯微电科技有限公司2 小时前
AD536A高性能真有效值直流转换电路替代PC2909
人工智能·单片机·嵌入式硬件·神经网络·生成对抗网络
可乐鸡翅好好吃2 小时前
关于频率(HZ)与周期(ms)的转换
单片机·嵌入式硬件
进击的横打2 小时前
【车载开发系列】RH850常用的定时器
单片机·嵌入式硬件·rh850
2501_918126912 小时前
学习所有6502写游戏地图的语句
汇编·嵌入式硬件·学习·游戏·个人开发
szxinmai主板定制专家3 小时前
基于ZYNQ MPSOC船舶数据采集仪器设计(三)振动,流量,功耗,EMC,可靠性测试
arm开发·人工智能·嵌入式硬件·fpga开发
AI+程序员在路上3 小时前
Keil5 中安装 STM32各系列单片机开发包步骤
stm32·单片机·嵌入式硬件
xiangw@GZ4 小时前
CapSense底层逻辑:并行走线的强耦合干扰
单片机·嵌入式硬件
逐步前行4 小时前
STM32_ADC_寄存器操作
stm32·单片机·嵌入式硬件
全栈游侠4 小时前
06-任务管理与创建
stm32