STM32电源管理与低功耗模式

发布者:annye_cheng最新更新时间:2017-12-01 来源: eefocus关键字:STM32  电源管理  低功耗模式 手机看文章 扫描二维码
随时随地手机看文章

7.1 电源管理概述

处理器广泛地利用门时钟来禁能那些未用的功能和未用功能块的输入,因此只有正在有

效使用中的逻辑才会消耗动态功率。

ARMv7-M 架构支持为减少功耗而让Cortex-M3 和系统时钟停止运行的系统睡眠模式。

详细情况在“系统电源管理”一节中作介绍。

7.2 系统电源管理

对系统控制寄存器进行写操作(见“系统控制寄存器”)可以控制Cortex-M3 系统功耗的状态,表7-1 列出了支持的睡眠模式。

a. 即使没有异常被激活也可以执行WFI 指令。不要使用WFI 指令来探测异常是否发生。WFI 通常使用

在线程模式下的空闲循环中。要了解更多有关WFI、WFE、BASEPRI 以及PRIMASK 的信息,请参考

“ARMv7-M 架构参考指南”。

处理器导出以下信号以指示处理器进入睡眠的具体时间:

SLEEPING 该信号在立即睡眠或“退出时睡眠”模式下有效,表示处理器时钟可以停

止运行。在接收到一个新的中断后,NVIC 会使该信号变无效,使内核退出睡眠。有关

SLEEPING 的用法实例见“SLEEPING”。

SLEEPDEEP 当系统控制寄存器的SLEEPDEEP 位置位时,该信号在立即睡眠或“退

出时睡眠”模式下有效。该信号被传送给时钟管理器,并可以用来门控处理器和包含锁相环

(PLL)的系统元件以节省功耗。在接收到新的中断时,嵌套向量中断控制器(NVIC)将

 

SLEEPDEEP 信号变无效,并在时钟管理器显示时钟稳定时让内核退出睡眠。有关

SLEEPDEEP 的用法实例见“SLEEPDEEP”。

7.2.1 SLEEPING

图7-1 给出了如何在低功耗状态利用SLEEPING 来门控处理器的HCLK 时钟以减少功

耗的实例。如有必要,还可以使用SLEEPING 来门控其他系统元件。

 

为了探测中断,处理器必须一直接收自由振荡的 FCLK。FCLK 用于对以下元件计时:

 B) 探测中断的 NVIC 中的少量逻辑电路

B)DWT 和ITM 模块。这些模块被使能相应功能后可以在睡眠期间产生跟踪包。如果

“调试异常与监控寄存器”的TRCENA 位使能,那些模块的功耗将会降低。见“调

试异常与监控寄存器”。

在 SLEEPING 信号有效期间可以降低FCLK 频率。

 

7.2.2 SLEEPDEEP

图7-2 给出了如何在低功耗状态利用SLEEPDEEP 来停止时钟控制器以进一步减少功耗

的实例。退出低功耗状态时,LOCK 信号指示PLL 稳定,并且此时使能Cortex-M3 时钟是

安全的,这可以保证处理器不会重启直至时钟稳定。

为了检测中断,处理器在低功耗状态下必须接收自由振荡的FCLK。在SLEEPDEEP 有效期

间可以降低FCLK 频率。

  

《STM32中文参考手册_V10.pdf》

4.1 电源

STM32的工作电压(VDD)为2.0~3.6V。通过内置的电压调节器提供所需的1.8V电源。 当主电源VDD掉电后,通过VBAT脚为实时时钟(RTC)和备份寄存器提供电源。

 

4.1.2 电池备份区域使用电池或其他电源连接到VBAT脚上,当VDD断电时,可以保存备份寄存器的内容和维持RTC的功能。 VBAT脚也为RTC、LSE振荡器和PC13至PC15供电,这保证当主要电源被切断时RTC能继续工作。切换到VBAT供电由复位模块中的掉电复位功能控制。 如果应用中没有使用外部电池,VBAT必须连接到VDD引脚上。

如果在应用中没有外部电池,建议VBAT在外部通过一个100nF的陶瓷电容与VDD相连

4.1.3 电压调节器

复位后调节器总是使能的。根据应用方式它以3种不同的模式工作。 ● 运转模式:调节器以正常功耗模式提供1.8V电源(内核,内存和外设)。

● 停止模式:调节器以低功耗模式提供1.8V电源,以保存寄存器和SRAM的内容。

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

4.3 低功耗模式

在系统或电源复位以后,微控制器处于运行状态。当CPU不需继续运行时,可以利用多种低功耗模式来节省功耗,例如等待某个外部事件时。用户需要根据最低电源消耗、最快速启动时间和可用的唤醒源等条件,选定一个最佳的低功耗模式。 STM32F10xxx有三种低功耗模式:

● 睡眠模式(Cortex™-M3内核停止,所有外设包括Cortex-M3核心的外设,如NVIC、系统时钟(SysTick)等仍在运行)

● 停止模式(所有的时钟都已停止)

● 待机模式(1.8V电源关闭)

此外,在运行模式下,可以通过以下方式中的一种降低功耗:

● 降低系统时钟

● 关闭APB和AHB总线上未被使用的外设时钟。

 

4.3.1 降低系统时钟

在运行模式下,通过对预分频寄存器进行编程,可以降低任意一个系统时钟(SYSCLK、HCLK、PCLK1、PCLK2)的速度。进入睡眠模式前,也可以利用预分频器来降低外设的时钟。 详见第6.3.2节:时钟配置寄存器(RCC_CFGR)。

4.3.2 外部时钟的控制

在运行模式下,任何时候都可以通过停止为外设和内存提供时钟(HCLK和PCLKx)来减少功耗。 为了在睡眠模式下更多地减少功耗,可在执行WFI或WFE指令前关闭所有外设的时钟。 通过设置AHB外设时钟使能寄存器 (RCC_AHBENR)、APB2外设时钟使能寄存器(RCC_APB2ENR)和APB1外设时钟使能寄存器(RCC_APB1ENR)来开关各个外设模块的时钟。

4.3.4 停止模式

停止模式是在Cortex™-M3的深睡眠模式基础上结合了外设的时钟控制机制,在停止模式下电压调节器可运行在正常或低功耗模式。此时在1.8V供电区域的的所有时钟都被停止,PLL、HSI和HSE RC振荡器的功能被禁止,SRAM和寄存器内容被保留下来。 在停止模式下,所有的I/O引脚都保持它们在运行模式时的状态。 进入停止模式关于如何进入停止模式,详见表11。 在停止模式下,通过设置电源控制寄存器(PWR_CR)的LPDS位使内部调节器进入低功耗模式,能够降低更多的功耗。 如果正在进行闪存编程,直到对内存访问完成,系统才进入停止模式。 如果正在进行对APB的访问,直到对APB访问完成,系统才进入停止模式。 可以通过对独立的控制位进行编程,可选择以下功能:

●独立看门狗(IWDG):可通过写入看门狗的键寄存器或硬件选择来启动IWDG。一旦启动了独立看门狗,除了系统复位,它不能再被停止。详见17.3节。

 ●实时时钟(RTC):通过备份域控制寄存器(RCC_BDCR)的RTCEN位来设置。

 ●内部RC振荡器(LSI RC):通过控制/状态寄存器(RCC_CSR)的LSION位来设置。

●外部32.768kHz振荡器(LSE):通过备份域控制寄存器(RCC_BDCR)的LSEON位设置。

 在停止模式下,如果在进入该模式前ADC和DAC没有被关闭,那么这些外设仍然消耗电流。通过设置寄存器ADC_CR2的ADON位和寄存器DAC_CR的ENx位为0可关闭这2个外设。退出停止模式关于如何退出停止模式,详见下表。当一个中断或唤醒事件导致退出停止模式时,HSI RC振荡器被选为系统时钟。当电压调节器处于低功耗模式下,当系统从停止模式退出时,将会有一段额外的启动延时。如果在停止模式期间保持内部调节器开启,则退出启动时间会缩短,但相应的功耗会增加。

其中对PWR_CR的PDDS和LPDS的配置:

//进入停止模式      

 

{

//的 LPDS并清除PWR_CR的PDDS

      u32 tmpreg  tmpreg = PWR->CR;

   tmpreg &= ~(1<<1);  //清除PWR_CR的PDDS

   tmpreg |=(1<<0);  //设置PWR_CR的 LPDS

   PWR->CR = tmpreg;

       SCB->SCR|=1<<2;  //使能SLEEPDEEP位 (SYS->CTRL)           

       WFI_SET();          //执行WFI指令   

}

其中THUMB指令不支持汇编内联,采用如下方法实现执行汇编指令WFI 

__asm void __inline WFI_SET(void)

{

       WFI;               

}

 

4.3.5 待机模式

待机模式可实现系统的最低功耗。该模式是在Cortex-M3深睡眠模式时关闭电压调节器。整个1.8V供电区域被断电。PLL、HSI和HSE振荡器也被断电。SRAM和寄存器内容丢失。只有备份的寄存器和待机电路维持供电(见图4)。

进入待机模式

关于如何进入待机模式,详见表12。 可以通过设置独立的控制位,选择以下待机模式的功能:

● 独立看门狗(IWDG):可通过写入看门狗的键寄存器或硬件选择来启动IWDG。一旦启动了独立看门狗,除了系统复位,它不能再被停止。详见17.3节。

● 实时时钟(RTC):通过备用区域控制寄存器(RCC_BDCR)的RTCEN位来设置。

 ● 内部RC振荡器(LSI RC):通过控制/状态寄存器(RCC_CSR)的LSION位来设置。

● 外部32.768kHz振荡器(LSE):通过备用区域控制寄存器(RCC_BDCR)的LSEON位设置。 退出待机模式

当一个外部复位(NRST引脚)、IWDG复位、WKUP引脚上的上升沿或RTC闹钟事件的上升沿发生时(见图154:简化的RTC框图),微控制器从待机模式退出。从待机唤醒后,除了电源控制/状态寄存器(PWR_CSR)(见第4.4.2节),所有寄存器被复位。 从待机模式唤醒后的代码执行等同于复位后的执行(采样启动模式引脚、读取复位向量等)。电源控制/状态寄存器(PWR_CSR)(见第4.4.2节)将会指示内核由待机状态退出。关于如何退出待机模式,详见下表。

 

其中PWR_CR的PDDS和LPDS的配置:

对PWR_CSR的WUF位的解释:

 

//进入待机模式      

void Sys_Standby(void)

{

       SCB->SCR|=1<<2;//使能SLEEPDEEP位 (SYS->CTRL)   

      RCC->APB1ENR|=1<<28;     //使能电源时钟           

      PWR->CSR|=1<<8;          //设置WKUP用于唤醒

       PWR->CR|=1<<2;           //清除Wake-up 标志(WUF位)

       PWR->CR|=1<<1;           //PDDS置位              

       WFI_SET();                        //执行WFI指令        

}         

待机模式下的输入/输出端口状态在待机模式下,所有的I/O引脚处于高阻态,除了以下的引脚:

 ●复位引脚(始终有效)

●当被设置为防侵入或校准输出时的TAMPER引脚

●被使能的唤醒引脚调试模式默认情况下,如果在进行调试微处理器时,使微处理器进入停止或待机模式,将失去调试连接。这是因为Cortex™-M3的内核失去了时钟。然而,通过设置DBGMCU_CR寄存器中的某些配置位,可以在使用低功耗模式下调试软件。更多的细节请参考第29.16.1 节:低功耗模式的调试支持。

4.3.6 低功耗模式下的自动唤醒(AWU)

RTC可以在不需要依赖外部中断的情况下唤醒低功耗模式下的微控制器(自动唤醒模式)。RTC提供一个可编程的时间基数,用于周期性从停止或待机模式下唤醒。通过对备份区域控制寄存器(RCC_BDCR)的RTCSEL[1:0]位的编程,三个RTC时钟源中的二个时钟源可以选作实现此功能。

● 低功耗32.768kHz外部晶振(LSE) 该时钟源提供了一个低功耗且精确的时间基准。(在典型情形下消耗小于1μA)

● 低功耗内部RC振荡器(LSI RC) 使用该时钟源,节省了一个32.768kHz晶振的成本。但是RC振荡器将少许增加电源消耗。

为了用RTC闹钟事件将系统从停止模式下唤醒,必须进行如下操作:

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

● 配置RTC使其可产生RTC闹钟事件。 如果要从待机模式中唤醒,不必配置外部中断线17。


关键字:STM32  电源管理  低功耗模式 引用地址:STM32电源管理与低功耗模式

上一篇:STM32开发板显示界面添加状态栏
下一篇:COTEX-M3中断和异常

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

嵌入式便携设备电源管理的分析案例
引言 现今对 电子 系统设备性能的要求越来越高,在权衡电子系统的性能和功耗时,电子系统的性能往往得到更多的重视。容量有限的电池是便携设备的惟一能量来源,而电池容量的提高速度明显赶不上中央处理器性能的提高速度,因此,如何利用有限的电能为便携设备提供最高性能, 是便携设备中 电源管理 的主要目标。除此之外,电源管理还要兼顾稳定性和散热性。电源管理模块是在可编程电管理的设备上,为电源管理提供实现各种功耗模式的应用编程接口的软件模块。   功率消耗有两种方式:  静态功耗和动态功耗。静态功耗主要为晶体管泄漏leakage)功率;动态功耗则来源于 电路 有效性激活,例如地址线或者数据线输入时引起的寄存器线路的有
[电源管理]
嵌入式便携设备<font color='red'>电源管理</font>的分析案例
STM32+IAP方案 实现网络升级应用固件
关注了这个概念有些日子了,这段时间总算有机会实战==网络升级应用固件,这里记录下遇到的问题,及解决方案。 原理与网上流传的串口作为传输手段 一致;不同之处,无非我这里使用了网络设备传输。==(lwip)TFTP客户端的应用. 参考: IAR环境下STM32+IAP方案的实现 STM32浅谈之IAP.pdf 基于IAP和Keil MDK的远程升级设计 keil MDK中如何生成*.bin格式的文件 概况: 什么是IAP,为什么要IAP 可实现的原理 实现过程 细节及实现 以上基本都可以从【IAR环境下STM32+IAP方案的实现】中找到答案。这里只是贴图,醒目: IAP框架布局: STM32F103ZET6的
[单片机]
STM32+IAP方案 实现网络升级应用固件
STSTEVAL-ILL015V1RGBLED调光解决方案
ST公司的STEVAL-ILL015V1是采用STP24DP05和STM32™ MCU的LED调光演示板,两个STP24DP05可连接16个RGB LED,采用ST1S010的高效开关DC/DC电源,DC电源电压从7.5V到18V,输入电流小于0.7A,LED电流调整.本文介绍了STP24DP05主要特性,典型应用电路图以及STEVAL-ILL015V1 LED调光演示板主要特性,电路图和材料清单. STEVAL-ILL015V1 - LED dimmer demonstration board based on the STP24DP05 and STM32™ STP24DP05:24-bit constant current
[电源管理]
STSTEVAL-ILL015V1RGBLED调光解决方案
STM32低功耗(STM32G0+HAL库+STOP模式+中断唤醒)
一、知识点: 1.STM32低功耗一共有三种模式: (1)睡眠模式:功耗高,任意中断,任意事件唤醒 (2)停机模式:功耗较低,可以任意外部中断和RTC闹钟唤醒 (3)待机模式:功耗最低,但是只可以通过RTC唤醒,WKUP唤醒,NRST引脚复位,IWDG复位 综上优缺点,所以最常用最实用的也就是STOP停机模式。 2.小白扫盲 1)STOP模式下,只要有外部中断进来就可以唤醒,无需用户自己配置具体代码去实现唤醒操作。 2)STOP模式下被唤醒之后,单片机先执行外部中断回调函数,然后再接着刚刚进入STOP模式下的语句继续执行。 4)待机模式下被唤醒之后,单片机是类似于REST,从头开始执行的 5)RTC闹钟唤醒实质也就是外部中
[单片机]
<font color='red'>STM32</font><font color='red'>低功耗</font>(STM32G0+HAL库+STOP<font color='red'>模式</font>+中断唤醒)
STM32库函数EXTI_GetFlagStatus和EXTI_GetITStatus的区别
  在使用 STM32 的外部中断功能时,我们经常需要确认是否真的产生了外部中断,查看库函数,我们发现了这两个函数:EXTI_GetFlagStatus 和 EXTI_GetITStatus 。原型如下: FlagStatus EXTI_GetFlagStatus ( uint32_t EXTI_Line ); ITStatus EXTI_GetITStatus ( uint32_t EXTI_Line );   可以看出,这两个函数是十分相似的,EXTI_GetFlagStatus 的作用是 Checks whether the specified EXTI line flag is set or not. 即检查指
[单片机]
关于STM32 PB3 PB4 如何设置成普通GPIO的配置
对于初学习者来说为什么用到PB3和PB4时无法控制输出呢? 下面就这一问题进行分析讲解。 首先,STM32F10x系列的MCU复位后,PA13/14/15 & PB3/4默认配置为JTAG功能。有时我们为了充分利用MCU I/O口的资源,会把这些 端口设置为普通I/O口。具体方法如下: 在GPIO_Configuration(); // 配置使用的 GPIO 口: GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE); // 改变指定管脚的映射 GPIO_Remap_SWJ_Disable SWJ 完全禁用(JTAG+SW-DP) GPIO_PinRemapConfig(GPI
[单片机]
电路分析:两种典型的电池供电电路设计
  随着信息时代的来临,手持电子产品层出不穷(如PDA、数码相机、手机等)。这些产品主要采用电池供电,在此类产品中如何设计电源管理电路,确保产品的实用性、经济性成为产品设计的关键问题。本文从设计手持产品的工作实践出发,讨论两种典型的电池供电电路的设计情况。   硬开关电路设计实例   硬开关电路是将2节7号电池的串联电压通过DC/DC转换器MAX756转换成3.3 V的电压,电路图如图1所示。如果不经升压电路而直接由电池供电,那么因电池端产生的电压存在一个由高到低的下降过程。2节新电池的串联电压在3 V以上,随着能量的耗尽,会下降到2V以下,导致机器无法正常工作。JM2按键为开/关机键,在按动JM2时,由于按键的抖动,会产生误
[电源管理]
电路分析:两种典型的电池供电电路设计
一文详解STM32的嘀嗒时钟(SysTick)
简要说明 1概述 嘀嗒时钟(SysTick)是一个简单的系统时钟节拍计数器,它属于Cortex-M4内核嵌套向量中断控制器(NVIC)里的一个功能单元。他是一个24位的倒计时定时器(在NVIC中),当systick计数值到0的时候,SysTick重装载寄存器就会自动重新装载初值。只要SysTick控制和状态寄存器(CTRL)中的使能位没有ENABLE清除掉,那么就会永远的执行下去。 SysTick定时器被捆绑在NVIC中,可产生SysTick异常(异常号:15),属于Cortex-M4内核里的一个功能单元。 SysTick常作为系统节拍定时器用于操作系统(如mCOS-Ⅱ、FreeRTOS等)的系统节拍定时,从而推动任务和时间的
[单片机]
一文详解<font color='red'>STM32</font>的嘀嗒时钟(SysTick)
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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