目录
3)设置 SLEEPDEEP 位,设置 PDDS 位,执行 WFI 指令,进入待机模式。
一、stm32的三种低功耗模式
1)三种模式的介绍
1.睡眠模式:内核停止,外设如NVIC,系统时钟Systick仍运行。
2.停止模式:所有时钟都已停止。1.8V内核电源工作。PLL,HIS和HSE RC振荡器功能禁止。寄存器和SRAM内容保留。
3.待机模式:1.8V内核电源关闭。只有备份寄存器和待机电路维持供电。寄存器和SRAM内容全部丢失。实现最低功耗。
在这三种低功耗模式中,最低功耗的是待机模式,在此模式下,最低只需要
2uA
左右的电
流。停机模式是次低功耗的,其典型的电流消耗在
20uA
左右。最后就是睡眠模式了。用户可
以根据自己的需求来决定使用哪种低功耗模式。
二、最低功耗模式-待机模式介绍
待机模式可实现
STM32 的最低功耗。该模式是在CM3
深睡眠模式时关闭电压调节器。整个
1.8V
供电区域被断电。
PLL
、 HSI和
HSE
振荡器也被断电。
SRAM
和寄存器内容丢失。仅备份的寄存器和待机电路维持供电。
1.如何进入待机模式
![](https://img-blog.csdnimg.cn/e2719e268bc448afb42cafec091ce576.png)
图
还列出了退出待机模式的操作,从图
可知,我们有
4
种方式可以退出待机
模式,即当一个外部复位
(NRST
引脚
)
、
IWDG
复位、
WKUP
引脚上的上升沿或
RTC
闹钟事件
发生时,微控制器从待机模式退出。从待机唤醒后,除了电源控制/状态寄存器(PWR_CSR),所有寄存器被复位。
从待机模式唤醒后的代码执行等同于复位后的执行
(
采样启动模式引脚,读取复位向量等
)
。
电源控制
/
状态寄存器
(PWR_CSR)
将会指示内核由待机状态退出。
在进入待机模式后,除了复位引脚以及被设置为防侵入或校准输出时的
TAMPER
引脚和被
使能的唤醒引脚(
WK_UP
脚),其他的
IO
引脚都将处于高阻态。
三、寄存器的介绍
1.电源控制寄存器(PWR_CR)
这里我们通过设置 PWR_CR 的 PDDS 位,使 CPU 进入深度睡眠时进入待机模式,同时通过 CWUF 位,清除之前的唤醒位。
2.电源控制/状态寄存器(PWR_CSR)
这里,我们通过设置
PWR_CSR
的
EWUP
位,来使能
WKUP 引脚用于待机模式唤醒。还可以从
WUF
来检查是否发生了唤醒事件。不过本章并没有用到。
四、函数的配置
1)使能电源时钟。
因为要配置电源控制寄存器,所以必须先使能电源时钟。
在库函数中,使能电源时钟的方法是:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //使能 PWR 外设时钟
这个函数非常容易理解。
2) 设置 WK_UP 引脚作为唤醒源。
使能时钟之后后再设置
PWR_CSR
的
EWUP
位,使能
WK_UP
用于将
CPU
从待机模式唤
醒。在库函数中,设置使能
WK_UP
用于唤醒
CPU
待机模式的函数是:
PWR_WakeUpPinCmd(ENABLE); //使能唤醒管脚功能
3)设置 SLEEPDEEP 位,设置 PDDS 位,执行 WFI 指令,进入待机模式。
进入待机模式,首先要设置
SLEEPDEEP
位(
该位在系统控制寄存器(
SCB_SCR
)的第
二位,详见《
CM3
权威指南》,第
182
页表
13.1
),
接着我们通过
PWR_CR
设置
PDDS
位,使
得
CPU
进入深度睡眠时进入待机模式,最后执行
WFI
指令开始进入待机模式,并等待
WK_UP
中断的到来。在库函数中,进行上面三个功能进入待机模式是在函数
PWR_EnterSTANDBYMode
中实现的:
void PWR_EnterSTANDBYMode(void);
4)最后编写 WK_UP 中断函数。
因为我们通过
WK_UP
中断(
PA0
中断)来唤醒
CPU
,所以我们有必要设置一下该中断函
数,同时我们也通过该函数里面进入待机模式。