聊一聊STM32的低功耗管理(附源码)

废话不多说,直接开干...

先来看看STM系列手册为例看看STM32的几种工作模式,小飞哥最近用到STM32G0系列的MCU,就拿G0的手册来聊一聊吧,其他的都类似,功耗方面有些差别

测试代码连接在文末评论区,可以下载测试

STM32系列MCU的几种工作模式

正常运行模式就不聊了,刚开始学单片机时候,什么都不干,down个代码就能跑起来的大多是这种模式,不缺电,不需要省电...

从STM32G070手册来看,模式还是比较丰富的,下面来看看各个模式的意思

1、睡眠模式(sleep mode)

仅仅是内核停止,所有外设包括Cortex-M3核心的外设,如NVIC、系统时钟(SysTick)等仍在运行

2、低功耗运行模式(Low-power run mode)

该模式通过低功率调节器提供的VCORE来实现,以最小化 调节器的工作电流。代码可以从SRAM或Flash执行, CPU频率限制在2MHz。具有独立时钟的外围设备时钟可以来自HSI16

3、低功耗睡眠模式(Low-power sleep mode)

从低功耗运行模式进入该模式。只有CPU时钟停止。当有事件或中断触发唤醒时,系统将恢复到低功耗状态运行模式。

4、停止模式(STOP)

停止模式又分为STOP0、STOP1模式

在“停止0”和“停止1”模式下,设备的功耗最低,同时 保留SRAM和寄存器内容。VCORE域中的所有时钟都已停止。

PLL,以及HSI16 RC振荡器和HSE晶体振荡器 失能,LSE或LSI继续运行。RTC可以保持激活(停止模式 RTC,停止模式(无RTC)。

一些具有唤醒功能的外围设备可以在停止模式下启用HSI16 RC,以便获取用于处理唤醒事件的时钟。主调节器保持激活状态在停止0模式下,在停止1模式下关闭。

5、待机模式(Standby mode)

待机模式用于实现最低功耗,使用POR/PDR在此模式下始终处于活动状态。主调节器关闭,以关闭VCORE电源 领域低功率调节器关闭。PLL和HSI16 RC振荡器和HSE晶体振荡器也断电。RTC可以保留活动(带RTC的待机模式,不带RTC的待机模式)。

对于每个I/O,软件可以确定是上拉、下拉还是无电阻 应在待机模式下应用于该I/O。进入待机模式时,寄存器内容丢失,RTC中的寄存器除外 域和备用电路。

如何进入低功耗模式

如何进入低功耗模式比较简单,HAL库为我们封装好了对应的函数,我们只需要调用即可

简单来看下各种模式的函数接口,在stm32g0xx_hal_pwr.c文件中

首先是几种低功耗模式的简单介绍,着重介绍stop模式,也是小飞哥设计产品遇到的,其他模式,用到时候再与小伙伴们分享...

进入各个低功耗模式的函数原型如下,主要包括sleep mode,standby mode,stop mode

接下来看看每个函数的入口参数及含义是怎样的

1、sleep mode入口函数

参数主要有两个,函数介绍里面写的很清楚

第一个参数regulator表示的是我们采用哪一种sleep模式,sleep和low-power sleep mode,通过选择对应的模式即可

2、standy mode入口函数

3、stop mode入口函数

第一个参数regulator表示的是我们采用哪一种stop模式,stop0和stop1模式,通过选择对应的模式即可,第二个参数表示唤醒的方式,通过指令或者等待唤醒事件唤醒MCU

低功耗唤醒

最近设计产品主要用到了stop1模式,接下来就着重来介绍下stop1模式的进入与唤醒

就像人睡觉一般,MCU进入低功耗之后,以极低的功耗维持着系统“活着”,但是醒过来是需要一定条件的,比如定个“闹钟”,按键“按一下”等,目前常用的“正常的”唤醒方式有以下几种:

1、RTC定时唤醒;

2、外部中断唤醒(按键或者通讯唤醒);

3、特殊唤醒引脚唤醒(某些引脚具有专门的唤醒功能);

下面就来看一看如何通过RTC和外部中断唤醒MCU

1、RTC定时唤醒

依然是从手册中我们可以看到,所有的RTC时间都可以把MCU从低功耗模式中唤醒

本文仅仅介绍使用RTC的定时功能实现,定时1S唤醒一次,使用cubemx进行对RTC进行配置

生成代码的时候,勾选这个选项,可以把不用的引脚配置为模拟输入模式,降低功耗

RTC的配置如图:

使能RTC,1S中断唤醒一次

接着我们在while(1)里面写下面的代码,通过串口打印出唤醒信息,实际上代码在执行的时候,遇到红框出的低功耗入口函数,代码会停止在这里,当遇到唤醒信号的时候,会继续往下执行,一般进入STOP模式之前我们会先配置好唤醒所需要的条件,相应的IO等进入低功耗状态,唤醒之后,把硬件相关的重新初始化,才可以正常使用

2、外部中断唤醒

外部中断也可以用来唤醒MCU,需要提供一个下降沿用以把MCU从低功耗中唤醒

我们就直接使用串口的RX作为外部中断引脚唤醒,使用串口3的RX也即是PB11引脚,关于外部中断这里不做具体介绍了,需要的小伙伴可以私信我,专门出一期介绍

需要先配置IO口为外部中断模式:

在进入低功耗模式之前一定要先配置,这样才能够正常唤醒

接下来,我们通过串口助手发送数据触发外部中断,然后打印唤醒信息,就是这样简单

经验交流

今天的分享就要OVER了,希望对各位小伙伴有一些帮助,有疑问的可以+小飞哥好友,一起交流学习

  • 7
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
陀螺仪STM32源码是指适用于STM32系列芯片的陀螺仪驱动程序源代码。陀螺仪是一种用于测量角速度的传感器,常用于姿态控制、导航和稳定性控制等应用中。 STM32是意法半导体(STMicroelectronics)公司推出的一款系列微控制器。它具有高性价比、低功耗、丰富的外设和强大的处理能力,适用于广泛的应用领域。陀螺仪STM32源码就是为了在STM32平台上实现对陀螺仪传感器的驱动和数据获取而开发的。 陀螺仪STM32源码通常包含以下方面的内容: 1. 寄存器配置:将陀螺仪传感器连接到STM32芯片的特定引脚,并对寄存器进行初始化配置,以确保正常的数据采集和传输。 2. 通信协议:陀螺仪通常使用I2C或SPI等接口与STM32芯片进行通信,源码会包含具体的通信协议实现。 3. 数据处理:陀螺仪传感器输出的数据通常需要进行相关处理,例如数据滤波、校准和单位换算等,以获得准确的测量结果。源码中会包含这些数据处理算法的实现。 4. 数据读取与传输:源码提供了读取陀螺仪传感器数据的函数接口,通过这些接口可以获取传感器输出的角速度值。同时,源码还可能包含将数据传输到其他设备的函数接口实现。 总之,陀螺仪STM32源码是为了在STM32系列芯片上实现陀螺仪传感器的驱动和数据获取而开发的程序,它包含了陀螺仪传感器与STM32芯片之间的通信协议、数据处理算法以及数据读取与传输等功能。该源码可以帮助开发人员更好地利用STM32的性能和功能,实现各种陀螺仪应用。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小飞哥玩嵌入式

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值