首页 > 其他分享 >窗口门狗(WWDG)

窗口门狗(WWDG)

时间:2023-01-10 18:58:22浏览次数:43  
标签:HAL 函数 门狗 看门狗 WWDG GPIO 窗口

1 定义:

窗口看门狗 WWDG 其实和独立看门狗类似似,它是一个 7 位递减计数器不断的往下递减计数,当减到一个固定值 0X40 时还不喂狗的话,产生一个 MCU 复位,这个值叫窗口的下限,是固定的值,不能改变。

窗口看门狗的计数器是一个7位的递减计数器,当7个位全为1时是0x7F,这个是最大值。当从0x40变为0x3F时,会产生看门狗复位。这个值0x40是看门狗能够递减到的最小值,所以计数器的值只能是:0x40 ~ 0x7F之间。

 

 T[6:0] 就是窗口看门狗的计数器,而 W[6:0]则是窗口看门狗的上窗口,下窗口值是固定的(0X40),喂狗时间为上窗口和下窗口之间才能喂狗。
 窗口看门狗的超时公式如下:
Twwdg=(4096×2^WDGTB×(T[5:0]+1)) /Fpclk1;
其中:
  • Twwdg:WWDG 超时时间(单位为 ms)
  • Fpclk1:APB1 的时钟频率(单位为 Khz)
  • WDGTB:WWDG 的预分频系数
  • T[5:0]:窗口看门狗的计数器低 6 位

2 CUBMAX设置

3 函数

窗口看门狗中断服务函数为:

void WWDG_IRQHandler(void);

在 HAL 库中,喂狗函数为:

HAL_StatusTypeDef HAL_WWDG_Refresh(WWDG_HandleTypeDef *hwwdg)

窗口看门狗唤醒中断处理回调函数:

void HAL_WWDG_EarlyWakeupCallback (WWDG_HandleTypeDef* hwwdg);
跟串口和外部中断一样,首先,HAL 库定义了一个中断处理共用函数 HAL_WWDG_IRQHandler,在 WWDG 中断服务函数中会调用该函数。
同时该函数内部, 会经过一系列判断,最后调用回调函数 HAL_WWDG_WakeupCallback,所以提前唤醒中断逻辑 我们一般些在回调函数 HAL_WWDG_WakeupCallback 中。

4 代码

main.c

/* USER CODE BEGIN 0 */
//中断服务函数处理过程
//此函数会被 HAL_WWDG_IRQHandler()调用
void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef* hwwdg)
{
 HAL_WWDG_Refresh(hwwdg);//更新窗口看门狗值
 HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_5); 
}
/* USER CODE END 0 */
  /* USER CODE BEGIN 2 */
     HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET); //点亮 LED0
     HAL_Delay(300); //延时 300ms 再初始化看门狗,LED0 的变化"可见
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
     HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET);   //熄灭 LED 灯
    /* USER CODE BEGIN 3 */
  }

将代码下载到精英 STM32 开发板后,可以看到 DS0 亮一下之后熄灭,紧接着 DS1 开始不停的闪烁。

 

标签:HAL,函数,门狗,看门狗,WWDG,GPIO,窗口
From: https://www.cnblogs.com/CC-C/p/17040651.html

相关文章