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

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

目录

  • 一、__HAL_RCC_GET_FLAG 函数
  • 二、Stm32CubeMx配置
  • 三、代码编写
  • 四、运行效果

一、__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”,程序阻塞后会触发看门狗复位;复位后会走进看门狗溢出标志并打印。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/933752.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

记一次由docker容器使得服务器cpu占满密码和密钥无法访问bug

Bug场景&#xff1a; 前几天在服务器上部署了一个免费影视网站&#xff0c;这个应用需要四个容器&#xff0c;同时之前的建站软件workpress也是使用docker部署的&#xff0c;也使用了三个容器。在使用workpress之前&#xff0c;我将影视软件的容器全部停止。 再使用workpress…

Linx下自动化之路:Redis安装包一键安装脚本实现无网极速部署并注册成服务

目录 简介 安装包下载 安装脚本 服务常用命令 简介 通过一键安装脚本实现 Redis 安装包的无网极速部署&#xff0c;并将其成功注册为系统服务&#xff0c;开机自启。 安装包下载 redis-7.0.8.tar.gzhttp://download.redis.io/releases/redis-7.0.8.tar.gz 安装脚本 修…

开发 UEFI 驱动

服务型驱动的特点&#xff1a; 1&#xff09;在 Image 的入口函数中执行安装&#xff1b; 2&#xff09;服务型驱动不需要驱动特定硬件&#xff0c;可以安装到任意控制器上&#xff1b; 3&#xff09;没有提供卸载函数。 一个设备 / 总线驱动程序在安装时首先要找到对应的硬件…

实现 DataGridView 下拉列表功能(C# WinForms)

本文介绍如何在 WinForms 中使用 DataGridViewComboBoxColumn 实现下拉列表功能&#xff0c;并通过事件响应来处理用户的选择。以下是实现步骤和示例代码。 1. 效果展示 该程序的主要功能是展示如何在 DataGridView 中插入下拉列表&#xff0c;并在选择某一项时触发事件。 2.…

传输层5——TCP可靠传输的实现(重点!!)

TCP协议如何实现可靠传输&#xff1f;确保接收方收到数据&#xff1f; 需要依靠几个结构&#xff1a; 以字节为单位的滑动窗口 这其中包括发送方的发送窗口和接收方的接收窗口 下面的描述&#xff0c;我们指定A为发送端口&#xff0c;B为接收端口 TCP的可靠传输就是靠着滑动窗口…

java Random随机数

Randoms是什么 在Java中&#xff0c;Random类是用于生成伪随机数的工具。它位于java.util包中。以下是一些使用Random类生成不同类型的随机数的方法&#xff1a; 1 创建 Random 类的实例 2 生成一个随机的int值&#xff08;范围从Integer.MIN_VALUE到Integer.MAX_VALUE&#…

React的复制粘贴组件——React Copy to Clipboard

React Copy to Clipboard是一个用于在React应用程序中复制文本到剪贴板的库。它提供了一个简单的方式来实现复制到剪贴板的功能&#xff0c;支持多种浏览器和设备。 安装 你可以使用npm或yarn来安装React Copy to Clipboard&#xff1a; npm install react-copy-to-clipboa…

【Android Studio】学习——网络连接

实验&#xff1a;Android网络连接 文章目录 实验&#xff1a;Android网络连接[toc]实验目标和实验内容&#xff1a;1、掌握Android联网的基本概念&#xff1b;2、能够使用URL connection实现网络连接&#xff1b;3、掌握第三方库的基本概念4、需实现的具体功能 实验结果功能说明…

泷羽Sec-星河飞雪-bp验证码爆破

免责声明 学习视频来自 B 站up主泷羽sec&#xff0c;如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识&#xff0c;以下代码、网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 泷羽sec官网&#xff1a;http…

基础算法——搜索与图论

搜索与图论 图的存储方式2、最短路问题2.1、Dijkstra算法&#xff08;朴素版&#xff09;2.2、Dijkstra算法&#xff08;堆优化版&#xff09;2.3、Bellman-Ford算法2.4、SPFA求最短路2.5、SPFA判负环2.6、Floyd算法 图的存储方式 2、最短路问题 最短路问题可以分为单源最短路…

C#构造函数 析构函数 静态成员(类) 密封类 字段以及属性

每当创建类或结构的实例时&#xff0c;将会调用其构造函数。 类或结构可能具有采用不同参数的多个构造函数。 使用构造函数&#xff0c;程序员能够设置默认值、限制实例化&#xff0c;并编写灵活易读的代码 如果静态构造函数尚未运行&#xff0c;静态构造函数会在任何实例构造…

公立医院高质量发展——急慢性气道疾病药学服务科普宣传培训成功开展

2023年&#xff0c;为积极响应国家关于推动公立医院高质量发展的号召&#xff0c;中国健康促进基金会开展了公立医院高质量发展——急慢性气道疾病药学服务科普宣传培训。该项目旨在通过科普宣传和培训&#xff0c;提升咳喘药学规范化服务水平&#xff0c;促进临床专业知识与咳…

product/admin/list?page=0size=10field=jancodevalue=4562249292272

文章目录 1、ProductController2、AdminCommonService3、ProductApiService4、ProductCommonService5、ProductSqlService https://api.crossbiog.com/product/admin/list?page0&size10&fieldjancode&value45622492922721、ProductController GetMapping("ad…

linux介绍------VMWare的卸载,下载,安装------及基础命令使用

文章目录 Linux第一天1、为什么要学习linux&#xff1f;2、怎么去学linux&#xff1f;&#xff08;什么是大数据&#xff09;3、VMWare的卸载&#xff0c;下载&#xff0c;安装4、检查网卡5、创建新的虚拟机&#xff08;安装步骤&#xff1a;看视频&#xff09;6、几个名字的理…

游戏引擎学习第38天

仓库: https://gitee.com/mrxiao_com/2d_game 回顾上次的内容。 我们之前讨论了将精灵放在屏幕上&#xff0c;但颜色错误的问题。问题最终查明是因为使用了一个调整工具&#xff0c;导致文件的字节顺序发生了变化。重新运行“image magic”工具对一些大图像进行重新处理后&am…

leetcode 二进制数转字符串

1.题目要求: 2.题目代码: class Solution { public:string printBin(double num) {string result;double compare_value 1.0;//先给把0和.赋值给result;result.push_back(0);result.push_back(.);while(result.size() < 33){//利用十进制转换成二进制的方法//1.先给num …

JS进阶DAY3|页面加载事件和页面滚动事件

目录 一、页面加载事件 1.1 DOMContentLoaded 事件 1.1.1 触发时机 1.1.2 用途 1.1.3 代码示例document.addEventListener(DOMContentLoaded, (event) > { 1.2 load 事件 1.2.1 触发时机 1.2.2 用途 1.2.3 代码示例 二、页面滚动事件 1.1 scroll事件 1.1.1 触…

overleaf 写论文 语法笔记

1.找参考的期刊/论文模板 注册账户后并登录后进入这个界面&#xff0c;创建的所有历史项目会在这个界面显示&#xff0c;后期可以继续修改。 创建新项目&#xff1a;点击绿色按钮“创建新项目”后&#xff0c;可以新建空白项目&#xff0c;可以选择模板直接往模板里添加内容,…

OpenCV-平滑图像

二维卷积(图像滤波) 与一维信号一样&#xff0c;图像也可以通过各种低通滤波器&#xff08;LPF&#xff09;、高通滤波器&#xff08;HPF&#xff09;等进行过滤。LPF 有助于消除噪音、模糊图像等。HPF 滤波器有助于在图像中找到边缘。 opencv 提供了函数 **cv.filter2D()**&…

Pandas | skill | 将groupby分组后的数据使用堆叠图像展示

groupby堆叠图 计算商品名称和销售数量计算商品名称和销售总额在每个颜色段上标注商品名称和平均销售金额 计算商品名称和销售数量 # 筛选出四个类别下的商品数据 categories_of_interest [Clothing, Accessories, Footwear, Outerwear] # data[Category]列中的元素是否在cat…