浅谈单片机的低功耗模式


通常我们说的低功耗在我看来,其实不外乎是通过降低频率或者去掉某些暂时不用的功能–即降低性能,来使我们的单片机拥有更久的续航。在单片机中,有三种低功耗模式:睡眠模式,停止模式,待机模式。其实从本质上来说,这三种模式就好比一个人的睡眠状态(越来越深),自然我们在唤醒它的时候就需要不同的刺激。接下来,我们来分别看看这三种模式的功能,如何进入相对应的模式如何退出。

1. 睡眠模式

1.1 进入睡眠模式

执行 WFI(等待中断)或 WFE(等待事件)指令即可进入睡眠模式。

(1)若SLEEPONEXIT位清零,MCU 将在执行 WFIWFE 指令时立即进入睡眠模式。
在这里插入图片描述

(2)若SLEEPONEXIT位置1,MCU 将在执行 WFIWFE 指令后等待所有ISR(中断请求)处理执行完后再进入睡眠模式。
在这里插入图片描述

1.2 退出睡眠模式

(1)如果使用 WFI 指令进入睡眠模式,任意外设中断都会将器件从睡眠模式唤醒。

(2)如果使用 WFE 指令进入睡眠模式,MCU 将在有事件发生时立即退出睡眠模式。唤醒事件可通过以下方式产生:
①在外设的控制寄存器使能一个中断,但不在 NVIC 中使能,同时使能 Cortex™-M4F 系统控制寄存器中的 SEVONPEND 位。当 MCU 从 WFE 恢复时,需要清除相应外设的中 断挂起位和外设 NVIC 中断通道挂起位(在 NVIC 中断清除挂起寄存器中)。
②配置一个外部或内部 EXTI 线为事件模式。当 CPU 从 WFE 恢复时,因为对应事件线的挂起位没有被置位,不必清除相应外设的中断挂起位或 NVIC 中断通道挂起位。
由于没有在进入/退出中断时浪费时间,此模式下的唤醒时间最短。

2. 停止模式

在停止模式下:
(1)调压器既可以配置为正常模式,也可以配置为低功耗模式。

(2)1.2 V 域中的所有时钟都会停止,PLL、HSI和 HSE RC 振荡器也被禁止。

(3)将 PWR_CR 寄存器中的FPDS 位置 1 后,Flash 还会在器件进入停止模式时进入掉电状态。Flash 处于掉电模式时,将器件从停止模式唤醒将需要额外的启动延时
在这里插入图片描述

3. 待机模式

待机模式下可达到最低功耗:
(1)待机模式基于深度睡眠模式,其中调压器被禁止。因此1.2 V 域断电。

(2)PLL、HSI 振荡器和 HSE 振荡器关闭。

(3)除备份域(RTC 寄存器、RTC 备份寄存器和备份 SRAM)和待机电路中的寄存器外,SRAM 和寄存器内容都将丢失
在这里插入图片描述

4. 低功耗模式汇总

在这里插入图片描述

5. 一般使用的库函数

//调用__WFI()/__WFE()进入睡眠模式
__WFI();
__WFE();


//进入停止模式
void PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry);
//从停止模式中唤醒后调用该函数重新初始化时钟
SystemInit();


//进入待机模式
void PWR_EnterSTANDBYMode(void);
//使能唤醒引脚(使能后在进入待机模式后触发唤醒引脚可以退出待机模式)
void PWR_WakeUpPinCmd(FunctionalState NewState);

//清除相对应的标志位
void PWR_ClearFlag(uint32_t PWR_FLAG);


  • 22
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值