STM32学习笔记之低功耗模式的机制

发布者:平静宁静最新更新时间:2017-09-09 来源: eefocus关键字:STM32  低功耗模式  机制 手机看文章 扫描二维码
随时随地手机看文章



本文主要解读STM32低功耗模式的机制,并不侧重STM32低功耗的程序实现,而且借助STM32固件库实现STM32低功耗会变的非常简单。

一、STM32芯片性能

使用芯片型号:stm32,CORTEX -M0.封装TSSOP20.

运行模式:内部时钟(HSI),系统时钟频率采用48MHZ。

工作电压:3.3V

芯片具体参数如下:



二、芯片功耗

功耗:



芯片工作模式:

工作模式:外设正常运行,内核CPU及SRAM供电,未使用外设的时钟默认关闭。

睡眠模式:只有CPU停止工作,各个外设正常工作,依靠任何中断/事件唤醒。

停机模式:1.8V供电区域时钟被停止,内部HSI,PLL,外部时钟HSE均关闭,同时电压检测器也可进入低功耗模式,但SRAM和寄存器不断电,此时只能依靠外部中断(EXTI)和RTC时钟才能唤醒。

待机模式:1.8V供电区域被时钟停止,内部HSI,PLL,外部时钟HSE均关闭,同时电压检测器也可进入低功耗模式,SRAM和不属于待机电路的寄存器也被断电关闭,此时即使是外部中断(EXTI)也不能将其唤醒,只能通过复位(外部复位,看门狗复位)、唤醒引脚、RTC时钟来唤醒。

注意:无论是在停止模式 还是待机模式下,RTC和IWDG及其时钟源不会被关闭。

各个模式功耗:

功耗计算方式:功耗=工作电压*工作电流。





I/O模块损耗:

静态损耗:

内部上下拉电阻损耗:这部分损耗主要取决于内部电阻的大小,一般为了降低内部电阻损耗常常需要降低电阻两端电压,若引脚为低电压则采用下拉电阻,若引脚为高电压则采用上拉电阻。

I/O额外损耗:当引脚设为输入I/O时,用来区分电压高低的斯密特触发器电路会产生一部分消耗,为此可将引脚设为模拟输入模式。

动态损耗:对于悬浮的引脚,由于其电压不稳定会产生外部电磁干扰和损耗,因此必须把悬浮引脚设为模拟模式或输出模式,引脚电压的切换会对外部和内部电容负载产生动态损耗,其损耗与电压切换频率和负载电容有关。具体损耗值如下:


三、CORTEX-M0低功耗功能、指令、相关寄存器

CORREX内核支持低功耗模式有2种:

睡眠模式:CPU时钟停止,对应stm32睡眠模式

深度睡眠模式:系统时钟停止,PLL,FLASH 关闭,对应stm32停机模式。

进入睡眠模式:

当CPU处理完中断后软件必须能使其进入睡眠模式,当CPU执行WFI指令,其将会立即进入睡眠模式,当异常产生或中断被挂起时,其立即被唤醒。

当CPU执行WFE指令时,它首先会检查对应的事件标志位,当事件标志寄存器为0时进入睡眠模式,否则将寄存器事件标志清0并继续执行程序。事件标志可由外部事件标志或SEV指令产生。

返回方式:通过设置内核SCB寄存器的Sleep-on-exit位,可以选择系统被唤醒执行完中断服务程序后进入主线程模式后是否立即进入睡眠模式。

从睡眠中唤醒:

WFI唤醒或sleep-on-exit:

一般来说,使能的异常可以唤醒内核。对于一些系统,在唤醒后执行中断处理程序前需要先执行重新恢复的任务,则首先需要屏蔽所有中断(PRIMASK=1),中断发生后内核被唤醒但不执行中断处理,待执行完恢复任务后再将PRIMASK设为0,此后执行中断处理任务。

WFE唤醒:

使能异常可以唤醒内核。外部事件或SEV指令发送的事件也可唤醒内核。

注意:当SCR的SEVONPEND设置为1时,任何使能/非使能中断或事件都可唤醒内核。

中断唤醒控制器(WIC):

WIC只有在SCR寄存器DEEPSLEEP位设为1时才能使能,WIC不可编程也没有相关的控制寄存器,它仅与硬件信号有关,当进入深睡眠时内核大部分模块被关闭,系统计数器也被关闭,因此当内核被唤醒时需要较多的时间恢复到睡眠前的状态并处理中断。

外部事件输入:可在WFE模式下唤醒内核。

相关指令:

WFE  等待事件,若无事件则睡眠,中断、事件唤醒

WFI   等待中断,立即进入睡眠,中断唤醒

SEV  软件发送一个事件,在核系统中可唤醒另一个内核。

微控制器软件接口标准:

由指令对应的C语言接口:

//core_cmInstr.h

void __WFE(void) // Wait for Event

void __WFI(void) // Wait for Interrupt

void __SEV(void) // Send Event

相关寄存器:

SCR寄存器:



SEVONPEND:

0: 只有使能的中断或事件才能唤醒内核。

1: 任何中断和事件都可以唤醒内核。

SLEEPDEEP:

0: 低功耗模式为睡眠模式。

1: 进入低功耗时为深度睡眠模式。

SLEEPONEXIT:

0:  被唤醒进入线程模式后不再进入睡眠模式。

1: 被唤醒后执行完相应的中断处理函数后进入睡眠模式。

四、STM32时钟管理

运行模式下可通过关闭和降低相关外设的时钟频率来减少功耗。

APB 外设时钟和DMA时钟可用软件禁止。

睡眠模式停止CPU时钟。在CPU睡眠中存储器接口时钟(Flash和RAM接口)可被停止。当连接到APB所有外设的时钟禁止后,当进入睡眠期间AHB 到APB桥时钟由CPU的硬件关闭。

CPU进入停止模式时停止V18域、PLL、HSI、HSI14和HSE振荡器的时钟。

HDMI CEC, USART1 和I2C1 即使在MCU 进入停止模式下仍有能力打开HIS振荡器 (假如HIS被选为这些外设的时钟)。

在LSE振荡器已使能的情况下,HDMI CEC 和 USART1 当在系统进入停止模式下也可由LSE振荡器驱动 (假如LSE被选为这些外设时钟)。但是这些外设没有打开LSE振荡器的能力。

CPU进入待机模式时停止V18域、PLL、HSI、HSI14和HSE振荡器的时钟。

当设置DBGMCU_CR寄存器中的DBG_STOP 或DBG_STANDBY位,那么CPU在相应的深度睡眠模式下也可以具有调试功能。

当系统由中断(停止模式)或复位(待机模式)唤醒后,HSI振荡器被选为系统时钟(不管进入停止模式或待机模式前选用的是何种时钟)。

假如当前正在进行闪存编程,只有在闪存编程全部完成之后才会进入深度睡眠模式(深度睡眠延后)。若当前正在使用APB域,那么只有全部完成APB域的操作后才进入深度睡眠模式。

五、STM32低功耗设置



STM32工作模式主要有运行、睡眠、停止、待机4种模式,前面已介绍过。详细见第二节。

供电框图

  由上图可以看到整个stm32芯片的供电图,模拟电路部分采用VDDA独立供电,各个部分可以独立被关断或开启。备份电路部分由电池供电,主要有RTC时钟及相关的备份寄存器,VDD掉电后可由电池供电,对于没有VBAT引脚的芯片,其电源直接与VDD相连。核心部分分为1.8V工作域和VDD工作域,1.8V工作域主要有内核、存储、外设部分,VDD供电域主要有I/O、待机电路(唤醒电路,独立看门狗)、电压调节器(Voltage Regulator)。

电压调节器

器件复位后电压调节器总是打开着的,其根据应用模式有三种不同的工作模式。

运行模式:调节器以全功耗模式为域 (内核,内存和数字外设) 提供1.8V电源。

停止模式:调节器以低功耗模式为保持寄存器及SRAM数据部分域提供1.8V的电源。

待机模式:调节器断电,除了待机电路及备份域电路外,寄存器和SRAM的内容全部丢失。

相关寄存器介绍:

1,cortex-mo中的SCR寄存器

SEVONPEND:

0: 只有使能的中断或事件才能唤醒内核。

1: 任何中断和事件都可以唤醒内核。

SLEEPDEEP:

0: 低功耗模式为睡眠模式。

1: 进入低功耗时为深度睡眠模式。

SLEEPONEXIT:

0:  被唤醒进入线程模式后不再进入睡眠模式。

1: 被唤醒后执行完相应的中断处理函数后进入睡眠模式。

2,电源控制寄存器PWR_CR



其中与低功耗有关的控制位:

CSBF: 清除待机标志,该位始终读出为0,写1清除待机标志。

CWUF: 清除唤醒标志,该位始终读出为0。写1清除唤醒标志。

PDDS: 掉电深睡眠

0: 当CPU进入深睡眠时进入停机模式,调压器的状态由LPDS位控制。

1: 当CPU进入深睡眠时进入待机模式。

LPDS: 深睡眠下的低功耗

0: 在停机模式下电压调节器开启

1: 在停机模式下电压调节器处于低功耗模式

3,电源控制/状态寄存器(PWR_CSR)



EWUP2/EWUP1: 使能WKUP2或EWUP1引脚。

0: WKUP1/2 引脚作为通用IO口。WKUP1引脚上的事件不能将CPU从待机模式唤醒。

1: WKUP1/2引脚用于将CPU从待机模式唤醒,WKUP1引脚被强置为输入下拉的配置(WKUP1引脚上的上升沿将系统从待机模式唤醒)。

SBF: 待机标志

该位由硬件设置,只能设置电源控制寄存器PWR_CR的CSBF位清除。

0:系统不在待机模式

1:系统进入待机模式

WUF: 唤醒标志

由硬件设置,只能设置电源控制寄存器PWR_CR的CWUF位清除。

0: 没有唤醒事件发生

1: 从WKUP或RTC闹钟产生一个唤醒事件

注意:当WKUP引脚已经是高电平时,在(通过设置EWUP位)使能WKUP引脚时,会检测到一个额外唤醒的事件。 

低功耗模式的进入与退出问题

1、睡眠模式

进入睡眠模式:

当STM32在运行状态时,执行WFI或WFE指令可进入睡眠模式。

条件:SLEEPDEEP=0,设为睡眠模式。此时CPU时钟被停止。

若令被唤醒的STM32执行完中断处理任务后进入睡眠模式,则可将SLEEPONEXIT设为1.

退出睡眠模式:

执行WFI指令进入睡眠,可通过使能中断唤醒。执行WFE指令进入睡眠可由事件唤醒,CPU时钟打开。产生事件的两种方式:

配置一个外部或内部EXTI线做为事件模式。

使能外设中断但不使能NVIC中断,同时将SEVONPEND设为1,此时任何中断和事件都可以唤醒内核,此时必须清除NVIC和外设的中断标志以免唤醒后出错。

2、停止模式

进入停止模式:

进入停止模式后1.8电压区域时钟被停止,PLL,HSI,HSE被关闭,但SRAM和寄存器正常供电。进入停止模式方法:首先确定所有中断/事件标志被清除否则不会进入停止模式,关闭ADC\DAC电源,将SLEEPDEEP设为深睡眠模式,在深睡眠后选择进入停机模式(PDDS=0),可关闭或开启电压调节器(LPDS),执行WFI或WFE指令进入停机模式。

退出停止模式:

一个使能的外部中断或外部事件可唤醒STM32。SMT32被唤醒后系统时钟被设为HSI。因此在唤醒后还需软件恢复时钟设置,并清除相关的低功耗标志。

3、待机模式

进入待机模式:

进入SRAM和寄存器内容丢失,进入条件:将SLEEPDEEP设为深睡眠模式,在深睡眠后选择进入待机模式(PDDS=1),关闭电压调节器(LPDS),执行WFI或WFE指令进入待机模式。

在待机模式下,除了复位引脚(始终有效)、当配置为防侵入或校准输出时的TAMPER 引脚、使能的唤醒(WKUP)引脚外,所有的I/O口线处于高阻态。因此进入待机模式前不需要再特意配置引脚的低功耗特性。

退出待机模式:

IWDG复位,WKUP引脚上的上升沿或RTC 闹钟事件可唤醒STM32,当退出待机模式时除了电源控制/状态寄存器(PWR_CSR)外所有寄存器复位,整个系统被复位。

4、低功耗模式下的RTC自动唤醒

RTC可以在不需要依赖外部中断的情况下唤醒低功耗模式下的微控制器(自动唤醒模式)。RTC提供一个可编程的时间基数,用于周期性从停止或待机模式下唤醒。

从停止模式下唤醒,必须进行如下操作:

配置外部中断线17为上升沿触发。

配置RTC使其可产生RTC闹钟事件。

从待机模式中唤醒,不必配置外部中断线17。

5、调试模式

默认情况下,如果在进行调试微处理器时,使微处理器进入停止或待机模式,将失去调试连接。这是因为Cortex-M0的内核失去了时钟。通过设置DBGMCU_CR寄存器中的某些配置位,可以在使用低功耗模式下调试软件。

六、低功耗模式总结

降低STM32功耗方法主要有:

关闭不需要的外设、降低STM32的系统频率。

合理设置I/O降低I/O静态和动态损耗。

进入低功耗模式。

恢复到正常运行状态:

睡眠模式由中断或事件唤醒,唤醒后可清除唤醒标志。

停止模式:唤醒后需恢复时钟设置,并将改动的I/O设置恢复。

待机模式:唤醒后系统被恢复,随后系统被复位,可清除待机标志。

 

七、固件库使用

主要文件:

stm32f0xx_rcc.c,stm32f0xx_gpio.c,stm32f0xx_pwr.c

 

时钟及I/O设置相关函数(部分):

void RCC_XXXPeriphClockCmd(X,X) ; //用于使能和关闭外设时钟

void SystemInit (void);//系统初始化设置时钟

GPIO_Init(GPIOX, &GPIO_InitStructure);//设置相关引脚

 

低功耗函数(部分):

 

//唤醒引脚配置

void PWR_WakeUpPinCmd(uint32_t PWR_WakeUpPin, FunctionalState NewState);

//读/清除寄存器状态标识

FlagStatus PWR_GetFlagStatus(uint32_t PWR_FLAG);

void PWR_ClearFlag(uint32_t PWR_FLAG);

进入低功耗模式:

void  PWR_EnterSleepMode(uint8_t PWR_SLEEPEntry);

Void PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry);

void PWR_EnterSTANDBYMode(void);

 

函数解析:

下面是一个进入停机模式的函数,此函数功能和使用方法在注释部分已经非常明确。通过源代码可以看出SMT32在停机模式下寄存器的设置情况。调用此函数STM32可进入低功耗模式。



void PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry)

{

  uint32_t tmpreg = 0;

 

  /* Check the parameters */

  assert_param(IS_PWR_REGULATOR(PWR_Regulator));

  assert_param(IS_PWR_STOP_ENTRY(PWR_STOPEntry));

 

  /* Select the regulator state in STOP mode ---------------------------------*/

  tmpreg = PWR->CR;

  /* Clear PDDS and LPDSR bits */

  tmpreg &= CR_DS_MASK;

 

  /* Set LPDSR bit according to PWR_Regulator value */

  tmpreg |= PWR_Regulator;

 

  /* Store the new value */

  PWR->CR = tmpreg;

 

  /* Set SLEEPDEEP bit of Cortex-M0 System Control Register */

  SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;

 

  /* Select STOP mode entry --------------------------------------------------*/

  if(PWR_STOPEntry == PWR_STOPEntry_WFI)

  {

    /* Request Wait For Interrupt */

    __WFI();

  }

  else

  {

    /* Request Wait For Event */

    __WFE();

  }

  /* Reset SLEEPDEEP bit of Cortex System Control Register */

  SCB->SCR &= (uint32_t)~((uint32_t)SCB_SCR_SLEEPDEEP_Msk);  

}


关键字:STM32  低功耗模式  机制 引用地址:STM32学习笔记之低功耗模式的机制

上一篇:stm32学习笔记之堆栈的理解
下一篇:STM32学习笔记之fatfs文件系统接口函数使用

推荐阅读最新更新时间:2024-03-16 15:36

STM32 FLASH 掉电数据丢失处理策略以及备份机制
1、原因 由于FLASH的擦除和写入的特性,如果在擦除中掉电或者写入时掉电,有可能会出现失败的情况,下次再上电读取就会出错。 擦除的时候掉电,不能保证擦除完全,但是已经擦除的部分,肯定是0xff了。 写的时候掉电,已经写入的就是正确的,电平掉到最低极限工作电压附近时,写入的就无法保证了,地址无法保证,写入的值也无法保证。没有写到的,肯定还是 0xFF。   2、解决方式 2.1、硬件方式解决 — 掉电保护机制  必须硬件电路上有相应的掉电警告中断,而且必须有足够的时间供软件响应。   掉电保存和上电恢复,需要以下:  1) 快速检测掉电信号; 2) 要有足够的时间让你停下来保存现场; 3)
[单片机]
<font color='red'>STM32</font> FLASH 掉电数据丢失处理策略以及备份<font color='red'>机制</font>
STM32定时器的分类及中断原理
本文主要介绍常规定时器中的TIM3,实现定时器中断的功能。STM32定时器的分类在其中一篇文章中已经介绍过,本文主要内容主要介绍定时器的基础功能-定时器中断,对于STM32定时器分类简单复习一下。 一、STM32定时器的分类 1.1 按照内核、外核、特定、常规分为4大类: 1)内核定时器:Systick 2)外设定时器:特定应用定时器+常规定时器 3)特定应用定时器:LPTIM,RTC,WTD,HRTIM 4)常规定时器:基本定时器TIM6&TIM7)、通用定时器(TIM2TIM5,TIM9TIM14)、高级定时器(TIM1&TIM8) 1.2 CPU时序 此处我们提一下学习单片机原理的课程时,提到的几个CPU时序。
[单片机]
<font color='red'>STM32</font>定时器的分类及中断原理
工程师应该掌握的STM32单片机关键基础精华
从51开始,单片机玩了很长时间了,有51,PIC,AVR等等,早就想跟潮流玩玩ARM,但一直没有开始,原因-----不知道玩了ARM可以做什么(对我自己而言)。如果为学习而学习,肯定学不好。然后cortex-m3出来了,据说,这东西可以替代单片机,于是马上开始关注。也在第一时间开始学习,可惜一开始就有点站错了队,选错了型(仍是对我自己而言)。我希望这种芯片应该是满大街都是,随便哪里都可以买得到,但我选的第一种显然做不到。为此,大概浪费了一年多时间吧,现在,回到对我来说是正确的道路上来啦,边学边写点东西。      这里写的是我的学习的过程,显然,很多时候会是不全面的,不系统的,感悟式的,甚至有时会是错误的,有些做法会是不专业的
[模拟电子]
工程师应该掌握的<font color='red'>STM32</font>单片机关键基础精华
一文看懂stm32的引脚的两种用途:GPIO和AFIO
stm32的引脚有两种用途:GPIO(general purpose io)和AFIO(alternate function io) 对于一些引脚(视芯片而定),这两种用途都没有,如在64脚产品中,OSC_IN/OSC_OUT与作为GPIO端口的PD0/PD1共用一样的引脚,而在100、144引脚产品中,这四个功能各有引脚与之对应,不互相冲突,所以OSC_IN/OSC_OUT既不作GPIO也不作AFIO,当然,这样的引脚不是讨论重点。 1、引脚的配置 不论是作GPIO还是做AFIO,都要对引脚进行配置。在固件库函数中,用GPIO_Init()函数对引脚进行配置,并不是说这个函数带了“GPIO”字样就是要当做GPIO来用,而是把
[单片机]
一文看懂<font color='red'>stm32</font>的引脚的两种用途:GPIO和AFIO
一文知道STM32 GUI的应用
整体上讲,很多STM32芯片内置了功能强大的用于加速图形处理的硬件加速器,借助它们一方面可以大大减轻CPU负荷,以节省CPU处理带宽去应对其它任务,另一方面,在节省内存同时还能保障动画或视频播放更为流畅。这些硬件图形加速器分别是STM32 Chrom-ART 加速器,或称DMA2D,是个专门用于二维图形操作处理的DMA;硬件JPEG 编解码器,用于对JPEG图像的编解码;STM32 Chrom-GRC,它是个内存管理单元,用于优化非方形图形显示的存储开销。 到目前为止,由于支持图形显示的STM32系列或料号很多,有时想基于STM32 的GUI应用做选型,可能要费一番功夫。这里有个表格,汇总了目前直接支持各类显示接口的STM32
[单片机]
一文知道<font color='red'>STM32</font> GUI的应用
stm32与pic单片机比较_哪个好
  STM32单片机   由ST厂商推出的STM32系列单片机,行业的朋友都知道,这是一款性价比超高的系列单片机,应该没有之一,功能及其强大。其基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M内核,同时具有一流的外设:1μs的双12位ADC,4兆位/秒的UART,18兆位/秒的SPI等等,在功耗和集成度方面也有不俗的表现,当然和MSP430的功耗比起来是稍微逊色的一些,但这并不影响工程师们对它的热捧程度,由于其简单的结构和易用的工具再配合其强大的功能在行业中赫赫有名…其强大的功能主要表现在:   stm32单片机特性   1、内核:ARM32位Cortex-M3CPU,最高工作频率72MHz,1.2
[单片机]
<font color='red'>stm32</font>与pic单片机比较_哪个好
STM32示波器程序ILI9341_IO模拟源程序+Proteus仿真
uint8 x_1= 0,y_1 = 0; uint8 x_2= 0,y_2 = 0; uint8 x_3= 0,y_3 = 0; uint8 x_4= 0,y_4 = 0; uint8 x_5= 0,y_5 = 0; uint8 t4_PianYi_x = 0,t4_PianYi_y = 0; uint8 t5_PianYi_x = 0,t5_PianYi_y = 0; int i = 0 ; for( i= 0;i t1*3;i++) { x_1 = 10+ i;
[单片机]
<font color='red'>STM32</font>示波器程序ILI9341_IO模拟源程序+Proteus仿真
HTC败诉或殃及其他Android手机制造商
     美国国际贸易委员会(以下简称“ITC”)周五做出一项初步判决,裁定HTC Android产品侵犯苹果两项专利。分析师认为,这项裁决或许会对其它Android设备制造商产生负面影响,原因是ITC的判决结果可能也适用于他们。       HTC首席法律顾问格雷斯·雷(Grace Lei)表示:“在ITC做出最终裁决前,HTC会就这一判决结果提出上诉。这只是我们将采取的诸多法律行动的第一步。”据美国专利博客网站Foss Patents知识产权专家弗洛里安·穆勒(Florian Mueller)透露,初步判决是由ITC一位行政法官根据评审结果作出的,该委员会将于2011年12月6日对此案作出最终裁决。       一旦ITC裁定制
[工业控制]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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