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

【STM32】WDG看门狗

【STM32】WDG看门狗

  • 一、WDG简介
  • 二、IWDG独立看门狗
    • 2.1 独立看门狗框图
    • 2.2 IWDG键寄存器
    • 2.3 IWDG超时时间
  • 三、WWDG窗口看门狗
    • 3.1 窗口看门狗框图
    • 3.2 WWDG工作特性
    • 3.3 WWDG超时时间
  • 四、IWDG和WWDG对比


一、WDG简介

  • WDG(Watchdog)看门狗
  • 本质:看门狗是一个定时器,其工作依赖于 “喂狗” 操作与超时复位的机制。
  • 核心功能:监控程序运行状态,当程序因漏洞、硬件故障、电磁干扰等因素出现卡死、跑飞时,自动触发复位,避免系统长时间瘫痪,保障可靠性与安全性。
  • 触发逻辑:程序需在规定时间内执行 “喂狗”(重置计数器)操作;若超时未执行,看门狗硬件会直接产生复位信号,重启系统。
  • STM32内置两个看门狗
    独立看门狗(IWDG):独立工作,对时间精度要求较低
    窗口看门狗(WWDG):要求看门狗在精确计时窗口起作用

二、IWDG独立看门狗

2.1 独立看门狗框图

在这里插入图片描述
1. 模块组成与供电

  • 供电分区
    • 上方为1.8V供电区,包含预分频寄存器(IWDG_PR)状态寄存器(IWDG_SR)重装载寄存器(IWDG_RLR)键寄存器(IWDG_KR),这些是配置看门狗的“控制类寄存器”。
    • 下方为VDD供电区,包含预分频器12位递减计数器12位重装载数值,这些是看门狗的“时序执行类模块”。
    • 特性:看门狗功能位于VDD供电区,因此在停机模式、待机模式下仍能正常工作,保证异常场景下的监控能力。

2. 时钟与分频链路

  • 时钟源(LSI):独立看门狗采用内部低速时钟(LSI),频率典型值为40 kHz,它是看门狗的计时基准。
  • 8位预分频器:由预分频寄存器(IWDG_PR)配置,可对LSI时钟进行分频,输出不同的计数时钟。分频系数可选(如/4、/8、/16…/256),用于调整看门狗的“超时周期”范围。

在预分频寄存器写入分频值,然后8位预分频器执行分频

3. 计数与重装载链路

  • 12位递减计数器:基于分频后的时钟做递减计数,计数范围为0~4095(12位最大值)。当计数器减到0时,触发IWDG复位,强制系统重启。
  • 12位重装载数值:由重装载寄存器(IWDG_RLR)配置,用于定义“计数器的初始值”。程序执行“喂狗”操作时,会将该数值重新加载到递减计数器中,重置计数周期。

4. 控制与状态链路

  • 键寄存器(IWDG_KR):是看门狗的“控制入口”,写入不同密钥实现不同功能:
    • 写入0xCCCC:启动看门狗计数;
    • 写入0xAAAA:执行“喂狗”,将重装载数值加载到计数器;
    • 写入0x5555:解锁预分频寄存器(IWDG_PR)重装载寄存器(IWDG_RLR),允许修改配置。
  • 状态寄存器(IWDG_SR):用于标记看门狗的工作状态,例如是否正在进行“重装载操作”等,供程序查询。

5. 整体工作逻辑

  1. 配置阶段:写入0x5555解锁寄存器,通过IWDG_PR设置分频系数、IWDG_RLR设置重装载数值,完成超时周期的定制。
  2. 启动阶段:写入0xCCCC启动递减计数器,看门狗开始工作。
  3. 运行阶段:计数器不断递减,程序需在“超时前”写入0xAAAA执行“喂狗”,将重装载数值重新加载到计数器,避免复位。
  4. 异常阶段:若程序卡死/跑飞,无法及时“喂狗”,计数器减到0时,触发IWDG复位,系统重启,恢复可靠性。

2.2 IWDG键寄存器

  • 键寄存器本质上是控制寄存器,用于控制硬件电路的工作
  • 在可能存在干扰的情况下,一般通过在整个键寄存器写入特定值来代替控制寄存器写入一位的功能,以降低硬件电路受到干扰的概率
写入键寄存器的值作用
0xCCCC启用独立看门狗
0xAAAAIWDG_RLR中的值重新加载到计数器(喂狗)
0x5555解除IWDG_PR和IWDG_RLR的写保护
0x5555之外的其他值启用IWDG_PR和IWDG_RLR的写保护

2.3 IWDG超时时间

  • 超时时间:TIWDG=TLSI×PR预分频系数×(RL+1)T_{\text{IWDG}} = T_{\text{LSI}} \times \text{PR预分频系数} \times (\text{RL} + 1)TIWDG=TLSI×PR预分频系数×(RL+1)

+1原因:独立看门狗的12 位递减计数器是从 “重装载数值 RL” 开始,逐次减 1,直到减到 0 时触发复位。

  • 其中:TLSI=1/FLSIT_{\text{LSI}} = 1 / F_{\text{LSI}}TLSI=1/FLSI
预分频系数PR[2:0]位最短时间(ms)
RL[11:0] = 0x000
最长时间(ms)
RL[11:0] = 0xFFF
/400.1409.6
/810.2819.2
/1620.41638.4
/3230.83276.8
/6441.66553.6
/12853.213107.2
/256(6或7)6.426214.4

三、WWDG窗口看门狗

3.1 窗口看门狗框图

在这里插入图片描述

1. 时钟与分频链路

  • 时钟源(PCLK1):窗口看门狗依赖外设时钟PCLK1(由RCC时钟控制器提供),因此其工作与主系统时钟强关联。
  • 看门狗预分频器(WDGTB):对PCLK1进行分频,输出计数时钟,用于控制6位递减计数器的计时周期。

2. 计数与控制链路

  • 6位递减计数器(CNT):集成在看门狗控制寄存器WWDG_CR)中,计数范围为0~63(6位最大值)。计数器不断递减,是窗口看门狗“超时检测”的核心时序单元。
  • WWDG_CR寄存器
    • WDGA位:看门狗使能位,置1则启动窗口看门狗;
    • T6~T0位:6位递减计数器的当前计数值,程序需通过“喂狗”操作更新该值。
  • 6位递减计数器(CNT)和看门狗控制寄存器(WWDG_CR)集成在同一寄存器
  • WWDG_CR 中的 6 位递减计数器(T6~T0)是一直在自减的
  • 窗口看门狗的 “喂狗” 操作就是向 WWDG_CR 寄存器写入新的计数值
  • CNT是6位计数器,但寄存器却是7位,它是根据T6为准,如果T6由1变为0触发复位,所以实际上递减的是T5-T0。比如当寄存器自减到1000000,再减1,变为0111111时,溢出产生复位。

3. 窗口与比较链路

  • 看门狗配置寄存器(WWDG_CFR)
    • W6~W0位:定义“喂狗窗口的上限值”,即程序必须在计数器值大于W6~W0大于0的区间内执行喂狗操作(否则触发复位)。
  • 比较器实时比较WWDG_CR的T6T0与WWDG_CFR的W6W0
    • T6~T0 > W6~W0,比较结果为1,此时允许程序执行“喂狗”;
    • T6~T0 ≤ W6~W0T6~T0 = 0,则触发复位逻辑。

4. 复位触发逻辑
复位由或门+与门的组合逻辑触发,满足以下任一条件时,系统将被复位:

  • 计数器减到0(超时未喂狗);
  • 喂狗操作在“窗口外”执行(即计数器值≤W6~W0时喂狗);
  • 未在有效窗口内执行喂狗操作。

5. 整体工作逻辑

  1. 配置阶段:通过WWDG_CFR设置喂狗窗口上限(W6~W0),通过预分频器(WDGTB)设置计数时钟分频比。
  2. 启动阶段:向WWDG_CRWDGA位置1,启动6位递减计数器。
  3. 运行阶段:计数器不断递减,程序需在“计数器值 > W6~W0 且 > 0”的窗口内,写入新的计数值到WWDG_CR(喂狗),重置计数周期。
  4. 异常阶段:若程序卡死/跑飞,或喂狗操作在窗口外执行,触发复位逻辑,系统重启。

3.2 WWDG工作特性

  • 递减计数器T[6:0]的值小于0x40时,WWDG产生复位
  • 递减计数器T[6:0]在窗口W[6:0]外被重新装载时,WWDG产生复位
  • 递减计数器T[6:0]等于0x40时可以产生早期唤醒中断(EWI),用于重装载计数器以避免WWDG复位
  • 定期写入WWDG_CR寄存器(喂狗)以避免WWDG复位
    在这里插入图片描述

3.3 WWDG超时时间

  • 超时时间:

TWWDG=TPCLK1×4096×WDGTB预分频系数×(T[5:0]+1)T_{\text{WWDG}} = T_{\text{PCLK1}} \times 4096 \times \text{WDGTB预分频系数} \times (\text{T[5:0]} + 1)TWWDG=TPCLK1×4096×WDGTB预分频系数×(T[5:0]+1)

  • 窗口时间:

TWIN=TPCLK1×4096×WDGTB预分频系数×(T[5:0]−W[5:0])T_{\text{WIN}} = T_{\text{PCLK1}} \times 4096 \times \text{WDGTB预分频系数} \times (\text{T[5:0]} - \text{W[5:0]})TWIN=TPCLK1×4096×WDGTB预分频系数×(T[5:0]W[5:0])

  • 其中:TPCLK1=1/FPCLK1T_{\text{PCLK1}} = 1 / F_{\text{PCLK1}}TPCLK1=1/FPCLK1

Tpclk1 x 4096原因:WWDG 的计数基于一个内部的4096 分频器(这是芯片硬件设计的固定参数)。这个分频器会先对PCLK1进行 4096 倍的分频

在这里插入图片描述

四、IWDG和WWDG对比

对比项IWDG独立看门狗WWDG窗口看门狗
复位计数器减到0后计数器T[5:0]减到0后、过早重装计数器
中断早期唤醒中断
时钟源LSI(40KHz)PCLK1(36MHz)
预分频系数4、8、32、64、128、2561、2、4、8
计数器12位6位(有效计数)
超时时间0.1ms~26214.4ms113us~58.25ms
喂狗方式写入键寄存器,重装固定值RLR直接写入计数器,写多少重装多少
防误操作键寄存器和写保护
用途独立工作,对时间精度要求较低要求看门狗在精确计时窗口起作用

1. 复位机制

  • IWDG独立看门狗:仅当12位计数器减到0时,才会触发系统复位。逻辑简单,仅监控“是否超时未喂狗”。
  • WWDG窗口看门狗:复位触发有两种场景:
    • 计数器T[5:0](6位有效计数)减到0(超时未喂狗);
    • 过早重装计数器(即喂狗操作在“窗口外”执行,如计数器值≥窗口上限时喂狗)。
      这种设计让WWDG能同时监控“程序是否跑飞超时”和“程序是否执行过快(过早喂狗)”。

2. 中断支持

  • IWDG:无中断功能,仅通过复位强制系统重启。
  • WWDG:支持早期唤醒中断(EWI)。当计数器值减到0x40(T6位由1变0)时,会触发中断,可用于在复位前执行一些紧急操作(如保存关键数据)。

3. 时钟源

  • IWDG:使用LSI(内部低速振荡器,典型40KHz),完全独立于系统主时钟(即使主时钟故障,IWDG仍能工作),但时钟精度较低。
  • WWDG:依赖PCLK1(外设时钟,如36MHz),与系统主时钟强关联,时钟精度高,适合对时序要求严格的场景。

4. 预分频系数

  • IWDG:预分频系数可选4、8、32、64、128、256,可灵活调整计数器的计时周期,覆盖“0.1ms~26214.4ms”的超时范围。
  • WWDG:预分频系数可选1、2、4、8,计时周期相对更短,配合6位计数器实现“113us~58.25ms”的超时范围。

5. 计数器位数

  • IWDG:12位计数器,计数范围0~4095,结合预分频系数可实现长超时时间(最长约26秒)。
  • WWDG:6位有效计数器(T[5:0]),计数范围0~63,但因时钟源精度高、预分频系数调整灵活,仍能满足精准的短时监控需求。

6. 超时时间范围

  • IWDG:超时时间跨度大(0.1ms~26214.4ms),适合对时间精度要求不高、但需要长时间监控的场景(如工业控制中设备长时间无响应的复位)。
  • WWDG:超时时间更短(113us~58.25ms),且能通过“窗口机制”实现精准时序监控(如实时系统中程序必须在固定时间区间内执行喂狗)。

7. 喂狗方式

  • IWDG:需通过“写入键寄存器”的方式,重装固定的重装载值(RLR)。操作相对繁琐,但有“键寄存器”和写保护机制防止误操作。
  • WWDG:直接向**计数器寄存器(WWDG_CR)**写入新的计数值即可喂狗,写多少就重装多少,操作更灵活,但也更易因误操作触发复位。

8. 防误操作机制

  • IWDG:通过“键寄存器(如写入0xCCCC解锁)”和写保护机制,防止程序误操作导致看门狗意外复位或关闭。
  • WWDG:无专门的防误操作设计,喂狗操作完全依赖程序逻辑的正确性,因此对代码严谨性要求更高。

9. 用途差异

  • IWDG:因独立时钟、长超时范围、防误操作机制,适合对时间精度要求低、但需稳定独立工作的场景(如普通嵌入式设备的“死机复位”)。
  • WWDG:因精准时钟、窗口机制、早期中断,适合对程序时序要求严格的场景(如实时操作系统(RTOS)、通信协议栈中“必须在固定窗口内执行喂狗”的监控)。

有关【STM32】WDG看门狗 就到这,希望对你有所帮助,感谢观看!

码文不易,留个赞再走吧~

http://www.dtcms.com/a/540716.html

相关文章:

  • 无锡市建设安全监督网站全国统一核酸检测价格
  • 做网站购买备案域名织梦高端html5网站建设工作室网络公司网站模板
  • 2.CSS3.(4).html
  • 记一次诡异的“偶发 404”排查:CDN 回源到 OSS 导致 REST API 失败
  • C++笔记(面向对象)类模板
  • Selenium IDE下载和安装教程(附安装包)
  • Quartz框架实现根据设置的cron表达式进行定时任务执行
  • linux20 线程同步--信号量
  • 内核的文件预取逻辑及blockdev的相关配置
  • [特殊字符] Web 字体裁剪优化实践:把 42MB 字体包瘦到 1.6MB
  • 平滑过渡,破解多库并存:浙人医基于金仓KFS的医疗信创实战解析
  • 做经营性的网站需要注册什么条件网站构思
  • Answer企业社区实战:零成本搭建技术问答平台,远程协作效率提升300%!
  • “听书”比“看书”更省力?
  • 大连 手机网站案例网站定位方案
  • window安装MYSQL5.5出错:a windows service with the name MYSQL alreadyexists....
  • 珠海做网站报价影响网站排名的因素
  • 6.1.2.2 大数据方法论与实践指南-离线任务SQL 任务开发规范
  • Java 大视界 -- Java 大数据在智能交通高速公路收费系统优化与通行效率提升实战(429)
  • 网站可以做怀孕单吗平面设计图数字标识
  • 图神经网络入门:手写一个 VanillaGNN-从邻接矩阵理解图神经网络的消息传递
  • 网站模版带后台酒类招商网站大全
  • 营销型网站创建网页制作三剑客通常指
  • 【笔试真题】- 电信-2025.10.11
  • 云渲染与传统渲染:核心差异与适用场景分析
  • 什么是流程监控?如何构建跨系统BPM的实时监控体系?
  • 直通滤波....
  • eclipse做网站代码惠州市
  • 零基础新手小白快速了解掌握服务集群与自动化运维(十五)Redis模块-Redis主从复制
  • 视频网站自己怎么做的正规的大宗商品交易平台