WWDG超出时间计算和WWDG中断

1、WWDG超出时间计算

1.1 、WWDG的示意图

相比于独立看门狗,窗口看门狗(WWDG)是一个既能产生系统复位信号和提前唤醒中断的六位递减计数器。

  (1)复位的条件: 1.当递减计数器值从0x40递减到0x3F时复位(即T6位跳变到0)

           2. 计数器的值大于W[6:0]值时喂狗会复位。

  (2)中断的条件: 1.当递减计数器等于0x40时可产生提前唤醒中断 (EWI)。

  (3)喂狗条件 : 需要在窗口期(0x3F<窗口期< W[6:0])重装载计数器的值,才能防止复位。

1.2、 WWDG的cubemx的相关配置

其中

WWDG counter clock prescaler:预分频系数

WWDG window value:窗口上限值

WWDG free-running downcounter value :重装载计数值(计数器初始值)

Early wakeup interrupt :早期唤醒中断,在看门狗全局中断打开的基础上,开启后当计数器到达0x40时会进入早期唤醒回调函数(即中断函数),可以在早期唤醒中断回调函数中进行喂狗或者函数操作

1.3、WWDG的超出时间计算

例子:系统时钟频率:42KHZ

        固定预分频系数:4096

        设置预分频系数:8

        T[6:0]:0x7F(127)

        W[6:0]:0x60(96)

计一个数的频率:PCLK1/8/4096 = 42KHZ/8/4096 = 1281Hz;

T[6:0]~W[6:0]所需时间:(0x7F-0x60)/ 1281 = (127-96)/1281=24.199ms;

W[6:0]~0x40所需时间:(0x60-0x3F)/ 1281= (96-63)/1281 = 25.76ms;

按照上述方法可算出窗口时间计数值到窗口上限的时间,WWDG只能在窗口期喂狗,在窗口期之前0x3f之后喂狗都会产生复位

2、WWDG中断

WWDG中断:需要配置stm32cubemx中的Early wakeup interrupt 

Early wakeup interrupt :早期唤醒中断,在看门狗全局中断打开的基础上,开启后当计数器到达0x40时会进入早期唤醒回调函数,可以在早期唤醒中断回调函数中进行喂狗或者函数操作。

在计数器自减到0x40的过程中,始终都没有喂狗,当到0x40(64)的时候会触发中断,进入中断在中断函数的回调函数中我们可以实现----喂狗/其他函数操作。

中断函数如下(stm32f4xx_hal_wwdg.c中):

__weak void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg)
{
  /* Prevent unused argument(s) compilation warning */
  UNUSED(hwwdg);

  /* NOTE: This function should not be modified, when the callback is needed,
           the HAL_WWDG_EarlyWakeupCallback could be implemented in the user file
   */
}

可以看出前面有__weak,即虚函数,我们可以复制此函数到main.c中,自己去编写回调函数的逻辑(记得需要将前面的__weak去掉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值