其他分享
首页 > 其他分享> > 浅谈stm32的低功耗模式

浅谈stm32的低功耗模式

作者:互联网

stm32标准库实现低功耗

一、概述

stm32不同系列芯片支持的低功耗模式各有差异,本文以F103系列芯片为例,简单讲解不同低功耗模式的特点和使用方法。

二、低功耗

简述

默认情况下,系统或电源复位后,微控制器处于Run模式。当CPU不需要保持运行时(例如等待外部事件时),可以使用几种低功耗模式来节省电源。这取决于用户选择的模式,以提供低功耗、较短启动时间和可用的唤醒源之间的最佳折衷。

stm32f10xxx 设备有三种低功耗模式:

另外,mcu在运行模式(run)下也可以通过以下方式降低功耗:

上面这三种低功耗模式的具体描述可以看下面这个图,觉得阅读英文不方便的话请自行翻译,我觉得这更有助于你去理解这几个模式的特点。
低功耗模式详细描述

下面这张表更好的汇总了各种低功耗模式的特点:
123

详细介绍

下面会简单介绍各种降低功耗的方法,包括run、sleep、stop、standby。

run模式下

1、Slowing down system clocks(run模式下降低功耗)

run模式下,我们可以通过对预分频器编程来降低系统时钟(SYSCLK, HCLK, PCLK1, PCLK2);
在进入sleep模式之前,我们也可以对预分频器编程来降低外设时钟。

详细请查阅RCC_CFGR寄存器,这里不展开描述。

2、 Peripheral clock gating(外围时钟门控)

在Run模式下,每个外设和存储器的HCLK和PCLKx可以随时停止,以降低功耗。
在sleep模式下,在执行WFI或者WFE内核指令之前我们可以关闭一些不需要使用的外设时钟来进一步降低功耗。

低功耗模式下(分为sleep、stop、standby)

1、sleep mode

进入sleep模式

通过执行WFI (Wait For Interrupt)或WFE (Wait For Event)指令进入Sleep模式。根据Cortex®-M3系统控制寄存器中的SLEEPONEXIT位,有两种选项可用于选择Sleep模式进入机制:

退出sleep模式

如果使用WFI指令进入睡眠模式,任何被NVIC确认的外设中断都可以从睡眠模式唤醒设备。

如果使用WFE指令进入Sleep模式,则在事件发生时,MCU将立即退出Sleep模式。唤醒事件可以通过以下任意一种方式产生:

所有进入和退出休眠的细节汇总成以下表格:
111

2、stop mode

简述

停止模式是基于Cortex®-M3深度睡眠模式结合外围时钟门控。电压调节器可以配置在普通模式或低功率模式。

在停止模式下,1.8 V域中的所有时钟都停止,锁相环、HSI和HSE RC振荡器都被禁用。SRAM和寄存器的内容被保留。

在停止模式下,所有I/O引脚保持与运行模式相同的状态。

进入停止模式

在停止模式下,可以通过编程单个控制位来选择以下特性:

此外,ADC或DAC在停止模式下也会消耗电能,除非他们在进入停止模式之前被禁用。
要禁用它们,ADC_CR2寄存器中的ADON位和DAC_CR寄存器中的ENx位必须都写为0。

退出停止模式

当通过发出中断或唤醒事件退出Stop模式时,HSI RC振荡器被选为系统时钟。

当电压调节器在低功率模式下运行时,当从停止模式唤醒时,会产生额外的启动延迟。通过在停止模式期间保持内部调节器(这里是指电压调节器)处于ON状态,虽然减少了启动时间,但消耗更高。

下图汇总了停止模式进入和退出的细节信息。
停止模式细节

注意:

  1. 在进入停止模式之前,要清除所有中断挂起位,如上图所述。
  2. 唤醒之后记得要重新配置系统时钟。

3、Standby mode

简述

“待机”模式可以实现最低的功耗。它基于Cortex®-M3深度睡眠模式,禁用电压调节器。导致1.8 V域下电。锁相环、HSI振荡器和HSE振荡器也处于关闭状态。除了备份域和备用电路中的寄存器外,SRAM和寄存器的内容都会丢失。

进入待机模式

在待机模式下,可以通过编程单个控制位来选择以下特性:

退出待机模式

当外部复位(NRST引脚)、IWDG复位、WKUP引脚上升沿或RTC告警上升沿发生时,微控制器退出待机模式。
除电源控制/状态寄存器(PWR_CSR)外,所有寄存器都在Standby唤醒后重置。

从待机模式唤醒后,程序跟复位后一样重新启动。电源控制/状态寄存器(PWR_CSR)中的SBF状态标志表示MCU处于待机模式。所以程序重新运行后我们可以读取这个状态标志SBF来判断是否从待机模式唤醒。

下图汇总了待机模式进入和退出的细节信息。
待机模式

注意:
在待机模式下,所有I/O引脚都是高阻态的,除了:

调试模式

默认情况下,如果应用程序在调试功能使用时将MCU置于停止或待机模式,调试连接将丢失。这是因为Cortex®-M3内核停止工作了。

但是,通过在DBGMCU_CR寄存器中设置一些配置位,即使正在使用低功耗模式,也可以对软件进行调试。

核心不允许在调试会话期间关闭FCLK或HCLK。因为这些是调试器连接所需的,所以在调试期间,它们必须保持活动状态。单片机集成了特殊的方法,允许用户在低功耗模式下调试软件。为此,调试器主机必须首先设置一些调试配置寄存器来改变低功耗模式的行为:

这里不开展描述,有兴趣请参考相关用户手册。

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

RTC可以用来从低功耗模式唤醒MCU,而不依赖外部中断(自动唤醒模式)。
RTC提供了一个可编程的时间基准,从停止或待机模式在定期间隔唤醒。
为此,可以通过对备份域控制寄存器(RCC_BDCR)中的RTCSEL[1:0]位进行编程来选择三个RTC时钟源中的两个,如下图:
1234

要使用RTC闹钟事件从Stop模式唤醒,需要:
1、将EXTI Line 17设置为对上升沿敏感
2、配置RTC产生RTC闹钟
从Standby模式中唤醒,不需要配置EXTI Line 17。

下面汇总一些各个低功耗模式的特点和使用方法:
1234
23456

总结

本文简单介绍了STM32F1系列低功耗模式的特点和使用方法,使本人加深了对这些低功耗模式涉及的对象的理解,便于后续的低功耗设计和应用。
好记性不如烂笔头。

参考资料

参考手册
datasheet
编程手册

标签:浅谈,低功耗,模式,stm32,停止,寄存器,唤醒,时钟
来源: https://www.cnblogs.com/lxyjrx/p/16223115.html