正点原子STM32cubeide学习——窗口看门狗

使用的是正点原子的精英版,单片机STM32F103ZET6,目的:验证是否在窗口期喂狗,可不执行复位。预设:计数器值为0x7F,窗口值为0x5F,预分频系数为8

窗口看门狗的原理

窗口看门狗:本质也是个递减的计数器,并且它能产生系统复位信号和提前唤醒中断。

 

窗口看门狗的特点
当递减计数器值从 0x40减到0x3F时复位(即T6位跳变到0);
计数器的值大于W[6:0]值时喂狗会复位;
当递减计数器等于 0x40 时可产生提前唤醒中断(EWI);
在窗口期内重装载计数器的值(喂狗),防止复位;


作用:用于监测单片机程序运行时效是否精准,主要检测软件异常 。

下面是窗口看门狗超时时间的计算公式

 

 IWDG和WWDG的主要区别

 

接下来是实战的讲解部分 ,公式部分为求得窗口时间

Tout={4096*预分频系数8*[(0x7F-0x5F)十六进制结果为20转化为十进制是32]}/36KHZ

29.13={4096*8*[32]}/36000000

 

确定好各值之后,复制上节课代码 ,打开图形化配置 ,按照图片进行配置,然后生成代码即可 

先把独立看门狗勾掉,选择窗口看门狗按照图中配置生成代码即可

 

 


/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "usart.h"
#include "wwdg.h"
#include "gpio.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "led.h"
/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */

/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */
	uint8_t revbuf[6];//定义接受变量6个字节
/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  MX_WWDG_Init();
  /* USER CODE BEGIN 2 */
  if(__HAL_RCC_GET_FLAG(RCC_FLAG_WWDGRST) != RESET)//判断是否是窗口看门狗导致复位
  {
	  printf("窗口看门狗复位!! \r\n");
	  __HAL_RCC_CLEAR_RESET_FLAGS();//清除复位标志位
  }
  else
  {
	  printf("其他复位!! \r\n");
  }
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	  HAL_Delay(40);//为防止复位,需在此时间段内喂狗:58.25>喂狗时间>29.13
	  HAL_WWDG_Refresh(&hwwdg);//喂狗
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

在此时间段内喂狗:58.25>喂狗时间>29.13,将代码下载进去之后,按着板子上的复位按键,打开串口,然后松开复位按键,串口会显示其他复位说明在窗口期间喂狗正常没有产生复位 。

 如果在此时间段:58.25>喂狗时间>29.13之外喂狗的话就会显示窗口看门狗复位,因为没有在此时间内喂狗。

 

即可完成验证是否在窗口期喂狗,可不执行复位。预设:计数器值为0x7F,窗口值为0x5F,预分频系数为8。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值