STM32学习笔记【33.低功耗】

STM32学习笔记【33.低功耗】
文章目录一、什么是低功耗二、STM32电源系统结构三、低功耗模式介绍1. 睡眠模式sleep mode2. 停机模式stop mode3. 待机模式standby mode四、低功耗寄存器1. 电源控制寄存器(PWR_CR)2. 电源控制/状态寄存器(PWR_CSR)3. 系统控制寄存器(SCB_SCR)五、低功耗库函数介绍总结一、什么是低功耗STM32的低功耗low power mode特性是其嵌入式处理器系列的一个重要优势特别适用于需要长时间运行且功耗敏感的应用场景如便捷式设备、物联网设备、智能家居系统等。在很多应用场合中都对电子设备的功耗要求非常苛刻如某些传感器信息采集设备仅靠小型的电池提供电源要求工作长达数年之久且期间不需要任何维护由于智慧穿戴设备的小型化要求电池体积不能太大导致容量也比较小所以有必要从控制功耗入手提供设备的续航时间。二、STM32电源系统结构系统是这4个部分进行供电注VDDA和VSSA必须分别联到VDD和VSS。三、低功耗模式介绍低功耗模式如何处理这些电源STM32具有运行、睡眠、停止和待机四种工作模式。睡眠、停止和待机是三种低功耗模式。上电后默认是在运行模式当内核不需要继续运行时可以选择后面三种低功耗模式。1. 睡眠模式sleep mode在睡眠模式下CPU停止工作但所有外设如ADC、通信接口等仍然运行时钟继续运转。这适用于需要暂时关闭CPU但外围设备需要继续工作的场景。模式特点对系统影响小但节能效果最差在睡眠模式下所有的I/O引脚都保持它们在运行模式时的状态。进入条件当系统控制寄存器中的SLEEPDEEP位被清除通常为0并且SLEEPONEXIT位根据需求设置时如果设置为1则在最低优先级中断处理程序退出时进入sleep模式如果为0则执行WFI或WFE时立即进入。执行WFIWait For Interrupt或WFEWait For Event指令来进入。唤醒条件任意一个中断都能将系统从Sleep模式唤醒。如果执行WFE指令进入Sleep模式则一旦发生唤醒事件时MCU将唤醒。2. 停机模式stop mode在停机模式下CPU和核心外围设备的时钟会停止但部分唤醒源如外部中断和某些定时器仍然运行。这适用于需要长时间等待外部事件唤醒的应用如等待用户输入或外部信号。Stop模式实现了非常低的功耗同时保留了SRAM和寄存器的内容。模式特点节能效果好程序不会复位。但恢复时间较长比如振荡器需要重新起震等。在停机模式下所有I/O引脚都保持它们在运行模式时的状态退出停止模式HSI RC振荡器被选为系统时钟。【刚开机时系统时钟是72MHz进入停机模式后再从停机模式退出系统时钟变成HSI8MHz如果想要系统正常工作需要重新配置72MHz。】进入条件需要将SLEEPDEEP位设置为1以进入深度睡眠模式然后通过设置电源控制/状态寄存器PWR_CSR中的PDDS位为0来选择进入Stop模式。根据需求设置LPDS位LPDS 0表示在深睡眠模式下电压调节器保持开启状态LPDS 1表示在深睡眠模式下电压调节器进入低功耗模式。。执行WFIWait For Interrupt或WFEWait For Event指令来进入。在进入Stop模式之前通常需要关闭不必要的外设时钟并保存需要保留的状态信息。唤醒条件stop模式可以通过外部中断如按键中断、USART接收中断等唤醒。RTC闹钟事件、USB唤醒、以太网ETH唤醒等也可以作为唤醒源但这些通常需要通过外部中断来触发。3. 待机模式standby mode在该模式下CPU、外围设备和时钟都被关闭只保留唤醒逻辑和备份寄存器。这适用于不需要保留RAM内容且可以从复位状态恢复的设备常见于需要极低功耗且稀疏唤醒的应用。Standby模式时STM32中功耗最低的模式之一。模式特点节能效果最好但程序会复位只有少数条件唤醒。在Standby模式下大部分IO引脚处于高阻态只有复位引脚、TAMPER引脚如果配置为防侵入或校准输出和WKUP引脚可用作唤醒源。进入条件Standby模式进入前需要清除电源控制/状态寄存器PWR_CSR中的WUF位以确保没有未处理的唤醒标志。将SLEEPDEEP位设置为1以进入深度睡眠模式并设置PDDS位为1来选择进入Standby模式。执行WFI或WFE指令进入Standby模式。唤醒条件Standby模式可以通过WKUP引脚的上升沿唤醒。RTC闹钟事件也可以作为唤醒源独立看门狗IWDG复位和NRST引脚上的外部复位也可以唤醒STM32但这通常用于系统复位而非低功耗唤醒。三种低功耗模式进入条件示意图四、低功耗寄存器1. 电源控制寄存器(PWR_CR)关注PDDS位:掉电深睡眠与LPDS位协同操作0当CPU进入深睡眠时进入停机模式调压器的状态由LPDS位控制。1CPU进入深睡眠时进入待机模式。LPDS位:深睡眠下的低功耗PDDS0时与PDDS位协同操作0在停机模式下电压调压器开启1在停机模式下电压调压器处于低功耗模式2. 电源控制/状态寄存器(PWR_CSR)关注EWUP位使能WKUP引脚0WKUP引脚为通用I/O。WKUP引脚上的事件不能将CPU从待机模式唤醒1WKUP引脚用于将CPU从待机模式唤醒WKUP引脚被强置为输入下拉的配置(WKUP引脚上的上升沿将系统从待机模式唤醒)注在系统复位时清除这一位。WUF位唤醒标志该位由硬件设置并只能由POR/PDR(上电/掉电复位)或设置电源控制寄存器(PWR_CR)的CWUF位清除。0没有发生唤醒事件1在WKUP引脚上发生唤醒事件或出现RTC闹钟事件。注当WKUP引脚已经是高电平时在(通过设置EWUP位)使能WKUP引脚时会检测到一个额外的事件。3. 系统控制寄存器(SCB_SCR)SLEEPDEEP位0睡眠1深度睡眠SLEEPONEXIT位0立即睡眠1中断退出后睡眠五、低功耗库函数介绍// 睡眠模式HAL_PWR_EnterSLEEPMode();// 停机模式HAL_PWR_EnterSTOPMode();// 待机模式HAL_PWR_EnterSTANDBYMode();// 使能时钟电源__HAL_RCC_PWR_CLK_ENABLE();// 使能WAKEUP引脚的唤醒功能HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1)// 清除唤醒标记否则将持续保持唤醒状态__HAL_PWR_CLEAR_FLAG();总结低功耗是STM32非常重要的嵌入式处理器系列的特性适用于长时间运行且功耗敏感的应用场景。它有3种工作模式分别为睡眠、停止和待机模式我们需要了解这三种工作模式的特点、进入条件以及唤醒条件帮助我们更快速的提高设备的续航时间。