STM32L051使用HAL库操作实例(7)-(WWDG)窗口看门狗实验

本文深入解析STM32窗口看门狗的工作原理,包括其在软件故障监测中的应用,以及如何在STM32CubeMX中进行配置。通过实例演示了窗口看门狗的初始化、喂狗操作及中断回调函数的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、看门狗介绍

  • 窗口看门狗(WWDG)也是程序中用的比较多的,通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。
  • 窗口看门狗相对独立看门狗对计数器的刷新时间要求更加严格。必须在限定的时间窗口内刷新计数器。。

窗口看门狗(WWDG)激活后,满足以下条件会产生复位。
1.递减计数器的值小于0x40时(即从0x40滚到0x3F)会产生复位。
2.计数器值大于窗口寄存器的值时,如果软件重载计数器,则会产生复位。
3.从上面的时序图中可以看到,如果递减计数器的值(T[6:0])大于窗口寄存器(W[6:0])的值,重载计数器会产生复位。当递减计时器的值小于0x40时,也会产生复位。所以只能在W[6:0] ~ 0x3F之间刷新,在窗口之外重载递减计数器时复位。存储在窗口寄存器(WWDG_CR)中的值必须介于0xFF和0xC0之间。开启窗口看门狗中断时,当递减计数器的值等于0x40时触发中断

二、STM32CubeMX配置(本文使用的STM32CubeMX版本为5.6.0)
思路:每进入喂狗一次,串口打印输出一次喂狗成功
1.MCU选型
本例程使用的为STM32L051C8T6型号
2.使能时钟

3.设置GPIO口

4.开启独立看门狗
①配置状态

计算方式如下:


窗口看门狗定时器基于APB1频率,这里的频率为32MHZ,如定义65ms周期的窗口看门狗定时器计算方式如下:
最小允许刷新时间
t(ms)= 1÷(32000÷4096÷8)*(127-64)= 64.512ms
最晚刷新时间
t(ms)= 1÷(32000÷4096÷8)*(127-63)= 65.536ms
也就是程序不得早于64.512ms进行刷新,不得晚于65.536ms进行刷新。否则系统将会产生复位

②串口打印部分的配置可参看前面的文章(4)串口实验配置

5.配置STM32CubeMX生成工程文件


6.点击GENERATE CODE生成工程文件

二、KEIL程序
1.相关函数:

独立看门狗初始化函数,此函数初始化了在STM32CubeMX内设置的参数,系统已经处理好了,并已经添加在了main函数内;

MX_WWDG_Init();  //窗口看门狗初始化
void MX_WWDG_Init(void)
{

  hwwdg.Instance = WWDG;
  hwwdg.Init.Prescaler = WWDG_PRESCALER_8;
  hwwdg.Init.Window = 64;
  hwwdg.Init.Counter = 64;
  hwwdg.Init.EWIMode = WWDG_EWI_DISABLE;
  if (HAL_WWDG_Init(&hwwdg) != HAL_OK)
  {
    Error_Handler();
  }

}

喂狗调用函数,这个需要我们自行添加到main函数的while内;

HAL_WWDG_Refresh(hwwdg);

本例程采用EWI功能函数HAL_WWDG_EarlyWakeupCallback()。这个中断函数在当向下计数器记到0X40时将会生效(产生复位0x3F的上一个状态),我们在此函数中进行喂狗即可。

void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef* hwwdg)
{
	HAL_WWDG_Refresh(hwwdg);
	printf("\n\r 喂狗成功 !!!\n\r");
}

2.编译文件,下载。即可,实现效果如下:

源工程文件代码下载:https://download.youkuaiyun.com/download/cheng_nnan/12334215

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值