登录/注册

stm32看门狗

更多

好的,关于 STM32 的看门狗(Watchdog Timer, WDT),以下是中文详解:

核心概念:

看门狗本质上是一个硬件定时器,用于监控微控制器的运行状态。它的主要目的是检测和从软件故障(如程序跑飞、死锁或意外陷入死循环)中自动恢复系统。

工作原理(类似现实中的“看门狗”):

  1. 启动看门狗: 在程序正常初始化阶段启动看门狗定时器。
  2. 定时器倒计时: 看门狗定时器开始从初始值(重装载值)向下计数。
  3. “喂狗”: 程序必须在看门狗定时器计数到 0(超时)之前,通过写入特定寄存器(喂狗)来重置看门狗的计数器,使其重新开始倒计时。这表示“程序还在正常运行”。
  4. 超时处理: 如果程序由于某种故障(如程序跑飞、陷入死循环、中断服务程序卡死)而未能及时喂狗,定时器会计数到 0(超时)。
  5. 系统复位: 发生超时后,看门狗硬件会自动触发一个系统复位信号,强制整个 STM32 芯片复位重启,让程序回到起点重新开始执行。这是使系统从“卡死”状态恢复的关键机制。

STM32 提供的两种主要看门狗:

  1. 独立看门狗:

    • 时钟源: 使用独立的内部低速时钟(LSI,约 32-128 kHz,具体频率请查阅对应芯片数据手册,它不太精确且随温度/电压变化)。
    • 优点:
      • 完全独立于主时钟系统(HCLK, PCLK)。即使主时钟失效(如晶体振荡器停振),只要 LSI 还在运行(它通常由 RC 振荡器提供,可靠性较高),独立看门狗仍然能工作并触发复位。
      • 配置简单。
    • 缺点:
      • 超时时间精度较低(因为 LSI 频率不准)。
      • 通常只能在 CPU 核心访问其寄存器时才能喂狗(虽然有些型号支持硬件窗口)。
      • 用于检测整体程序运行停滞。
    • 典型应用: 需要高可靠性的场景,防止整个系统由于任何原因(时钟故障、严重软件错误)导致永久挂起。
  2. 窗口看门狗:

    • 时钟源: 来自于 APB1 总线时钟(PCLK1),在主时钟正常时,频率更精确。
    • 核心特点:
      • 引入了一个“喂狗窗口”。
      • 该窗口由上限(Window)和下限(0x3F)定义。
      • 喂狗操作必须在这个时间窗口内完成才有效:不能太早也不能太晚!
      • 太早喂狗(计数器值 > 窗口值)会触发复位。
      • 太晚喂狗(计数器值已经递减到 0x3F 以下甚至超时)会触发复位。
      • 只有在计数器值处于窗口值和 0x3F 之间时喂狗才成功。
    • 优点:
      • 检测故障更灵敏。它不仅检测程序完全不运行(不喂狗),还能检测程序运行过快时序错乱(过早喂狗)。
      • 时间精度较高(依赖 PCLK1)。
    • 缺点:
      • 依赖主时钟系统。如果主时钟失效,窗口看门狗也会失效。
      • 配置相对复杂一点。
    • 典型应用: 监控关键任务或中断的时序。确保关键代码段(如某个必须在特定时间间隔内完成的中断服务程序)按时执行,既不能跳过也不能执行过快。常用于监控显示刷新、通信时序等。

如何使用(核心步骤概述):

  1. 启用时钟(若需要): 独立看门狗(IWDG)通常使用 LSI,需确保 LSI 已开启(或配置为自动开启)。窗口看门狗(WWDG)时钟来自 PCLK1,通常默认开启。
  2. 配置参数:
    • 独立看门狗: 设置预分频器(IWDG_PR)和重装载值(IWDG_RLR)。超时时间 Timeout = (4 * PR_Prescaler * RLR_Value) / LSI_Frequency
    • 窗口看门狗: 设置预分频器(WWDG_CFR[7:8] WDGTB)、窗口值(WWDG_CFR[6:0] W[6:0])和计数器初始值(WWDG_CR[6:0] T[6:0])。需要仔细计算窗口上下限对应的计数器值和时间。
  3. 启用看门狗:
    • 独立看门狗: 向键寄存器(IWDG_KR)写入 0xCCCC 启动计数器。写入 0x5555 解锁 PRRLR 寄存器以便修改。
    • 窗口看门狗: 设置控制寄存器(WWDG_CR)的 WDGA 位为 1 来激活看门狗。
  4. 在程序中喂狗:
    • 独立看门狗: 在程序主循环或关键任务点(确保在超时前发生),向键寄存器(IWDG_KR)写入 0xAAAA 重置计数器(喂狗)。
    • 窗口看门狗: 在程序的关键路径(通常是某个中断服务程序或任务循环中的特定位置),在计数器值处于窗口值和0x3F之间时,写入控制寄存器(WWDG_CR)的低7位(T[6:0])为新值(通常更新为初始值或接近窗口值的数)来喂狗。注意:必须在窗口内进行!

重要注意事项 & 最佳实践:

  1. 喂狗位置: 将喂狗代码放在程序逻辑的关键路径上,确保程序正常运行时一定能定期执行到。避免放在可能阻塞或很少执行的分支中。不要放在中断频率不稳定或可能丢失的中断里。
  2. 超时时间设定:
    • 独立看门狗:时间应显著长于正常程序循环/任务的最大预期执行时间,但要短于用户能容忍的响应延迟时间(比如几百毫秒到几秒)。
    • 窗口看门狗:窗口的上下界限需要根据被监控代码段的理论最大和最小执行时间仔细设定。
  3. 调试模式: 在调试器连接状态下,看门狗复位可能会打断调试。STM32 通常在调试模式下会自动冻结看门狗计数器(通过 DBGMCU 模块的配置寄存器 DBGMCU_APBx_FZ)。调试完成后需确保恢复此设置或在真实环境中测试。
  4. 低功耗模式: 进入低功耗模式(如 STOP, STANDBY)时,看门狗可能会停止计数(取决于模式)。需查阅芯片参考手册了解具体行为。有时需要用特定的低功耗模式或唤醒方式来配合喂狗。
  5. 硬件看门狗: STM32 的看门狗是片内硬件实现的,可靠性高。
  6. 喂狗时机: 对于窗口看门狗,过早喂狗和过晚喂狗同样会导致复位! 这点需要特别注意。

总结:

STM32 的独立看门狗(IWDG)和窗口看门狗(WWDG)是强大的硬件安全机制,是构建高可靠性嵌入式系统的基石。IWDG 用于检测系统完全挂死,依赖低速内部时钟,独立性强。WWDG 用于监控程序执行时序的正确性,依赖主时钟,精度高并能检测时序异常。正确配置和合理放置喂狗点是发挥其作用的关键。务必结合具体芯片型号的参考手册(Reference Manual)和数据手册(Datasheet)进行详细配置。

STM32看门狗原理和示例代码

看门狗基础:STM32微控制器上的看门狗主要有两种类型:独立看门狗(IW

2023-12-01 08:00:54

什么是模拟看门狗?模拟看门狗有什么用处?

看门狗大家应该再熟悉不过了,一旦忘记喂狗就会导致单片机复位,而在大部分stm32中都存在两种类型的看门狗,Independent watchdo

2023-11-22 09:40:29

STM32独立看门狗详解

本文将介绍STM32的看门狗中的独立看门狗,并通过实例来喂狗、体验喂狗与不喂狗的区别。

2023-05-01 09:06:00

窗口看门狗是什么?与独立看门狗有啥区别?

STM32有两个看门狗,独立看门狗和窗口看门狗。其实两者的功能是类似的,

资料下载 李鸿洋 2022-02-09 10:28:07

STM32:独立看门狗、窗口看门狗的配置

STM32单片机的看门狗有独立看门狗和窗口看门狗之分,这两者的工作原理却

资料下载 旧念 2022-02-08 16:15:35

STM32L051使用HAL库操作实例(6)-(IWDG)独立看门狗实验

一、看门狗介绍STM32的看门狗分为独立看门狗和窗口

资料下载 刘艳 2021-12-09 16:51:18

MCU独立看门狗与窗口看门狗的区别

早期的MCU没有看门狗,就容易引起有些产品死机了不能重启工作。为了避免这个问题,后期的MCU在内部集成了看门狗的功能。为了满足更多使用场景,现在很多MCU都集成了两个

资料下载 刘洋 2021-10-28 20:06:01

STM32 ADC模拟看门狗及其应用

STM32 ADC模拟看门狗及其应用(电源技术期刊是什么级别期刊)-模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高低阈值,用户可以预

资料下载 丁冬芹 2021-08-04 18:12:22

STM32中的独立看门狗和窗口看门狗是什么

在早期的MCU中是没有看门狗这种东西的,所以产品就很容易出现死机,跑飞的情况。为了避免这种情况的出现,后期的MCU都集成了看门狗的功能。但是目前看门狗

2023-02-20 17:47:07

STM32中的独立看门狗和窗口看门狗

在早期的MCU中是没有看门狗这种东西的,所以产品就很容易出现死机,跑飞的情况。为了避免这种情况的出现,后期的MCU都集成了看门狗的功能。但是目前看门狗

2023-01-30 14:38:17

详解独立看门狗的实现原理

这里以大家熟悉的STM32为例给大家讲解一下独立看门狗的配置以及工作过程。STM32F10xxx内置两个

2022-12-22 17:01:43

STM32中的独立看门狗和窗口看门狗

一、前言 在早期的MCU中是没有看门狗这种东西的,所以产品就很容易出现死机,跑飞的情况。为了避免这种情况的出现,后期的MCU都集成了看门狗的功能。但是目前看门

2022-12-22 16:58:20

stm32看门狗的特点是什么

stm32有两个看门狗,独立看门狗和窗口看门狗,其实两者的功能是类似的,

2021-07-22 11:08:33

STM32芯片如何使用片内参考电压实现模拟看门狗

STM32芯片的ADC模块往往都支持模拟看门狗功能,即可以对单个或多个通道开启模拟转换值的监测。当模拟通道ADC值超出设定的阈值时可以产生模拟看门狗

2020-08-29 16:16:30

基于STM32、FreeRTOS 实现硬件看门狗+软件看门狗监测多任务的方法

基于STM32、FreeRTOS实现硬件看门狗+软件看门狗监测多任务的方法

2020-03-12 10:11:44

7天热门专题 换一换
相关标签