STM32中使用看门狗实现系统自动复位

STM32中的看门狗(Watchdog)是一种用于监控系统运行状态并在系统故障或死锁时执行自动复位的硬件功能。在本文中,我将介绍如何在STM32微控制器中使用看门狗来实现系统的自动复位。下面是详细的解释:

一、看门狗原理简介
看门狗是一种独立的硬件计时器,在启动看门狗计时器之后,系统需要在一定的时间内喂狗(即清除计时器计数值),否则看门狗将会超时,触发系统自动复位。这是一种预防系统死锁或异常情况的安全机制。

二、看门狗的配置
在STM32中,看门狗的配置主要涉及以下几个方面:时钟源、预分频系数、重载值和使能位。

1. 时钟源:通常可以选择LSI(低速内部时钟)或LSI的2倍作为看门狗的时钟源。

2. 预分频系数:预分频系数用于控制看门狗计时器的时钟频率,根据系统需求选择合适的预分频系数。

3. 重载值:重载值决定了看门狗计时器的定时时长,当看门狗计时器达到重载值时,将会触发系统复位。

4. 使能位:使能位用于启用或禁用看门狗功能。

下面是一个使用STM32Cube HAL库配置看门狗的示例代码:

```c
#include "main.h"
#include "stm32f4xx_hal.h"WWDG_HandleTypeDef hwwdg;void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_WWDG_Init(void);int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_WWDG_Init();while (1){// 喂狗HAL_WWDG_Refresh(&hwwdg);}
}void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLM = 25;RCC_OscInitStruct.PLL.PLLN = 336;RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;RCC_OscInitStruct.PLL.PLLQ = 7;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK){Error_Handler();}HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq() / 1000);HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}static void MX_WWDG_Init(void)
{hwwdg.Instance = WWDG;hwwdg.Init.Prescaler = WWDG_PRESCALER_8;hwwdg.Init.Window = 127;hwwdg.Init.Counter = 127;if (HAL_WWDG_Init(&hwwdg) != HAL_OK){Error_Handl‌er();}
}
```

以上代码中,我们首先初始化系统时钟(System Clock),然后初始化GPIO和看门狗计时器。在main函数中,在一个无限循环中,我们通过调

用HAL_WWDG_Refresh函数来喂狗,确保看门狗计时器的计数值不会超时,从而防止系统自动复位。

在以上代码中,我们配置了一个预分频系数为8,重载值为127的看门狗计时器,并在无限循环中调用HAL_WWDG_Refresh函数来喂狗,以保证系统的正常运行。如果系统中出现了死锁或其他异常情况导致程序未能及时喂狗,导致计数器超时,看门狗将会触发系统复位,从而实现系统自动复位的功能。

三、注意事项
在使用STM32中的看门狗功能时,需要注意以下几点:

1. 重载值的选择:重载值的选择需要根据系统运行时间和所需的复位间隔来确定。如果重载值太小,可能会导致看门狗频繁触发复位,影响系统的稳定性;如果重载值太大,可能会导致看门狗计数器无法及时超时,从而无法实现自动复位的功能。

2. 喂狗的频率:在使用看门狗功能时,需要定时喂狗,否则看门狗会在计时器超时时触发系统复位。喂狗的频率应该在重载值的一半以上,以保证系统能够正常运行。

3. 系统的初始化时间:看门狗计数器的启动时间需要一定的时间,因此在初始化系统时,需要保证计时器已经启动并工作正常。

4. 发生异常时的处理:如果程序发生异常,例如死锁或死循环等情况,可能会导致看门狗计时器无法及时喂狗,从而触发系统复位。因此需要注意程序的稳定性和安全性,尽可能避免出现异常情况并进行针对性的处理。

总结:
在STM32中使用看门狗实现系统自动复位,需要进行时钟源、预分频系数、重载值和使能位的配置。
通过定时喂狗,可以保证看门狗计时器的正常工作,防止系统出现异常情况,实现系统的自动复位功能。

嵌入式物联网的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而错失高薪offer。不过别担心,我为大家整理了一份150多G的学习资源,基本上涵盖了嵌入式物联网学习的所有内容。点击这里,0元领取学习资源,让你的学习之路更加顺畅!记得点赞、关注、收藏、转发哦。 

​ 点击链接扫码进入嵌入式交流群 ​https://fss.mpay8.cn/article/dmrjinh2C6fjejm

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【nlp】2.1 认识RNN模型

认识RNN模型 1 什么是RNN模型2 RNN模型的作用3 RNN模型的分类:1 什么是RNN模型 RNN(Recurrent Neural Network),,中文称作循环神经网络,它一般以序列数据为输入, 通过网络内部的结构设计有效捕捉序列之间的关系特征,一般也是以序列形式进行输出。 一般单层神经网络结构:…

【Java 进阶篇】JQuery DOM操作:CRUD操作的前端魔法

在前端开发的舞台上,CRUD(Create, Read, Update, Delete)操作是一种极为重要的技能,它涉及对页面元素的增删改查。而JQuery,这位前端开发的魔法师,为我们提供了便捷而强大的方法,使得CRUD操作变…

hadoop 大数据集群环境配置 配置hadoop配置文件 hadoop(七)

1. 虚拟机的三台机器分别以hdfs 存储, mapreduce计算,yarn调度三个方面进行集群配置 hadoop 版本3.3.4 官网:Hadoop – Apache Hadoop 3.3.6 jdk 1.8 三台机器尾号为:22, 23, 24。(没有用hadoop102, 103,10…

Linux使用Docker完整安装Superset,同时解决please use superset_config.py to override it报错

文章目录 Docker安装Superset流程1. 首先获取镜像2. 生成SSL3. 创建Superset容器4. 更新数据库5. 测试访问Superset Docker安装Superset流程 1. 首先获取镜像 docker pull amancevice/superset2. 生成SSL 接下来我们运行一些额外的程序: openssl rand -base64 4…

基于Rabbitmq和Redis的延迟消息实现

1 基于Rabbitmq延迟消息实现 支付时间设置为30,未支付的消息会积压在mq中,给mq带来巨大压力。我们可以利用Rabbitmq的延迟队列插件实现消息前一分钟尽快处理 1.1定义延迟消息实体 由于我们要多次发送延迟消息,因此需要先定义一个记录消息…

准备搞OpenStack了,先装一台最新的Ubuntu 23.10

正文共:1113 字 25 图,预估阅读时间:2 分钟 依稀记得前面发了一篇Ubuntu的安装文档(66%的经验丰富开发者和69%的学生更喜欢的Ubuntu的安装初体验),当时安装的是20.04.3的版本,现在看来已经是非常…

【机器学习】决策树算法理论:算法原理、信息熵、信息增益、预剪枝、后剪枝、算法选择

1. 决策树概念 通过不断的划分条件来进行分类,决策树最关键的是找出那些对结果影响最大的条件,放到前面。 我举个列子来帮助大家理解,我现在给我女儿介绍了一个相亲对象,她根据下面这张决策树图来进行选择。比如年龄是女儿择偶更…

Adobe家里的“3D“建模工 | Dimension

今天,我们来谈谈一款在Adobe系列中比肩C4D的高级3D软件的存在—— Dimension。 Adobe Dimension ,其定位是一款与Photoshop以及Illustrator相搭配的3D绘图软件。 Adobe Dimensions与一般的3D绘图软件相较之下,在操作界面在功能上有点不大相同…

保护您的Google账号安全:检查和加固措施

简介:随着我们在日常生活中越来越依赖于Google账号,我们的个人信息和敏感数据也变得越来越容易受到威胁。为了确保您的Google账号的安全性,本文将介绍一些简单但有效的方法,帮助您检查和加固您的Google账号。 --- 在数字时代&am…

【uniapp】确认弹出框,选择确定和取消

代码如下&#xff1a; <view style"display: flex; justify-content: space-around;"><button class"button" click"submit">t提交</button> </view>submit(){let thatthisuni.showModal({title: 提示&#xff1a;,con…

MySQL MVCC机制详解

MySQL MVCC机制详解 MVCC, 是Multi Version Concurrency Control的缩写&#xff0c;其含义是多版本并发控制。这一概念的提出是为了使得MySQL可以实现RC隔离级别和RR隔离级别。 这里回顾一下MySQL的事务&#xff0c; MySQL的隔离级别和各种隔离级别所存在的问题。 事务是由 …

HDP集群Kafka开启SASLPLAINTEXT安全认证

hdp页面修改kafka配置 java代码连接kafka增加对应的认证信息 props.put("security.protocol","SASL_PLAINTEXT");props.put("sasl.mechanism","PLAIN");props.put("sasl.jaas.config","org.apache.kafka.common.securi…