STM32实战总结:HAL之低功耗

news2025/1/12 4:05:06

低功耗的含义不必过多解释,一听就能懂。

低功耗对电池供电产品尤其重要。

STM32的有三种低功耗模式,即睡眠模式、停止模式和待机模式。

在我的印象中,停止不就是关机吗?但并不是。

在系统或电源复位以后,微控制器处于运行状态。当CPU不需继续运行时,可以利用多种低功耗模式来节省功耗,例如等待某个外部事件时。用户需要根据最低电源消耗最快速启动时间可用的唤醒源等条件,选定一个最佳的低功耗模式。

● 睡眠模式

仅Cortex™-M3内核停止,其他所有外设包括Cortex-M3核心的外设,如NVIC、系统时

(SysTick)等仍在运行。

● 停止模式

所有的时钟都已停止。

● 待机模式

1.8V电源关闭。

WFI:Wait For Interrupt,WFE:Wait For Event

注:非低功耗状态下被称为运行模式。

run、sleep、stop、standby

从表中可以看到,这三种低功耗模式层层递进,运行的时钟或芯片功能越来越少,因而功耗越来越低。

此外,在运行模式下,可以通过以下方式中的一种降低功耗:

● 降低系统时钟

● 关闭APBAHB总线上未被使用的外设时钟。

在运行模式下,通过对预分频寄存器进行编程,可以降低任意一个系统时钟 (SYSCLK
HCLK PCLK1 PCLK2) 的速度。进入睡眠模式前,也可以利用预分频器来降低外设的时钟。

睡眠模式

在睡眠模式中,仅关闭了内核时钟,内核停止运行,但其片上外设,CM3核心的外设全都还照常运行,在软件上表现为不再执行新的代码。

这个状态会保留睡眠前的内核寄存器、内存的数据。

唤醒后 ,若由中断唤醒,先进入中断,退出中断服务程序后,接着执行 WFI 指令后的程序;若由事件唤醒,直接接着执行 WFE 后的程序。

唤醒延迟:无延迟。

停止模式

停止模式是在Cortex™-M3的深睡眠模式基础上结合了外设的时钟控制机制,在停止模式下电压调节器可运行在正常或低功耗模式。此时在1.8V供电区域的的所有时钟都被停止,PLLHSI和HSE RC振荡器的功能被禁止,SRAM和寄存器内容被保留下来。

在停止模式下,所有的I/O引脚都保持它们在运行模式时的状态。

在停止模式中,进一步关闭了其它所有的时钟,于是所有的外设都停止了工作,但由于其 1.8V 区域的部分电源没有关闭,还保留了内核的寄存器、内存的信息,所以从停止模式唤醒,并重新开启时钟后,还可以从上次停止处继续执行代码。

唤醒后,若由中断唤醒,先进入中断,退出中断服务程序后,接着执行 WFI 指令后的程序;若由事件唤醒,直接接着执行 WFE 后的程序。停止模式唤醒后,STM32 会使用 HSI(f1 的 HSI 为 8M,f4 为 12M)作为系统时钟。所以,有必要在唤醒以后,在程序上重新配置系统时钟,将时钟切换回 HSE。

唤醒延迟 :基础延迟为 HSI 振荡器的启动时间,若调压器工作在低功耗模式,还需要加上调压器从低功耗切换至正常模式下的时间,若 FLASH 工作在掉电模式,还需要加上 FLASH 从掉电模式唤醒的时间。

待机模式

待机模式可实现系统的最低功耗。该模式是在 Cortex-M3 深睡眠模式时关闭电压调节器。整个1.8V供电区域被断电。 PLL HSI HSE 振荡器也被断电。 SRAM 和寄存器内容丢失。只有备份的寄存器和待机电路维持供电。

它除了关闭所有的时钟,还把 1.8V 区域的电源也完全关闭了,也就是说,从待机模式唤醒后,由于没有之前代码的运行记录,只能对芯片复位,重新检测 boot 条件,从头开始执行程序。

在待机模式下,所有的I/O引脚处于高阻态,除了以下的引脚:

● 复位引脚(始终有效)

● 当被设置为防侵入或校准输出时的TAMPER引脚

● 被使能的唤醒引脚

不同模式下唤醒方式对比

功耗越低的低功耗,其唤醒条件越严苛。

- 睡眠模式下,任一一个中断都是可以唤醒的(针对调用 WFI 命令进入的睡眠);


- 停止模式下,是任一一个外部中断才能唤醒,注意是任一外部中断,不是任一中断;


- 待机模式又有所不同,外部中断并不能唤醒待机模式,比较常见的唤醒有:

1.WKUP 引脚上升沿(按下 PA0,使之出现上升沿,只要 PA0 出现一个上升沿即可唤醒单片机,而不管这个上升沿持续多长时间,软件上只需要在进入待机模式之前,将 PA0 配置为唤醒功能即可);

2.NRST 引脚复位(即按下复位按键),这种方式是让单片机重新复位了,这是硬件上的唤醒;

3. 单片机系统重新上电,这跟第 2 点是一样的,都是硬件复位。

低功耗模式下的自动唤醒

低功耗模式下的自动唤醒(AWU)

RTC可以在不需要依赖外部中断的情况下唤醒低功耗模式下的微控制器(自动唤醒模式)RTC提供一个可编程的时间基数,用于周期性从停止或待机模式下唤醒。通过对备份区域控制寄存器(RCC_BDCR)的RTCSEL[1:0]位的编程,三个RTC时钟源中的二个时钟源可以选作实现此功能。

● 低功耗32.768kHz外部晶振(LSE)

该时钟源提供了一个低功耗且精确的时间基准。(在典型情形下消耗小于1µA)

● 低功耗内部RC振荡器(LSI RC)

使用该时钟源,节省了一个32.768kHz晶振的成本。但是RC振荡器将少许增加电源消耗。

为了用RTC闹钟事件将系统从停止模式下唤醒,必须进行如下操作:

● 配置外部中断线17为上升沿触发。

● 配置RTC使其可产生RTC闹钟事件。

如果要从待机模式中唤醒,不必配置外部中断线17

更高端的单片机比如F4有自动唤醒,而F1没有直接的自动唤醒,但可以通过RTC的闹钟事件来实现自动唤醒。

关键代码

/* Includes ------------------------------------------------------------------*/
#include "MyApplication.h"

/* Private define-------------------------------------------------------------*/

/* Private variables----------------------------------------------------------*/

/* Private function prototypes------------------------------------------------*/  
static void Sleep_Mode(void);   //睡眠模式
static void Stop_Mode(void);    //停机模式
static void Standby_Mode(void); //待机模式

/* Public variables-----------------------------------------------------------*/
LowPowerConsumption_t LowPowerConsumption = 
{
	FALSE,
	FALSE,
	FALSE,
	
	Sleep_Mode,
	Stop_Mode,   
	Standby_Mode
};

/*
	* @name   Sleep_Mode
	* @brief  睡眠模式
	* @param  None
	* @retval None      
*/
static void Sleep_Mode(void)
{
	/***Note:任意中断都可以将系统从睡眠模式中唤醒***/
	
	//关闭Systick与定时器中断,否则,进入睡眠模式后立马被唤醒
	HAL_SuspendTick();
	HAL_TIM_Base_Stop_IT(&htim6);
	//关闭外部中断0至2,只允许触摸按键4中断退出睡眠模式
	HAL_NVIC_DisableIRQ(EXTI0_IRQn);
	HAL_NVIC_DisableIRQ(EXTI1_IRQn);
	HAL_NVIC_DisableIRQ(EXTI2_IRQn);
	
	HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON,PWR_SLEEPENTRY_WFI);
	
	//恢复中断
	HAL_ResumeTick();
	HAL_TIM_Base_Start_IT(&htim6);
	HAL_NVIC_EnableIRQ(EXTI0_IRQn);
	HAL_NVIC_EnableIRQ(EXTI1_IRQn);
	HAL_NVIC_EnableIRQ(EXTI2_IRQn);
}

/*
	* @name   Stop_Mode
	* @brief  停机模式
	* @param  None
	* @retval None      
*/
static void Stop_Mode(void)
{
		/***Note:外部中断可将系统从停机模式中唤醒***/

	//关闭外部中断0至2,只允许触摸按键4中断退出停机模式
	HAL_NVIC_DisableIRQ(EXTI0_IRQn);
	HAL_NVIC_DisableIRQ(EXTI1_IRQn);
	HAL_NVIC_DisableIRQ(EXTI2_IRQn);
	
	HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON,PWR_STOPENTRY_WFI);
	
	//退出停止模式时,HSI RC振荡器被选为系统时钟
	//系统时钟需要重新初始化
	SystemClock_Config();
	//恢复中断
	HAL_NVIC_EnableIRQ(EXTI0_IRQn);
	HAL_NVIC_EnableIRQ(EXTI1_IRQn);
	HAL_NVIC_EnableIRQ(EXTI2_IRQn);
}

/*
	* @name   Standby_Mode
	* @brief  待机模式
	* @param  None
	* @retval None      
*/
static void Standby_Mode(void)
{
	HAL_PWR_EnterSTANDBYMode();
}
/********************************************************
  End Of File
********************************************************/

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

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

相关文章

基于最小二乘插值(Least-Squares Interpolation)图像超分辨率重构算法研究-附Matlab代码

⭕⭕ 目 录 ⭕⭕✳️ 一、引言✳️ 二、最小二乘图像插值理论与Matlab处理✳️ 三、基于最小二乘插值超分辨重构实验验证✳️ 四、参考文献✳️ 五、Matlab程序获取与验证✳️ 一、引言 图像超分辨率重构技术起源于上世纪60年代Harris和Goodman构造的单帧图像重构方法&#xf…

AutoCAD Electrical 2022—元件的绘制

原理图——图标菜单 选择要插入的元件; 根据实际情况,选择垂直放置还是水平放置,比例大小; 选择一个三极断路器,垂直放置; 点击确定后,点击一根导线,选择断路器另外两个符号是的方向…

相控阵天线(十一):阵列天线有源驻波分析

目录简介有源驻波概念和计算公式平面阵列天线的有源驻波平面阵列有源驻波计算公式平面阵列有源驻波仿真示例不同耦合系数/隔离度的有源驻波分析简介 有源相控阵最大的特点是每一个收发天线后均连接一个独立的T/R组件,每一个T/R组件相当于一个常规雷达的高频前端&am…

【信息检索与数据挖掘期末笔记】(二) IR Evaluation

文章目录测试集无序检索结果集合的评价Precision & RecallAccuarcy?F值有序检索结果评价方法二值相关(相关/不相关)PrecisionK(PK)Mean Average Precision(MAP)Mean Reciprocal Rank多级相关CG&#x…

LeetCode542. 01 矩阵(C++中等题)

题目 给定一个由 0 和 1 组成的矩阵 mat ,请输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。 两个相邻元素间的距离为 1 。 示例 1: 输入:mat [[0,0,0],[0,1,0],[0,0,0]] 输出:[[…

(三) 共享模型之管程【共享带来的问题】

一、共享带来的问题 1. 临界区 (1)一个程序运行多个线程本身是没有问题的 (2)问题出在多个线程访问共享资源 1️⃣多个线程读共享资源其实也没有问题 2️⃣在多个线程对共享资源读写操作时发送指令交错,就会出现问题 …

git@github.com: Permission denied (publickey).

本地虚拟机ubuntu上安装git,想从github上拉取项目到ubuntu上的过程。 1、在ubuntu上安装git 更新apt指令 sudo apt update 安装git sudo apt install git 查看安装git版本 git --version 2、ssh认证 首先已经安装了ssh指令 先执行 ssh -T gitgithub.com 执行之…

3.11 怎么增加小红书评论区的互动?【玩赚小红书】

今天就为大家总结了一下,关于小红书粉丝互动的一些小技巧,来供大家参考。 ​ ​ 一、 固好“真爱粉” 经常会在笔记下面评论、点赞、浏览笔记内容的粉丝,也就是所谓的“真爱粉”、“铁粉”,我们就需要用心维护这一部分粉丝。 ​…

虹科分享|硬件加密U盘|居家办公的网络安全:远程员工可以采取的步骤

新冠肺炎的流行迫使数以百万计的人在家工作,而当时他们对这一概念知之甚少,甚至完全没有经验。虽然许多员工已经重返办公室,但最近的一项研究发现,72%的受访者希望每周至少有两天在家工作,32%的人表示他们希望永久在家…

全波形反演的深度学习方法: 第 4 章 基于正演的 FWI (草稿)

本章论述经典的 FWI, 它基于正演方法. 本贴仅供内部培训. 4.1 FWI 问题 图 4.1 FWI 的输入与输出 [1].图 4.2 FWI 的数学式子.正演问题是建立从速度模型到地震数据的映射. 一般认为是单解的, 即一个速度模型只能生成一个地震数据 (如果不考虑噪声).反演问题是建立从地震数据到…

【题解】E. Sending a Sequence Over the Network(1741)

链接:https://codeforces.com/problemset/problem/1741/E 题目大意 给出一个数组,判断它是否是合法的,如果合法则输出YES,不合法则输出NO。 合法规则:一段序列中,这个序列的第一个或者最后一个的数值&…

岩藻多糖-聚乙二醇-胆固醇Cholesterol-PEG-FucoidanFucoidan-Cholesterol 岩藻多糖-胆固醇

岩藻多糖-聚乙二醇-胆固醇Cholesterol-PEG-FucoidanFucoidan-Cholesterol 岩藻多糖-胆固醇 中文名称:岩藻多糖-胆固醇 英文名称:Fucoidan-Cholesterol 别称:胆固醇修饰岩藻多糖,胆固醇-岩藻多糖 外观:固体或粘性液体&#xff…

终于有人将TWI(串行通讯接口)给讲通了!

目录 TWI的特性 数据传输格式 时钟同步 数据仲裁 功能描述 总线接口单元 频率生成单元 地址匹配单元 控制单元 传输模式 主机发送模式 主机接收模式 从机发送模式 从机接收模式 TWI的特性 两线模式,简单快捷;支持主机模式和从机模式&#xff…

「科普」如何评价供应商的MES系统

MES综合性很强,涉及到多个业务领域、多种技术和多专业,如何写好最难的投标技术方案呢?简搭(jabdp)根据多年经验,为大家进行梳理和分解,帮助发愁的你写出好方案! MES是一个综合性很强的系统: 生…

68 - 令人迷惑的写法

---- 整理自狄泰软件唐佐林老师课程 1. 写法一 下面的程序想要表达什么意思? 1.1 历史原因 早期的C直接复用class关键字来定义模板 但是泛型编程针对的不只是类类型 class关键字的复用使得代码出现二义性 1.2 typename诞生的直接诱因 自定义类类型内部的嵌套…

猿如意|手把手教你下载、安装和配置PyCharm社区版

手把手教你使用猿如意下载、安装和配置PyCharm社区版,希望能帮助到有需要的童鞋。 文章目录前言一、下载安装猿如意二、安装PyCharm社区版1.通过猿如意找到PyCharm下载位置2.安装PyCharm三、对PyCharm社区版进行简单设置1.设置PyCharm社区版为中文2.安装第三方Pytho…

数据同步,还看Canal

一个系统最重要的是数据,有时对于一个业务场景,不单单是把数据保存在数据库中,还需要同步保存在ES,Redis等等中。这时阿里开源组件Canal由此而生,它可以同步数据库中的增量数据保存到其它存储应用中。 一、介绍 canal…

航空专场 | 无人机设计仿真流程讲解与案例实操

一、CFD在无人机上的应用 1、静、动气动系数计算以上介绍的无人机的流动状态一般为中低雷诺数,不可压缩流动。这些计算一般用S-A模型或者KW-SST模型进行计算,能够获得不错的工程精度。静、动气动力系数主要用于无人机操纵性和稳定性的分析,评…

串口 COM口,并口 LPT口,RS232、RS485、CAN

RS232 和 RS485 的区别 工作模式:RS232 为全双工,RS485 为半双工。 传输方式:RS485和RS232只是物理协议的通信(即接口标准),RS485是差分传输方式,RS232是单端传输方式,但通信程序没有…

RabbitMQ_五种模式

1.Simple("Hello World") 构成:生产者、消费者、消息队列 配置类 构造函数参数:name durable exclusive autoDelete 仅创建队列,不创建交换机,也不进行队列和交换机的绑定 注:配置类置于生产者端或消费者…