[其他ST产品] STM32的低功耗管理(附源码)

[复制链接]
1111|32
 楼主| 9dome猫 发表于 2022-4-29 11:51 | 显示全部楼层 |阅读模式
STM32系列MCU的几种工作模式
正常运行模式就不聊了,刚开始学单片机时候,什么都不干,down个代码就能跑起来的大多是这种模式,不缺电,不需要省电...
从STM32G070手册来看,模式还是比较丰富的,下面来看看各个模式的意思

95212626b60af35f67.png

 楼主| 9dome猫 发表于 2022-4-29 11:51 | 显示全部楼层
1、睡眠模式(sleep mode)
仅仅是内核停止,所有外设包括Cortex-M3核心的外设,如NVIC、系统时钟(SysTick)等仍在运行
 楼主| 9dome猫 发表于 2022-4-29 11:53 | 显示全部楼层
2、低功耗运行模式(Low-power run mode)
该模式通过低功率调节器提供的VCORE来实现,以最小化 调节器的工作电流。代码可以从SRAM或Flash执行, CPU频率限制在2MHz。具有独立时钟的外围设备时钟可以来自HSI16
 楼主| 9dome猫 发表于 2022-4-29 11:53 | 显示全部楼层
3、低功耗睡眠模式(Low-power sleep mode)
从低功耗运行模式进入该模式。只有CPU时钟停止。当有事件或中断触发唤醒时,系统将恢复到低功耗状态运行模式。
 楼主| 9dome猫 发表于 2022-4-29 11:54 | 显示全部楼层
4、停止模式(STOP)
停止模式又分为STOP0、STOP1模式

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

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

一些具有唤醒功能的外围设备可以在停止模式下启用HSI16 RC,以便获取用于处理唤醒事件的时钟。主调节器保持激活状态在停止0模式下,在停止1模式下关闭。
 楼主| 9dome猫 发表于 2022-4-29 11:54 | 显示全部楼层
5、待机模式(Standby mode)
待机模式用于实现最低功耗,使用POR/PDR在此模式下始终处于活动状态。主调节器关闭,以关闭VCORE电源 领域低功率调节器关闭。PLL和HSI16 RC振荡器和HSE晶体振荡器也断电。RTC可以保留活动(带RTC的待机模式,不带RTC的待机模式)。

对于每个I/O,软件可以确定是上拉、下拉还是无电阻 应在待机模式下应用于该I/O。进入待机模式时,寄存器内容丢失,RTC中的寄存器除外 域和备用电路。
 楼主| 9dome猫 发表于 2022-4-29 11:55 | 显示全部楼层
如何进入低功耗模式
如何进入低功耗模式比较简单,HAL库为我们封装好了对应的函数,我们只需要调用即可

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

首先是几种低功耗模式的简单介绍,着重介绍stop模式,也是小飞哥设计产品遇到的,其他模式,用到时候再与小伙伴们分享...
 楼主| 9dome猫 发表于 2022-4-29 11:56 | 显示全部楼层
 楼主| 9dome猫 发表于 2022-4-29 12:00 | 显示全部楼层
进入各个低功耗模式的函数原型如下,主要包括sleep mode,standby mode,stop mode
87941626b61eba187c.png
接下来看看每个函数的入口参数及含义是怎样的
 楼主| 9dome猫 发表于 2022-4-29 12:01 | 显示全部楼层
1、sleep mode入口函数
参数主要有两个,函数介绍里面写的很清楚
71585626b630be9a4c.png
 楼主| 9dome猫 发表于 2022-4-29 12:01 | 显示全部楼层
第一个参数regulator表示的是我们采用哪一种sleep模式,sleep和low-power sleep mode,通过选择对应的模式即可

16255626b63337d20b.png
 楼主| 9dome猫 发表于 2022-4-29 12:02 | 显示全部楼层
2、standy mode入口函数

64778626b63555023c.png
 楼主| 9dome猫 发表于 2022-4-29 12:06 | 显示全部楼层
 楼主| 9dome猫 发表于 2022-4-29 12:07 | 显示全部楼层
3、stop mode入口函数
第一个参数regulator表示的是我们采用哪一种stop模式,stop0和stop1模式,通过选择对应的模式即可,第二个参数表示唤醒的方式,通过指令或者等待唤醒事件唤醒MCU
 楼主| 9dome猫 发表于 2022-4-29 12:08 | 显示全部楼层
 楼主| 9dome猫 发表于 2022-4-29 12:08 | 显示全部楼层
 楼主| 9dome猫 发表于 2022-4-29 12:10 | 显示全部楼层
低功耗唤醒
最近设计产品主要用到了stop1模式,接下来就着重来介绍下stop1模式的进入与唤醒

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

1、RTC定时唤醒;

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

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

下面就来看一看如何通过RTC和外部中断唤醒MCU
 楼主| 9dome猫 发表于 2022-4-29 12:13 | 显示全部楼层
1、RTC定时唤醒
依然是从手册中我们可以看到,所有的RTC时间都可以把MCU从低功耗模式中唤醒

67740626b65cb61d5c.png
 楼主| 9dome猫 发表于 2022-4-29 12:14 | 显示全部楼层
本文仅仅介绍使用RTC的定时功能实现,定时1S唤醒一次,使用cubemx进行对RTC进行配置
26891626b662dc418a.png
 楼主| 9dome猫 发表于 2022-4-29 12:15 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

142

主题

1593

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部