stm32几种低功耗模式的实现和差别

195 篇文章 9 订阅

origin: https://blog.csdn.net/jian3214/article/details/99818603

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仅仅只是出现一个上升沿并且检测到充电芯片正在充电,此时就是充电口插入了,唤醒单片机,显示充电效果即可,如果是先短按再长按的话,就开机。

 

本文来源于网络

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用STM32Cube配置模式的步骤如下: 1. 打开STM32CubeMX软件,选择对应的芯片型号STM32L431CBT6,创建一个新工程。 2. 在工程配置界面中,选择“电源管理”标签页。 3. 在“电源管理”标签页中,可以看到“模式”选项。选择需要使用的模式,例如“Stop mode”。 4. 配置模式的唤醒源。在“电源管理”标签页中,可以看到“唤醒源”选项。选择需要使用的唤醒源,例如“外部中断线”。 5. 在“时钟配置”标签页中,配置外部中断线的时钟。选择需要使用的外部中断线,例如“EXTI0”。 6. 在“GPIO”标签页中,配置外部中断线对应的GPIO口。选择需要使用的GPIO口,例如“GPIOA Pin0”。 7. 生成代码并下载到芯片中运行。 以上是使用STM32Cube配置模式的基本步骤。需要注意的是,在实际应用中,需要根据具体的需求进行配置。例如,需要考虑唤醒源的电平、中断优先级等因素。 ### 回答2: STM32L431CBT6是一款型的ARM Cortex-M4微控制器,它配备了丰富的外设和能。使用STM32Cube配置模式可以进一步优化该微控制器的电力消,延长电池寿命。 首先,确保已经安装了STM32Cube软件包。打开STM32CubeMX,创建一个新的工程,并选择对应的芯片型号(STM32L431CBT6)。 在"Pinout & Configuration"选项卡中,可以配置芯片的引脚和能。这里需要注意,选择模式需要合理配置引脚的电流、能。 接下来,点击"Power Consumption"选项卡,在这里可以配置芯片的模式。选择合适的模式,如运行模式、睡眠模式或停机模式,并根据需求选择适当的时钟频率和电压水平。 点击"Peripherals"选项卡,可以配置外设的优化设置。设置每个外设的睡眠模式模式和唤醒源,从而实现外设的化。 在"Configuration"选项卡中,可以配置其他的系统参数和选项,如时钟源、RTC配置、窗口看门狗、ADC等,以进一步优化系统的。 完成以上配置后,点击"Project"菜单,选择"Generate code"。根据生成的代码,在开发环境中进行代码开发及编译。 使用STM32Cube配置模式时,还需要注意以下几点: 1.合理地利用模式,根据实际需求选择适当的模式。不同的模式具有不同的和性能折衷。 2.配置外设的模式时,需考虑到唤醒和睡眠过程中外设的状态切换,以确保正确的系统能和外设的操作。 3.在设计硬件电路时,应根据模式的需求选择合适的电源管理电路,以保证系统的稳定运行。 总之,通过使用STM32Cube配置模式,我们可以针对特定的应用需求对芯片进行优化,从而实现、高效能的系统运行。 ### 回答3: STM32L431CBT6是一款的ARM Cortex-M4微控制器,可通过STM32Cube软件进行配置。下面是使用STM32Cube配置模式的步骤。 1. 下载和安装STM32Cube软件套件,并确保已正确安装了ST-Link驱动程序。 2. 打开STM32CubeMX配置工具,并创建一个新的工程。选择STM32L431CBT6作为目标微控制器。 3. 在Pinout & Configuration选项卡中,配置所有需要的引脚和外设。 4. 在Power Consumption设置中,可以选择使用哪种模式。根据实际需求,可以选择Sleep、Stop、Standby或Shutdown模式。 5. 在Configuration阈值中,设置待机模式的唤醒源。可以选择定时器、外部中断或其他外部事件。 6. 在配置完成后,点击"Project"菜单,选择"Generate Code"生成工程代码。 7. 打开生成的代码,找到main.c文件,并在其中添加模式相关的代码。 8. 根据选择的模式,在main函数中添加相应的代码。例如,如果选择Stop模式,可以在main函数中添加以下代码: HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); 9. 编译和下载代码到STM32L431CBT6微控制器。 通过以上步骤,可以使用STM32Cube配置STM32L431CBT6的模式。根据实际需求,可以选择不同的模式,并设置相应的唤醒源。这样可以有效地降,延长电池寿命。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值