STM32 通过读取看门狗溢出标志检测程序是否发生复位

通过 __HAL_RCC_GET_FLAG 函数,读取看门狗溢出标志检测程序是否发生复位,

一、__HAL_RCC_GET_FLAG 函数

  HAL库的 __HAL_RCC_GET_FLAG 函数可以获取到程序是否发生过看门狗复位,通常我们可以用该标志位监测我们的程序是否正常运行,需要的是调用该库函数后会清除复位标志,用法如下:

if(__HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST)!=RESET)
{
	printf("Prograss Error,Please Check!\r\n");
	__HAL_RCC_CLEAR_RESET_FLAGS();
}
#define RCC_FLAG_PORRST                //供电电压低于阀值产生的复位
#define RCC_FLAG_SFTRST                //软件复位
#define RCC_FLAG_IWDGRST               //独立看门狗复位 
#define RCC_FLAG_WWDGRST               //窗口看门狗复位
#define RCC_FLAG_LPWRRST               //低功耗复位

  同样,我们可以将函数的参数替换成下面几个宏,就可以获取对应的复位标志。

二、Stm32CubeMx配置

1、RCC开启外部高速时钟(略)
2、配置STLink调试口(略)
3、配置串口方便调试输出(略)
4、配置工程名、生成路径,之后生成工程(略)
(1-4步的基础配置可以参考前面的文章《STM32基础工程模板创建》
5、配置看门狗
在这里插入图片描述

三、代码编写


#include <stdio.h>
#include <string.h>

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;
}


int main(void)
{
	 HAL_Init();
	 SystemClock_Config();
	
	 MX_GPIO_Init();
	 MX_USART1_UART_Init();
	 MX_IWDG_Init();
	
	 uint32_t count = 0;
	 uint8_t u8TempBuf[16];
	
	//读看门狗溢出标志,检测程序是否发生过看门狗复位
	if(__HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST)!=RESET)
	{
		printf("Prograss Error,Please Check!\r\n");
		__HAL_RCC_CLEAR_RESET_FLAGS();
	}

	 while (1)
	 {
		if(count%100 == 0)
		{
			printf("----------alive \r\n");
		}
		
		//串口阻塞接收“WatchDogTest”指令,通过指令触发看门狗溢出
		HAL_UART_Receive(&huart1, u8TempBuf, 12, 10);
		if(0 == strncmp((char*)&u8TempBuf, "WatchDogTest", 12))
		{
			//阻塞5秒,触发看门狗
			printf("Prograss Stop \r\n");
			HAL_Delay(5000);		
		}
		
		HAL_IWDG_Refresh(&hiwdg);
		count++;
	 }
}

四、运行效果

  设备上电;打开串口助手并发送“WatchDogTest”,程序阻塞后会触发看门狗复位;复位后会走进看门狗溢出标志并打印。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值