STM32WWDG窗口看门狗基本运用

简介

基本知识

窗口看门狗有一个递减计数器和一个软件重载计数器,当递减计数器小于一定值时看门狗会复位。那么如何阻止看门狗复位呢?我们可以使用函数让看门狗重新计数,也就是“喂狗”。那么软件重载计数器起什么作用呢?首先,我们要明白,它和递减计数器的不同在于它会在大于一定值时产生复位,这个一定值也我们俗称“看门狗遗嘱”。

过程梳理

现在我们来梳理一遍看门狗的运行过程。

1.喂狗成功

程序开始运行,计数器开始减小,减小到数值大于递减计数器的最小值且小于软件重载计数器的看门狗遗嘱,这时候使用喂狗函数,喂狗成功,这时候计数器重新递减,进入新的循环。

2.喂狗失败,狗饿死,看门狗重生(复位)

程序开始运行,计数器开始减小,减小到数值小于递减计数器的最小值,时间已经大于看门狗生存的周期,看门狗饿死,看门狗复位,进入复位中断,执行中断回调函数里的代码(中断有时间限制,有可能无法运行完回调函数里的代码,这时候可以再喂一次狗延长时间),最后整个程序复位重新运行。

3.喂狗过快,狗撑死

计数器开始减小,减小到数值大于于软件重载计数器的看门狗遗嘱时进行喂狗,看门狗撑死复位,这里没有复位中断。

cubemx配置

HSE一直选择第三个

STM32WWDG窗口看门狗基本运用_第1张图片

Debug选择Serial Wire 

STM32WWDG窗口看门狗基本运用_第2张图片 

 勾选WWDG,并配置参数,使能看门狗复位中断

STM32WWDG窗口看门狗基本运用_第3张图片

 

STM32WWDG窗口看门狗基本运用_第4张图片

 USART1选择异步模式

STM32WWDG窗口看门狗基本运用_第5张图片

 配置时钟STM32WWDG窗口看门狗基本运用_第6张图片

 第四步以后再按下Enter健

管理工程

 STM32WWDG窗口看门狗基本运用_第7张图片

 STM32WWDG窗口看门狗基本运用_第8张图片

 函数介绍

喂狗函数:喂狗成功则返回HAL_OK,常用于喂狗和判断是否喂狗成功

HAL_WWDG_Refresh(&hwwdg)

 判断复位是由外部引起还是看门狗引起,看门狗复位则返回RESET

__HAL_RCC_GET_FLAG (RCC_FLAG_WWDGRST )

代码部分

keil设置

STM32WWDG窗口看门狗基本运用_第9张图片

 1.选择V6以上版本编译更快,V5也行。

2.勾选微库,才能用USART串口发送信息

包含头文件 

#include "stdio.h" 

才能使用打印函数

判断复位原因

STM32WWDG窗口看门狗基本运用_第10张图片

if(__HAL_RCC_GET_FLAG (RCC_FLAG_WWDGRST )!=RESET )
  {
printf("\n\r 看门狗复位 !!!\n\r");
	  __HAL_RCC_CLEAR_RESET_FLAGS ();
  }
  else 
	  printf("外部复位");

等待一段时间并喂狗

STM32WWDG窗口看门狗基本运用_第11张图片

	  HAL_Delay(350);
if(HAL_WWDG_Refresh(&hwwdg)!=HAL_OK )
{
	Error_Handler ();
}
 else
printf("\n\r 喂狗 !!!\n\r");

等待时间可以更改,可以通过更改来观察看门狗饿死撑死和喂狗成功的情况。

重定义fputc和fgetc函数

STM32WWDG窗口看门狗基本运用_第12张图片

 

int fputc(int ch, FILE *f)
{
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
  return ch;
}
int fgetc(FILE *f)
{  uint8_t ch = 0;
  HAL_UART_Receive(&huart1, &ch, 1, 0xffff);
 return ch;
}

 设置中断回调函数

STM32WWDG窗口看门狗基本运用_第13张图片

 

void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg)
{
	if(HAL_WWDG_Refresh(hwwdg)!=HAL_OK )
{
	Error_Handler ();
}
 else
printf("\n\r 最后一次喂狗 !!!\n\r");
printf ("123456789123456789123456789123456789");
}

在这里我们又喂了一次狗,来确保后面的一大串数字有充分时间发送,大家可以试试去掉喂狗,看看能发送多少个字节的数据。

你可能感兴趣的:(stm32,单片机,arm)