专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
电源
STM32电源管理与低功耗模式
2019-07-13 22:44
发布
生成海报
站内文章
/
电源技术
10941
0
1274
《
CM3
技术参考手册
.pdf
》
7.1
电源管理概述
处理器广泛地利用门时钟来禁能那些未用的功能和未用功能块的输入,因此只有正在有
效使用中的逻辑才会消耗动态功率。
ARMv7-M
架构支持为减少功耗而让
Cortex-M3
和系统时钟停止运行的系统睡眠模式。
详细情况在
“系统电源管理”
一节中作介绍。
7.2
系统电源管理
对系统控制寄存器进行写操作(见“
系统控制寄存器
”<
CM3技术参考手册之嵌套向量中断控制器
P85>
)可以控制
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
的工作电压
(V
DD)
为
2.0
~
3.6V
。通过内置的电压调节器提供所需的
1.8V
电源。 当主电源
V
DD
掉电后,通过
V
BAT
脚为实时时钟
(RTC)
和备份寄存器提供电源。
4.1.2
电池备份区域使用电池或其他电源连接到
V
BAT
脚上,当
V
DD
断电时,可以保存备份寄存器的内容和维持
RTC
的功能。
V
BAT
脚也为
RTC
、
LSE
振荡器和
PC13
至
PC15
供电,这保证当主要电源被切断时
RTC
能继续工作。切换到
V
BAT
供电由复位模块中的掉电复位功能控制。 如果应用中没有使用外部电池,
V
BAT
必须连接到
V
DD
引脚上。
如果在应用中没有外部电池,建议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
。
Ta的文章
更多
>>
STM32电源管理与低功耗模式
0 个评论
QNX操作系统信息传递-qnx任务之间的消息传递信息传递
0 个评论
Visual C++6.0下的workspace和project结构初探
0 个评论
多进程与多线程的深度比较
0 个评论
PAT-B 1063. 计算谱半径(20)
0 个评论
热门文章
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮