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

STM32中独立看门狗(IWDG)与窗口看门狗(WWDG)设计及时间计算

文章目录

      • STM32中独立看门狗(IWDG)与窗口看门狗(WWDG)设计及时间计算
      • 一、独立看门狗(IWDG)
        • 1.1 IWDG 原理
        • 1.2 IWDG 时间计算公式
        • 1.3 IWDG 配置案例
      • 二、窗口看门狗(WWDG)
        • 2.1 WWDG 原理
        • 2.2 WWDG 时间计算公式
        • 2.3 WWDG 配置案例
      • 三、总结


STM32中独立看门狗(IWDG)与窗口看门狗(WWDG)设计及时间计算

在嵌入式系统设计中,看门狗是一种用于防止系统死机的保护机制,能够在系统发生故障时自动复位。STM32 系列单片机提供了两种看门狗机制:独立看门狗(Independent Watchdog, IWDG)和窗口看门狗(Window Watchdog, WWDG)。本文将详细介绍这两种看门狗的原理、计时设计及相关计算公式,并结合具体案例说明如何进行配置。

一、独立看门狗(IWDG)

1.1 IWDG 原理

独立看门狗(IWDG)是一个基于低速内部时钟(LSI)的看门狗计时器,通常用于要求较高安全性的应用场合。IWDG 不受系统时钟影响,具有独立的时钟源,通常为 32 kHz。它可以在系统出现软件故障时通过自动复位来重启系统,从而保证系统稳定运行。

1.2 IWDG 时间计算公式

IWDG 的计时由预分频器(Prescaler)和重载寄存器(Reload Register)的值决定:

  • 预分频器(Prescaler):可以设置为 4、8、16、32、64、128 或 256。
  • 重载寄存器(Reload Register):值范围为 0 到 0xFFF(4095)。

其超时时间的计算公式为:

[
T_{timeout} = \frac{(Reload + 1) \times Prescaler}{LSI_frequency}
]

其中:

  • ( Reload ) 为重载寄存器的值(0 到 4095)。
  • ( Prescaler ) 为预分频器的值,可选范围是 4 到 256。
  • ( LSI_frequency ) 是低速内部时钟的频率,通常为 32 kHz。
1.3 IWDG 配置案例

假设设备需要每 4 秒喂狗一次,否则系统将复位。LSI 时钟频率为 32 kHz。

配置步骤:

  1. 选择预分频器(Prescaler)
    可选的预分频器值为 4、8、16、32、64、128 或 256。为了满足约 4 秒的超时时间,我们选择预分频器为 64。

  2. 计算重载值(Reload)
    根据公式:

    [
    4 = \frac{(Reload + 1) \times 64}{32000}
    ]

    解得:

    [
    Reload + 1 = \frac{4 \times 32000}{64} = 2000
    ]

    因此:

    [
    Reload = 1999
    ]

总结:
通过选择预分频器为 64,重载寄存器值设为 1999,独立看门狗的超时时间将接近 4 秒。如果在 4 秒内没有重置 IWDG,系统将复位。

二、窗口看门狗(WWDG)

2.1 WWDG 原理

窗口看门狗(WWDG)是一种基于高速外部时钟(通常为主系统时钟)计时的看门狗计时器。WWDG 通过设置一个允许喂狗的时间窗口,当系统在该窗口之外进行喂狗操作时,将触发复位。因此,WWDG 适用于对喂狗时机有严格要求的场合。

2.2 WWDG 时间计算公式

WWDG 的时间计算涉及计数器初始值、窗口值和预分频器:

  • 计数器(Counter):初始值设置在 0x40 到 0x7F 之间。
  • 窗口值(Window Value):设置允许喂狗的时间窗口,范围为 0x40 到 0x7F。
  • 预分频器(Prescaler):分频因子可为 1、2、4 或 8。

超时时间计算公式为:

[
T_{timeout} = \frac{(Counter - 0x40) \times Prescaler}{Clock_frequency}
]

其中:

  • ( Counter ) 为计数器的初始值(0x40 到 0x7F)。
  • ( Prescaler ) 为预分频器的值(1、2、4 或 8)。
  • ( Clock_frequency ) 为看门狗使用的时钟频率(通常为分频后的系统时钟)。
2.3 WWDG 配置案例

假设要求设备在 200 毫秒到 400 毫秒之间喂狗,否则系统复位。系统时钟频率为 8 MHz。

配置步骤:

  1. 选择预分频器(Prescaler)
    我们选择预分频器为 8,以降低计数器递减的速度。

  2. 设置计数器初始值(Counter)
    设置计数器初始值为 0x7F(十进制 127)。

  3. 设置窗口值(Window Value)
    为满足 200 毫秒到 400 毫秒之间喂狗的需求,选择窗口值为 0x50(十进制 80)。

  4. 计算最小和最大超时时间

    • 最小超时时间(对应窗口值 0x50):

      [
      T_{min} = \frac{(0x50 - 0x40) \times 8}{8000000} = \frac{16 \times 8}{8000000} = 16 \text{毫秒}
      ]

    • 最大超时时间(对应计数器初始值 0x7F):

      [
      T_{max} = \frac{(0x7F - 0x40) \times 8}{8000000} = \frac{63 \times 8}{8000000} = 504 \text{毫秒}
      ]

总结:
设置计数器初始值为 0x7F,窗口值为 0x50,预分频器为 8,可确保喂狗操作的时间窗口在约 16 毫秒到 504 毫秒之间,即满足了 200 到 400 毫秒的要求。

三、总结

STM32 中的独立看门狗(IWDG)和窗口看门狗(WWDG)各自适用于不同的场合:

  • IWDG 具有独立时钟源(LSI),适用于对系统安全性要求较高的应用场合。其超时时间取决于重载寄存器和预分频器的配置。
  • WWDG 通过窗口机制对喂狗的时间范围进行限制,适用于要求喂狗时机较为精确的应用。其时间计算涉及计数器、窗口值和预分频器的设置。

通过合理设置看门狗的参数,可以达到对系统故障进行有效监控的目的,确保嵌入式系统的稳定和安全运行。


http://www.kler.cn/a/374605.html

相关文章:

  • “游戏信息化”:游戏后台系统的未来发展
  • OpenCV相机标定与3D重建(35)计算两幅图像之间本质矩阵(Essential Matrix)的函数findEssentialMat()的使用
  • Docker Run使用方法及参数详细说明
  • 如何从 0 到 1 ,打造全新一代分布式数据架构
  • LabVIEW软件项目设计方案如何制定
  • 解决 vue3 中 echarts图表在el-dialog中显示问题
  • 2024年大湾区杯粤港澳金融数学建模B题超详细解题代码+数据集分享+问题一代码分享
  • AI做怀旧视频,自媒体轻松涨粉变现1w+!
  • qt QCheckBox详解
  • 数据结构分类
  • 合理利用IPIDEA代理IP,优化数据采集效率!
  • 掌握DFMEA,让潜在设计缺陷无处遁形!
  • 单细胞数据分析(二):harmony算法整合数据
  • 使用 phpOffice\PhpSpreadsheet 做导出功能
  • idea使用Translation插件实现翻译
  • 学习路之TP6--workman安装
  • 简单的kafkaredis学习之redis
  • vue项目中如何在路由变化时增加一个进度条
  • 基于SSM+小程序的宿舍管理系统(宿舍1)
  • 深度学习基础—循环神经网络(RNN)
  • spring中bean的四种创建方式
  • 单向数据流在 React 中的作用
  • docker engine stopped
  • 【力扣 + 牛客 | SQL题 | 每日5题】牛客SQL热题204,201,215
  • 医疗器械设备语音ic芯片方案-选型大全
  • 基于vue、VantUI、django的程序设计