首页 > 其他分享 >STM32的窗口看门狗详解及案例(基于HAL库)

STM32的窗口看门狗详解及案例(基于HAL库)

时间:2024-09-04 14:26:39浏览次数:12  
标签:窗口 系统 看门狗 STM32 喂狗 WWDG HAL

目录

一、引言

二、窗口看门狗的工作原理

1.基本概念

2.功能描述

3.窗口值和计数器初始值

三、STM32F429 HAL 库中窗口看门狗的配置步骤

1.开启时钟

2.初始化窗口看门狗 

3.开启早期唤醒中断

4.喂狗操作 

四、窗口看门狗的应用场景 

1.防止软件死锁

2.检测外部干扰

3.提高系统可靠性

五、注意事项

1.时间窗口的设置

2.喂狗操作的时机

3.早期唤醒中断的处理

六、总结


一、引言

        在嵌入式系统开发中,确保系统的稳定性和可靠性至关重要。STM32 系列微控制器提供了多种功能来实现这一目标,其中窗口看门狗(WWDG)是一种有效的手段,可以在系统出现异常时及时复位系统,防止系统崩溃。本文将详细介绍 STM32 窗口看门狗的工作原理,并结合 STM32F429 和 HAL 库给出一个具体的案例。

二、窗口看门狗的工作原理

1.基本概念

  • 窗口看门狗是一种定时器,用于监测系统的运行状态。它通过在特定的时间窗口内检查系统的喂狗操作来判断系统是否正常运行。
  • 与独立看门狗不同,窗口看门狗具有一个时间窗口,只有在这个时间窗口内进行喂狗操作才是有效的。如果在窗口之外进行喂狗操作,或者在规定的时间内没有进行喂狗操作,窗口看门狗将触发系统复位。

2.功能描述

如果看门狗被启动(WWDG_CR寄存器中的WDGA位被置’1’), 并且当7位(T[6:0])递减计数器从
0x40翻转到0x3F(T6位清零)时,则产生一个复位。如果软件在计数器值大于窗口寄存器中的数
值时重新装载计数器,将产生一个复位。

3.窗口值和计数器初始值

计数器初始值确定了窗口看门狗开始递减计数的起点。

窗口值是最早可以喂狗不导致复位的值。

窗口值必须设置0x40以上的值,因为计数器低于0x40以后就会自动复位,所以窗口值设置小于0x40的话没有意义。

窗口看门狗的下窗口值为0X40,上窗口值为我们设置的窗口值,只有喂狗的时候,计数器的递减值处于上窗口值与下窗口值之间时,才不会导致复位。

例如我们设置计数器初始值为0x7F,然后设置窗口值为0x5F,在喂狗的时候,计数器的值应处于0X40到0X5F之间的时候,才不会导致复位。如下图所示:

 

 

三、STM32F429 HAL 库中窗口看门狗的配置步骤

1.开启时钟

在使用窗口看门狗之前,需要先开启相关的时钟。在 STM32F429 中,可以通过以下代码开启窗口看门狗时钟:

__HAL_RCC_WWDG_CLK_ENABLE();

2.初始化窗口看门狗 

使用 HAL 库提供的函数HAL_WWDG_Init()来初始化窗口看门狗。这个函数需要一个WWDG_HandleTypeDef类型的结构体指针作为参数,该结构体包含了窗口看门狗的配置信息。

以下是一个初始化窗口看门狗的示例代码:

WWDG_HandleTypeDef hwwdg;

hwwdg.Instance = WWDG;
hwwdg.Init.Prescaler = WWDG_PRESCALER_8;
hwwdg.Init.Window = 0x5F;
hwwdg.Init.Counter = 0x7F;
hwwdg.Init.EWIMode = WWDG_EWI_ENABLE;

HAL_WWDG_Init(&hwwdg);

在这个例子中,设置了窗口看门狗的预分频系数为 8,窗口值为 0x5F,计数器初始值为 0x7F,并启用了早期唤醒中断(EWI)模式。

(3)窗口看门狗计算公式 

Twwdg=(4096×2^WDGTB×(T[5:0]+1)) /Fpclk1;

Twwdg:WWDG 超时时间(单位为 ms)
Fpclk1:APB1 的时钟频率(单位为 Khz)
WDGTB:WWDG 的预分频系数
T[5:0]:窗口看门狗的计数器低 6 位

由STM32F429为例,时钟源为Fpclk1=45Mhz,分频系数8,4096*8/45000000=0.072818,一个时钟周期就是728.18 us,从0X7F到0X5F需要用32个时钟周期,728.18*32=23.3ms,从0X7F到0X3F需要64个时钟周期,728.18*64=46.6ms,所以喂狗最早需要间隔23.3ms,最大间隔为46.6ms,小于23.3ms或者大于46.6ms喂狗都会导致系统复位

3.开启早期唤醒中断

如果启用了早期唤醒中断模式,可以通过以下代码开启早期唤醒中断:

HAL_NVIC_SetPriority(WWDG_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(WWDG_IRQn);

4.喂狗操作 

在系统正常运行时,需要在规定的时间窗口内对窗口看门狗进行喂狗操作。可以使用HAL_WWDG_Refresh()函数来进行喂狗操作。

以下是一个在主循环中进行喂狗操作的示例代码:

while (1) {
    HAL_WWDG_Refresh(&hwwdg);
    // 其他代码
}

四、窗口看门狗的应用场景 

1.防止软件死锁

在复杂的嵌入式系统中,软件可能会出现死锁的情况,导致系统无法正常运行。使用窗口看门狗可以在一定时间内监测系统的运行状态,如果系统出现死锁,窗口看门狗将触发系统复位,从而恢复系统的正常运行。

2.检测外部干扰

外部干扰可能会导致系统出现异常,如程序跑飞、数据错误等。使用窗口看门狗可以在一定时间内监测系统的运行状态,如果系统受到外部干扰,窗口看门狗将触发系统复位,从而避免系统出现严重故障。

3.提高系统可靠性

在一些对可靠性要求较高的应用场景中,如工业控制、医疗设备等,使用窗口看门狗可以提高系统的可靠性,确保系统在出现故障时能够及时恢复正常运行。

五、注意事项

1.时间窗口的设置

时间窗口的设置需要根据系统的实际情况进行调整。如果时间窗口设置得过大,可能会导致系统在出现故障时无法及时复位;如果时间窗口设置得过小,可能会导致系统在正常运行时误触发复位。

2.喂狗操作的时机

喂狗操作需要在规定的时间窗口内进行,否则窗口看门狗将触发系统复位。因此,在进行喂狗操作时,需要确保系统的运行状态正常,并且不会因为其他操作而影响喂狗操作的时机。

3.早期唤醒中断的处理

如果启用了早期唤醒中断,需要在中断服务函数中进行相应的处理。中断服务函数的执行时间应该尽可能短,以避免影响系统的正常运行。

六、总结

        STM32 窗口看门狗是一种非常有效的保障系统稳定性和可靠性的手段。通过合理配置窗口看门狗,可以在系统出现故障时及时复位系统,避免系统出现严重故障。在实际应用中,需要根据系统的实际情况合理设置时间窗口和喂狗操作的时机,以确保窗口看门狗能够正常工作。同时,还需要注意早期唤醒中断的处理,以避免影响系统的正常运行。

 

标签:窗口,系统,看门狗,STM32,喂狗,WWDG,HAL
From: https://blog.csdn.net/qq_38072731/article/details/141886731

相关文章

  • 详细AS32 TTL-100/-C LoRa模块配置及stm32+as32 ttl-100代码测试(总结了坑点)
    1.相关工具准备AS32TTL-100/C  泽耀官网卖的usb或者普通usb转ttl 上位机及串口调试助手,下载链接(官方资料)https://pan.baidu.com/s/14l6000nr3SR8pzBdyclYfg提取码:2580    也可去官网下泽耀科技(ashining.com)2.摘要(遇到坑点) ①MD0与MD1必须接,不能留空。A......
  • STM32:STM32串行通信:STM32串行通信基础理论
    STM32:STM32串行通信:STM32串行通信基础理论串行通信概述串行通信的基本概念串行通信是一种数据传输方式,其中数据位被逐个按顺序传输,通常通过一条信号线完成。与并行通信相比,串行通信使用较少的线路,因此在长距离通信和减少硬件成本方面具有优势。在串行通信中,数据通常以帧......
  • STM32低功耗设计:STM32低功耗通信接口设计
    STM32低功耗设计:STM32低功耗通信接口设计STM32低功耗设计概述低功耗设计的重要性在当今的电子设备设计中,低功耗设计变得日益重要,尤其是在移动设备、可穿戴设备、物联网(IoT)设备以及任何需要长时间运行而无需频繁充电或更换电池的应用中。低功耗设计不仅可以延长设备的......
  • STM32:STM32低功耗设计:低功耗设计的未来趋势与STM32新特性
    STM32:STM32低功耗设计:低功耗设计的未来趋势与STM32新特性STM32低功耗设计基础低功耗设计的重要性在当今的电子设备中,低功耗设计变得日益重要,尤其是在移动设备、物联网(IoT)设备和可穿戴技术中。低功耗设计不仅能够延长设备的电池寿命,减少充电频率,提高用户体验,还能降低设......
  • Datawhale X 李宏毅苹果书AI夏令营 Task3打卡
    3.7批量归一化批量归一化的核心思想在于把误差函数图像的“山铲平”,在某些误差表面上不同参数方向的变化率可能差别很大,此时在损失函数上找到临界点会比较困难比如对一个简单的线性函数\(y=\sigma(w_1\timesx_1+w_2\timesx_2+b)\)来说,我们考虑对于参数\(w_1,w_2\)来说,......
  • 第二天学习笔记:Datawhale X 李宏毅苹果书 AI夏令营
    今天学的有些小兴奋,终于解锁了很多熟悉但不明就里的术语。天呢,原来ReLU是“修正线性单元”的意思!RectifiedLinearUnit!但是呢,也有不大对付的地方:好几个地方前言不搭后语。容我一一道来。今天就顺序边读边记:线性模型(linearmodel)==把模型输入的特征x乘上一个权重,再加......
  • 第一篇献给Datawhale
    写今天的学习笔记之前,我要好好表达对Datawhale的感谢。记不清这是第几次跟着组织学习了。虽然也只是从懵懂小白0.1到萌萌小白0.2,虽然很多词汇还都不懂,但没有Datawhale的学习氛围和小伙伴的积极表现,我的这一点点进步也可能不会有。正文开始:各种词汇定义:模型(model)== 带有未......
  • 2、实践方法论(Datawhale X 李宏毅苹果书 AI 夏令营)
    2、实践方法论(DatawhaleX李宏毅苹果书AI夏令营)在应用机器学习算法时,实践方法论能够帮助我们更好地训练模型。如果在Kaggle上的结果不太好,虽然Kaggle上呈现的是测试数据的结果,但要先检查训练数据的损失。2.1模型偏差有时候把模型设置的太过简单,使得函数的集合太小了,没......
  • Datawhale X 李宏毅苹果书 AI夏令营-深度学习入门班-task3-机器学习实践方法论
    引入在简单了解到机器学习的过程,以及模型函数的优化升级之后,我们需要根据一些方法论,解决模型实践过程中会遇到的问题,学会分析模型数据,按照正确的路径优化模型,减少测试误差(TestingLoss)。实践方法论整体框架下图是实践方法论的整体框架,下文会根据逻辑顺序一一介绍。step......
  • Datawhale X 李宏毅苹果书 AI夏令营 Task3-机器学习实践方法论
    在上一章介绍完机器学习模型后,我们接着讨论模型中可能存在的一些问题。首先我们需要明确一件事,就是Kaggle上的测试结果不好,可能有多个原因。第一,如果模型在运行训练模型时,所产生的损失就很大,那么有可能是模型偏差(modelbias)或优化(optimization)问题。第二,如果模型在运行训......