STM32_HAL_低功耗的模式

低功耗的模式

  1. 运行模式(Run Mode):这是正常工作模式,所有的系统功能都是可用的。

  2. 睡眠模式(Sleep Mode):在CPU停止运行时,所有的外设和内存仍然处于供电状态。此模式下,CPU时钟被关闭,但可以通过中断或事件唤醒。

  3. 停止模式(Stop Mode):在此模式下,除了后备域(RTC、备份寄存器和备份SRAM)之外,所有的时钟都被停止,PLL、HSI和HSE振荡器也被关闭。该模式可以通过任意外设的中断或RTC闹钟事件唤醒。

  4. 待机模式(Standby Mode):这是STM32功耗最低的模式。在此模式下,除了后备域之外,1.8V电源被断开,PLL、HSI和HSE振荡器也被关闭。可以通过WKUP引脚的上升沿、RTC闹钟事件、NRST引脚的复位或电源复位唤醒

有哪些函数

  1. HAL_PWR_EnterSLEEPMode:使微控制器进入睡眠模式。在此模式下,CPU时钟被关闭,但所有的外设和内存仍然处于供电状态,可以通过任何中断或事件唤醒。

  2. HAL_PWR_EnterSTOPMode:使微控制器进入停止模式。在此模式下,所有的时钟(除了后备域的时钟)都被停止,大部分电源域被断电,可以通过任意外设的中断或RTC闹钟事件唤醒。

  3. HAL_PWR_EnterSTANDBYMode:使微控制器进入待机模式。这是功耗最低的模式,除了后备域之外,所有的电源都被断电。可以通过WKUP引脚的上升沿、RTC闹钟事件、NRST引脚的复位或电源复位唤醒。

  1. HAL_PWR_EnableSleepOnExit:配置当进入低功耗模式后,从中断返回时是否直接进入睡眠模式。

  2. HAL_PWR_EnableSEVOnPend:使能SEV(Send Event)功能,允许在退出低功耗模式之前发送事件。

  3. HAL_PWR_DisableSleepOnExit:禁用当进入低功耗模式后,从中断返回时直接进入睡眠模式的功能。

  4. HAL_PWR_DisableSEVOnPend:禁用SEV(Send Event)功能。

  5. HAL_PWR_EnableWakeUpPin:使能WKUP(Wake-up)引脚,用于在低功耗模式下唤醒微控制器。

  6. HAL_PWR_DisableWakeUpPin:禁用WKUP(Wake-up)引脚。

  7. HAL_PWR_GetSleepModeState:检查微控制器是否从睡眠模式唤醒。

  8. HAL_PWR_GetStopModeState:检查微控制器是否从停止模式唤醒。

  9. HAL_PWR_GetFlagStatus:获取电源控制状态标志,例如WKUP引脚的唤醒状态。

模式对应的现状和唤醒方法

  1. 睡眠模式(Sleep Mode)

    • 在睡眠模式下,CPU停止运行,但所有的外设和内存仍然处于供电状态。
    • 时钟系统可以根据需要继续运行,这意味着外设可以在CPU休眠时继续工作。
    • 任何未被屏蔽的中断都可以唤醒CPU
    • 该模式的唤醒时间非常短,因为CPU时钟只是被关闭,而没有完全断电
    • 电源消耗相对较低,但不是最低。
  2. 停止模式(Stop Mode)

    • 停止模式是介于睡眠模式和待机模式之间的一种低功耗模式。
    • 在此模式下,所有的时钟(除了后备域的时钟)都被停止,PLL、HSI和HSE振荡器也被关闭。
    • 大部分的电源域被断电,但SRAM和寄存器的内容得以保持
    • 唤醒时间比睡眠模式长,因为系统需要重新配置时钟。
    • 可以通过任意外设的中断或RTC闹钟事件唤醒
    • 电源消耗比睡眠模式更低。
  3. 待机模式(Standby Mode)

    • 待机模式是功耗最低的模式,适用于需要极低功耗的应用。
    • 在此模式下,除了后备域之外,所有的电源都被断电,包括1.8V电源。
    • PLL、HSI和HSE振荡器也被关闭,SRAM和寄存器的内容丢失。
    • 唤醒时间最长,因为系统需要重新启动。
    • 可以通过WKUP引脚的上升沿、RTC闹钟事件、NRST引脚的复位或电源复位唤醒。
      • STM32F103ZET6微控制器没有专门的WKUP(Wake-up)引脚功能
    • 电源消耗是三种模式中最低的。

STM32cude

只要开启时钟和按键的中断即可

源码

按键点击进入中断中断将开启待机模式,按键复位退出待机模式

/* USER CODE BEGIN Header */
/********************************************************************************* @file           : main.c* @brief          : Main program body******************************************************************************* @attention** Copyright (c) 2024 STMicroelectronics.* All rights reserved.** This software is licensed under terms that can be found in the LICENSE file* in the root directory of this software component.* If no LICENSE file comes with this software, it is provided AS-IS.********************************************************************************/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "gpio.h"/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes *//* 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 *//* 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 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){HAL_PWR_EnterSTANDBYMode();//进入待机模式
}
/* 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();/* USER CODE BEGIN 2 */HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);//点亮灯/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}/*** @brief System Clock Configuration* @retval None*/
void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};/** Initializes the RCC Oscillators according to the specified parameters* in the RCC_OscInitTypeDef structure.*/RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;RCC_OscInitStruct.HSIState = RCC_HSI_ON;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL2;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB buses clocks*/RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|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_DIV1;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK){Error_Handler();}
}/* USER CODE BEGIN 4 *//* USER CODE END 4 *//*** @brief  This function is executed in case of error occurrence.* @retval None*/
void Error_Handler(void)
{/* USER CODE BEGIN Error_Handler_Debug *//* User can add his own implementation to report the HAL error return state */__disable_irq();while (1){}/* USER CODE END Error_Handler_Debug */
}#ifdef  USE_FULL_ASSERT
/*** @brief  Reports the name of the source file and the source line number*         where the assert_param error has occurred.* @param  file: pointer to the source file name* @param  line: assert_param error line source number* @retval None*/
void assert_failed(uint8_t *file, uint32_t line)
{/* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

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

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

相关文章

卓豪Zoho CRM客户管理系统采购费用?

企业如何高效地管理客户关系,卓豪Zoho CRM,作为一款领先的客户关系管理系统,不仅为企业提供了一套完整的客户管理解决方案,更在价格上实现了公开透明和合理优惠,助力企业实现数字化转型,迈向更高效、更智能…

前端 CSS 经典:filter 滤镜

前言:什么叫滤镜呢,就是把元素里的像素点通过一套算法转换成新的像素点,这就叫滤镜。而算法有 drop-shadow、blur、contrast、grayscale、hue-rotate 等。我们可以通过这些算法实现一些常见的 css 样式。 1. drop-shadow 图片阴影 可以用来…

电压、电流、功率

//**********************************************************************************// 380V电压 额定功率1.732*额定电压*额定电流*功率因素 220V电压 额定功率额定电压*额定电流*功率因素 单相,功率1KW,电流约4.5A。 三相,功率1KW…

使用Java Swing制作一个飞翔的小鸟游戏

文章目录 一、需求分析二、技术介绍2.1相关技术2.2开发环境 三、功能实现1、开始2、运动3、死亡 四、部分代码实现获取源码 文章最下方获取源码!!! 文章最下方获取源码!!! 文章最下方获取源码!&…

基于Vue的神影视频APP

需求说明:使用Vue脚手架进行搭建,页面简洁、精致,和一些常见的电影网站类似,例如支付宝中的“淘票票电影”。在项目中使用页面布局技术(表格,vue.js框架,DIV+CSS或者混合使用)进行页面设计,使网站功能齐全,界面美观大方,有一定的交互性。 功能分析:系统主要分为七…

十大排序算法【1】---冒泡排序、快速排序、选择排序、插入排序、希尔排序

动画演示 各种算法:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html 6种常见排序算法:https://www.cs.usfca.edu/~galles/visualization/ComparisonSort.html 1、冒泡排序 //1、冒泡排序Bubble Sort: 比较前后相邻的数据&#xff0c…

消消乐游戏开发,三消游戏,消除小游戏

消消乐是一款非常受欢迎的休闲消除类游戏,通常也被称为“三消游戏”。这类游戏的主要目标是通过交换和匹配三个或更多相同的物品来清除它们,从而得分并通过关卡。以下是一些消消乐游戏的基本特点和玩法: 基本玩法 交换和匹配:玩…

MySQL第六次作业

一、创建部门表 指令: mysql> CREATE TABLE dept (-> dept_id INT PRIMARY KEY AUTO_INCREMENT COMMENT 部门编号,-> dept_name CHAR(20) COMMENT 部门名称-> ); 演示: 二、插入部门数据 指令: mysql> INSERT INTO dept…

去中心化的 S3,CESS 首创去中心化对象存储 DeOSS

Web3 在各个领域的应用和发展已成为讨论的焦点,尽管行业对 Web3 的定义各不相同,但一个普遍的共识是 Web3 赋予了用户对其数据的所有权和自主权。这一转变在我们的生活和工作与数字化越来越深入地融合之际至关重要,这意味着所有人类活动很快将…

ESP8266连接巴法云

AT :测试是否能用 ATCWMODE1 :设置为无线终端模式 ATCWJAP"XXX","XXXXXXXXXX" :ESP8266加入热点网络,热点信息必须是2.4G ATCIPSTARTATCIPSTART"TCP","bemfa.com",8344 &…

Python解析网页-XPath

目录 1、什么是XPath 2、安装配置 3、XPath常用规则 4、快速入门 5、浏览器XPath工具 1.什么是XPath XPath(XML Path Language)是一种用于在XML文档中定位和选择节点的语言。 它是W3C(World Wide Web Consortium)定义的一种标…

SQL面试题练习 —— 连续支付订单合并

目录 1 题目2 建表语句3 题解 1 题目 现有一张用户支付表:t_user_pay 包含字段订单ID,用户ID,商户ID,支付时间,支付金额。 如果同一用户在同一商户存在多笔订单,且中间该用户没有其他商户的支付记录&#…

Python小游戏——打砖块

文章目录 打砖块游戏项目介绍及实现项目介绍环境配置代码设计思路代码设计详细过程 难点分析源代码代码效果 打砖块游戏项目介绍及实现 项目介绍 打砖块游戏是一款经典的街机游戏,通过控制挡板来反弹小球打碎屏幕上的砖块。该项目使用Python语言和Pygame库进行实现…

MVS net笔记和理解

文章目录 传统的方法有什么缺陷吗?MVSnet深度的预估 传统的方法有什么缺陷吗? 传统的mvs算法它对图像的光照要求相对较高,但是在实际中要保证照片的光照效果很好是很难的。所以传统算法对镜面反射,白墙这种的重建效果就比较差。 …

Vue 实例

一、页面效果图 二、代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><script src"../vue.js" type"text/javascript"></script><title>vue 实例</title></head><body>&l…

RAG中常用的索引(Index)方式

在RAG&#xff08;Retrieval-Augmented Generation&#xff09;中&#xff0c;索引是一个关键步骤&#xff0c;它涉及到将文档内容转换为机器可理解的形式&#xff0c;以便进行有效的检索和生成。以下是一些关于RAG中结构化索引的实现方法和步骤&#xff1a; 向量索引&#xf…

图解PHP MySQL:轻松掌握服务器端Web开发

在当今数字化时代&#xff0c;Web开发成为了一个炙手可热的领域&#xff0c;而PHP和MySQL作为Web开发领域的两大基石&#xff0c;其重要性不言而喻。对于初学者和寻求深化理解的开发者而言&#xff0c;一本好的教材就如同灯塔一般&#xff0c;指引着他们前行。《图解PHP & …

50etf期权购是什么意思?

今天带你了解50etf期权购是什么意思&#xff1f;很多刚刚接触50ETF期权的投资者或许不太明白50ETF期权投资是一种什么样的投资&#xff0c;对于50ETF期权投资来说&#xff0c;有认购合约与认沽合约&#xff0c;那么“购”也就是认购的意思。 50etf期权购是什么意思&#xff1f;…

嵌入式交叉编译:timezone/zoneinfo(指定安装路径)

下载 Time Zone Database tzdata2024a.tar.gz tzcode2024a.tar.gz 解压 注意&#xff0c;要解压到一个目录 tar xf tzcode2024a.tar.gz tar xf tzdata2024a.tar.gz 编译 这里直接指定了编译后安装路径&#xff0c;十分方便。 CROSS_NAMEaarch64-mix210-linuxexport P…

三. Stream API

1. 过滤 record Fruit(String cname, String name, String category, String color) { }Stream.of(new Fruit("草莓", "Strawberry", "浆果", "红色"),new Fruit("桑葚", "Mulberry", "浆果", "紫…