STM32拓展 低功耗案例1:睡眠模式 (hal)

embedded/2025/1/8 1:57:02/

STM32CubeMX设置

开串口以及中断

LED2,配置GPIO

生成项目:

keil配置自动复位和打开MicroLIB

书写代码:首先书写uart.c中重写printf

#include <stdio.h>
int fputc (int ch,FILE * file)
{HAL_UART_Transmit(&huart1,(uin8_t *)&ch,1,1000);return ch;
}

复制register代码到hal库中main.c中

    printf("低功率实验:睡眠模式...\n");// 1. 开启LED灯,延时2s,模拟正常程序执行过程LED_On(LED_1);Delay_s(2);while (1){// 2. 进入睡眠模式printf("正常代码执行完毕,3s后进入睡眠模式...\n");Delay_s(3);printf("进入睡眠模式");enter_sleep_mode();// 3. 以下代码只有在唤醒之后才会执行printf("从睡眠模式中唤醒...\n");Delay_s(2);}

然后再进行修改:

  printf("尚硅谷低功率实验:睡眠模式...\n");// 1. 开启LED灯,延时2s,模拟正常程序执行过程HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET);HAL_Delay(2000);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){// 2. 进入睡眠模式printf("正常代码执行完毕,3s后进入睡眠模式...\n");HAL_Delay(3000);printf("进入睡眠模式\n");HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);// 3. 以下代码只有在唤醒之后才会执行printf("从睡眠模式中唤醒...\n");HAL_Delay(2000);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}

但是hal库中的中断开启需要手动开启

HAL_UART_Receive_IT(&huart1, &ch, 1);

运行代码会发现不停的唤醒,因为任何中断都可以进入睡眠模式,hal中的systick中断也可以进入睡眠,解决办法是临时暂停然后恢复。

    // 暂停Systick中断HAL_SuspendTick();HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);// 恢复Systick中断HAL_ResumeTick();

再次运行:会发现进入睡眠模式后只能唤醒1次,分析原因是因为,中断服务程序默认关闭中断。

解决办法,是将中断服务程序的回调函数,重写打开中断。 添加下面代码(哪里都可以)。

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if (huart->Instance == USART1){printf("%c", ch);// 重新打开接收中断使能HAL_UART_Receive_IT(&huart1, &ch, 1);}
}

进入睡眠模式发现烧录不了程序了,解决方法是打开keil中按下图配置


http://www.ppmy.cn/embedded/152158.html

相关文章

OpenCV-Python实战(15)——像素直方图均衡画

一、像素均值与标准差 1.1 像素均值 cv2.mean() mean_val cv2.mean(img,mask*) mean_val&#xff1a;图像 BGR 通道的均值和透明度。 img&#xff1a;图像。 mask&#xff1a;可以选择是否添加掩膜&#xff0c;默认为&#xff1a;None。 import cv2 import numpy as npim…

R语言的计算机基础

R语言的计算机基础 引言 R语言是一种用于统计分析、数据可视化和数据挖掘的重要编程语言。它不仅拥有丰富的统计分析功能&#xff0c;还具备灵活的图形绘制能力&#xff0c;因而在数据科学领域受到广泛欢迎。本文旨在探讨R语言的基础知识&#xff0c;包括其历史、安装、基本语…

云架构Web端的工业MES系统设计之区分工业过程

云架构Web端的工业MES系统设计之区分工业过程 在当今数字化浪潮席卷全球的背景下,制造业作为国家经济发展的重要支柱产业,正面临着前所未有的机遇与挑战。市场需求的快速变化、客户个性化定制要求的日益提高以及全球竞争的愈发激烈,都促使制造企业必须寻求更加高效、智能的生产…

pandas基础使用

pandas基础使用 基本介绍 类似于字典形式的numpy&#xff0c;可以给它的不同行和不同列进行重命名。 import numpy as np import pandas as pd # 创建一个序列 s pd.Series([1,4,True,np.nan,55.0])创建date format日期矩阵 import numpy as np import pandas as pd dates…

利用 NineData 实现 PostgreSQL 到 Kafka 的高效数据同步

记录一次 PostgreSQL 到 Kafka 的数据迁移实践。前段时间&#xff0c;NineData 的某个客户在一个项目中需要将 PostgreSQL 的数据实时同步到 Kafka。需求明确且普遍&#xff1a; PostgreSQL 中的交易数据&#xff0c;需要实时推送到 Kafka&#xff0c;供下游多个系统消费&#…

【AI日记】25.01.06

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】 AI 参加&#xff1a;kaggle 比赛 Forecasting Sticker Sales 读书 书名&#xff1a;国家为什么会失败阅读原因&#xff1a;2024 年诺贝尔经济学奖得主的力作&#xff0c;之前我已经读过他另一…

AI知识库与用户行为分析:优化用户体验的深度洞察

在当今数字化时代&#xff0c;用户体验&#xff08;UX&#xff09;已成为衡量产品成功与否的关键指标之一。AI知识库作为智能客服系统的重要组成部分&#xff0c;不仅为用户提供快速、准确的信息检索服务&#xff0c;还通过用户行为分析&#xff0c;为产品优化提供了深度洞察。…

C++二十三种设计模式之外观模式

C二十三种设计模式之外观模式 一、组成二、目的三、缺点四、示例代码 一、组成 子系统类&#xff1a;为外观类提供具体的功能。 外观类&#xff1a;封装一组子系统的接口。 二、目的 封装子系统一组接口&#xff0c;隐藏底层实现细节&#xff0c;简化子系统的使用。 三、缺…