详解STM32三种低功耗模式

发布者:亚瑟摩根最新更新时间:2023-04-03 来源: zhihu关键字:STM32  低功耗模式  工作模式 手机看文章 扫描二维码
随时随地手机看文章

01
前言

按功耗由高到低排列,STM32 具有运行、睡眠、停止和待机四种工作模式。上电复位后 STM32 处于运行状态,当内核不需要继续运行,就可以选择进入后面的三种低功耗模式降低功耗,这三种模式中,电源消耗不同、唤醒时间不同、唤醒源不同,用户需要根据应用需求,选择最佳的低功耗模式。三种低功耗的模式说明如下图:





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


02
不同模式下软件工作方式的对比

1、睡眠模式:在睡眠模式中,仅关闭了内核时钟,内核停止运行,但其片上外设,CM4 核心的外设全都还照常运行,在软件上表现为不再执行新的代码。这个状态会保留睡眠前的内核寄存器、内存的数据。唤醒后 ,若由中断唤醒,先进入中断,退出中断服务程序后,接着执行 WFI 指令后的程序;若由事件唤醒,直接接着执行 WFE 后的程序。唤醒延迟:无延迟。(WFI:Wait For Interrupt,WFE:Wait For Event)


2、停止模式:在停止模式中,进一步关闭了其它所有的时钟,于是所有的外设都停止了工作,但由于其 1.2V 区域的部分电源没有关闭,还保留了内核的寄存器、内存的信息,所以从停止模式唤醒,并重新开启时钟后,还可以从上次停止处继续执行代码。唤醒后,若由中断唤醒,先进入中断,退出中断服务程序后,接着执行 WFI 指令后的程序;若由事件唤醒,直接接着执行 WFE 后的程序。停止模式唤醒后,STM32 会使用 HSI(f1 的 HSI 为 8M,f4 为 12M)作为系统时钟。所以,有必要在唤醒以后,在程序上重新配置系统时钟,将时钟切换回 HSE。唤醒延迟 :基础延迟为 HSI 振荡器的启动时间,若调压器工作在低功耗模式,还需要加上调压器从低功耗切换至正常模式下的时间,若 FLASH 工作在掉电模式,还需要加上 FLASH 从掉电模式唤醒的时间。


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


03
不同模式下唤醒方式对比

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


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


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

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

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

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


04
不同模式下功耗的对比

目前这方面的资料比较少,stm32 的中文参考手册上提及的也比较少,因此以下内容只能作为参考,stm32F1 在停机模式下的功耗大概是 20 几 UA,而在待机模式下最低可以达到 5UA;而 stm32F4 在停机模式下的功耗大概是 350UA,而在待机模式下最低可以达到 2.2UA。资料参考来源于正点原子《stm32f1 开发指南》和《stm32f4 开发指南》。


05
实际项目中应用

在很多应用场合中都对电子设备的功耗要求非常苛刻,如某些传感器信息采集设备,仅靠小型的电池提供电源,要求工作长达数年之久,且期间不需要任何维护;由于智慧穿戴设备的小型化要求,电池体积不能太大导致容量也比较小,所以也很有必要从控制功耗入手,提高设备的续行时间。其实,只要是涉及到便携式的产品,都免不了要使用电池作为电源,否则,如果还是需要接一个插头使用市电来供电的话,那就无法称之为便携式了, 比如手机、运动手环、蓝牙耳机智能手表等都是类似的。所以,控制功耗,提高产品的续航时间,就显得尤为重要。


目前来说,针对 stm32 而言,比较常用的低功耗模式是停止模式和待机模式。具体如下:

- 待机模式:在实际应用中,通常会有一个开关机的按键(PA0),如果用户按下按键的话,就会开机或者关机,开机对应的就是唤醒,而关机对应的就是待机(类似于手机的开关机按键)。在此过程中,电池会一直给单片机的 3.3V 电源供电,也就是说,单片机一直都是有电的,但是它的所有外设以及时钟都处于关闭状态,之所以还要给单片机供电,只是为了在用户按下按键时检测 PA0 的上升沿而已,如果不给单片机供电的话,那么还怎么检测呢?检测不了。


- 停止模式:按道理来说,待机模式的功耗远比停止模式要低,为什么还要选择停止模式呢?通常是这样的,一个便携式的系统,除了考虑按键开关机以为,通常还需要给电池充电,而在充电的时候呢,往往需要显示一些充电的信息(现在的手机充电就是这样的),如果是在开机状态下充电的话,完全没有问题;但是,如果是在关机状态下充电呢?如果是在关机状态下充电,肯定就需要单片机能够自己唤醒自己(不需要用户按下 PA0),然后才有可能在 OLED 上显示充电的信息(手机关机了,或者没有电了,接通电源以后,可以自动显示充电的动画,就是这样做的)。


不按下 PA0 就实现唤醒功能,可以实现吗?可以,只需要在硬件上做一些改动即可,比如,将充电口的电压降压以后跟 PA0 相连,这样,只要充电口在充电,PA0 必定会出现一个从低到高的脉冲,这样就可以唤醒了。然而……,可是……,如果真的这么做的话,从软件的层面上,到底应该怎么样来区分 PA0 的上升沿是由于充电造成的呢?还是由于用户按下按键造成的呢(毕竟,如果是用户按下按键的话,软件上是要开机的,而如果只是充电,那么,只需要显示一下充电的信息就好了)?恐怕不好判断。


所以,这个时候,就可以考虑选择停止模式了,开关机按键接到一个引脚,充电口接到另外一个引脚,两个引脚都配置为外部中断,两个引脚也都可以唤醒单片机,分开了不同的信号电平,这样子,在软件上就可以很容易地判断出,当前到底是用户按下按键,还是充电口在充电了。


改进方式:针对第 2 点提出的问题,其实是有改进空间的,改进的空间就是在硬件上实现一个脉冲电路(在这里完全可以用一个简单的 RC 延时就实现了),就是说充电口的电平再经过一个 RC 电路以后,出来的就不会一直是高电平,而只是一个脉冲了,再把这个脉冲信号接到 PA0 即可,这个时候插入充电口和按下 PA0 就都会在 PA0 上出现一个脉冲了。软件上,可以利用长按开机,再长按关机(或者是先短按再长按也行)的机制来进行判别,如果 PA0 仅仅只是出现一个上升沿并且检测到充电芯片正在充电,此时就是充电口插入了,唤醒单片机,显示充电效果即可,如果是先短按再长按的话,就开机。


关键字:STM32  低功耗模式  工作模式 引用地址:详解STM32三种低功耗模式

上一篇:STM32固件IAP升级实战
下一篇:基于STM32、FreeRTOS实现硬件看门狗+软件看门狗监测多任务的思路

推荐阅读最新更新时间:2024-11-16 23:37

STM32 Nor Flash DFU
这次要讲讲怎么实现Nor Flash的升级。 Nor Flash的DFU工程还是基于之前的flash DFU的工程上修改而来。工程的目录如下: 我使用的Nor Flash芯片是M29W128F,该芯片共有128Mb的空间,通过FSMC挂接在BANK0。正好在UBS的官方程序里也有使用芯片的例子,所以也就是说管方的Nor Flash的驱动代码是使用M29W128F这款芯片的。所以我们需要从拷贝fsmc_nor.c和fsmc_nor,h这两个文件添加到我们的USB_User这个组中。还要讲我们之前的flash_if文件修改为nor_if名。这样工程的文件就算齐了,下面就讲讲怎么修改个文件。 首先hw_config、usb_ist
[单片机]
<font color='red'>STM32</font> Nor Flash DFU
STM32 IO口模拟串口通讯
前阵子,调项目时需要用到低波特率串口通讯(300的波特率),才发下发现在正常情况下(PCLK1时钟频率为72M,PCLK2时钟频率为36M):STM32的USART0的最低波特率只能设置到1200,;而USART1最低波特率只能设置到600。怎么设置STM32的600或以下的波特率呢?有两种方法:一种是改变外设时钟频率,而另一种方法就是使用IO口模拟串口通讯。今天就来讲讲,用IO口模拟串口通信! 1、串口传输协议 首先,必须要知道串口通讯时数据是怎样传输的?这里以异步传输字符为例子,如下图所示: 一般字符传输都采用:1位起始位,8位数据位,1位停止位,没有校验位 的形式传输,其他形式的这里不讲。串口异步传输在空闲状态时都必须是
[单片机]
<font color='red'>STM32</font> IO口模拟串口通讯
STM32的启动堆栈初始化
有几个问题,众多博文中抄来抄去,内容一样,却没有解释清楚 上电初始化堆栈,在进入_main后又说初始化堆栈,有什么不同 堆栈的地址是怎么得出来的 关于这两个问题,先借用一下要标准的启动流程 一般而言,系统上电后第一个执行的是由汇编所编写的启动文件,其主要工作为一下五部分: (1)、初始化堆栈指针SP=_initial_sp (2)、初始化PC指针,令其=Reset_Handler (3)、初始化中断向量表 (4)、配置系统时钟 (5)、调用C库函数_main初始化用户堆栈,从而最终调用main函数进入C的世界 STM32的中断向量表规定每一行必须是SP地址,第二行是复位中断入口地址,上电后,C
[单片机]
ARM开发(2)基于STM32的蜂鸣器
一 蜂鸣器原理: 1.1 本实验实现1个蜂鸣器间隔1S鸣叫。 1.2 实验思路:根据电路图原理,给蜂鸣器相关引脚赋予高低电平,实现电路的导通,使蜂鸣器实现鸣叫或不鸣。 1.3 开发环境 : MDK5 库函数版本开发 JLINK仿真 二 实验步骤: 2.1 beep.h代码: #ifndef __BEEP_H #define __BEEP_H #include “sys.h” #define BEEP PBout(10) // BEEP,蜂鸣器接口 void BEEP_Init(void); //初始化 #endif 2.2 beep.c代码(IO配置): #include “beep.h” void
[单片机]
STM32位带操作举例
STM32位带操作举例 int main(void) { GPIO_InitTypeDef GPIO_InitStruction; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_InitStruction.GPIO_Pin=GPIO_Pin_8; GPIO_InitStruction.GPIO_Mode=GPIO_Mode_Out_OD; GPIO_InitStruction.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStruction); //PA8 /*whil
[单片机]
STM32-NVIC中断嵌套优先级管理器
NVIC简介 NVIC(Nested Vectored Interrupt Controller),中断嵌套向量控制器,是 Cortex‐M3 不可分离的一部分,它与 CM3 内核共同完成对中断的响应。在了解NVIC之前最好简单了解一下CM3内核的中断系统,传送。 NVIC 共支持 1 至 240 个外部中断输入(通常外部中断写作 IRQn),每个中断有最高256(最低8)级的优先级,具体的中断数和优先级级数由芯片厂商在设计芯片时决定(STM32F1支持60个外部中断,16级优先级)。此外,NVIC 还支持一个“永垂不朽”的不可屏蔽中断(NMI)输入。NMI 的实际功能亦由芯片制造商决定。在某些情况下,NMI 无法由外部中断源
[单片机]
STM32-NVIC中断嵌套优先级管理器
基于STM32的水位传感器气密性检测仪
在水位传感器的出厂检测过程中需要进行气密性检测,为此,设计了一个基于STM32的水位传感器气密性检测仪。该检测仪采用直压式气体检漏的方法,以STM32F030R8为控制核心,控制气泵进行充气,压力传感器检测气压并通过电桥差分信号输出,高精度气压测量模块测量电桥信号的输出,通过程序控制实现气密性检测的加压、稳压、保载、判断、输出等步骤,并将判断结果通过LCD显示和继电器输出。通过多次实验和测试,该气密性检漏系统能够实现对水位传感器泄漏的检测,且实验数据较为准确、稳定,重复性较好。 引言 早期对气密性检测常采用的是气泡法,即将待测工件放入水中,向待测工件的腔体中充入一定压力的气体,通过观察有无气泡从水中冒出来判断气密性好坏。气泡法
[单片机]
基于<font color='red'>STM32</font>的水位传感器气密性检测仪
STM32输入捕获模式
输入捕获模式可以用来测量脉冲宽度或者测量频率。STM32的定时器,除了TIM6和TIM7,其他定时器都有输入捕获功能。STM32的输入捕获,简单的说就是通过检测TIMx_CHx上的边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT)存放到对应的通道的捕获/比较寄存(TIMx_CCRx)里面,完成一次捕获。同时还可以配置捕获时是否触发中断/DMA 等. 例如:我们用到TIM5_CH1来捕获高电平脉宽,也就是要先设置输入捕获为上升沿检测,记录发生上升沿的时候TIM5_CNT的值。然后配置捕获信号为下降沿捕获,当下降沿到来时,发生捕获,并记录此时的TIM5_CNT值。这样,前后两次TI
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved