窗口看门狗WWDG

19 窗口看门狗 (WWDG)
除非特别说明,否则本部分适用于整个 STM32F4xx 系列。
19.1 WWDG 简介
窗口看门狗通常被用来监测,由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在 T6 位变成 0 前被刷新,看门狗电路在 达到预置的时间周期时,会产生一个 MCU 复位。如果在递减计数器达到窗口寄存器值之前 刷新控制寄存器中的 7 位递减计数器值,也会产生 MCU 复位。这意味着必须在限定的时间 窗口内刷新计数器。
19.2 WWDG 主要特性
● 可编程的自由运行递减计数器
● 复位条件
— 当递减计数器值小于 0x40 时复位(如果看门狗已激活)
— 在窗口之外重载递减计数器时复位(如果看门狗已激活)(请参见图 200) ● 提前唤醒中断 (EWI):当递减计数器等于 0x40 时触发(如果已使能且看门狗已激活)
![在这里插入图片描述](https://img-blog.csdnimg.cn/f1fe4284a5c04cfc94410d450725e60c.png

由下图得知WWDG挂在APB1总线上,最大时钟频率42MHZ
在这里插入图片描述
看门狗使用的时候要慎重,因为在正常情况下使用,会导致之前的数据没有保存而复位mcu。
在这里插入图片描述
外设总线时钟频率并不直接驱动看门狗,看下图:
在这里插入图片描述
经过了WWDG内部预分频器的分频之后,驱动WWDG内部递减计数器计数。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
0-6bit:窗口值,在窗口值之下,大于0x40之间可以喂狗
窗口值之上,重载值之下不能喂狗,喂狗就复位mcu(使能看门狗的情况下)

  while (1)
  {

  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
		curent_value = WWDG->CR;
		if(curent_value < window_value)
		{
			/*喂狗*/
			HAL_WWDG_Refresh(&hwwdg);
		}
		
		
		

  }
  /* USER CODE END 3 */

}
来了个按键中断,延时等待看门狗早期中断唤醒
/* USER CODE BEGIN 2 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin == GPIO_PIN_0)
	{
		/*消除抖动*/
		HAL_Delay(10);
		/*确认按键按下*/
		if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == GPIO_PIN_RESET)
		{
			printf("系统崩溃\n");
			/*点亮LED4*/
			HAL_GPIO_WritePin(GPIOE,GPIO_PIN_2,GPIO_PIN_RESET);
			HAL_Delay(3000);
		}
		
		
	}
}
早期中断函数入口
/* USER CODE BEGIN 1 */
void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef* hwwdg)
{
	if(hwwdg->Instance == WWDG)
	{
		printf("早期唤醒中断进入\n");
		HAL_GPIO_WritePin(GPIOE,GPIO_PIN_2,GPIO_PIN_SET);
		printf("早期唤醒中断退出\n");
	}
}
/* USER CODE END 1 */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值