【STM32+cubemx】0014 HAL库开发:电源控制(三种低功耗模式:sleep、stop、standby)

本节我们来讲一讲stm32的电源控制,也就是低功耗模式。

1)stm32的低功耗模式简介

stm32有三种低功耗模式,功耗依次降低:

睡眠模式(sleep mode),停止模式(stop mode),待机模式(standby mode)。

睡眠模式:只有内核时钟关闭,外设仍在运行;可以通过任意一个中断或唤醒事件唤醒;唤醒后回到睡眠的位置向后执行。

停止模式:关闭内核时钟、外设时钟,保留内核1.8V供电,寄存器和RAM中的数据可以保持,IO口状态也可保持;可以通过任意一个外部中断唤醒;唤醒后可回到停止的代码处向后执行,但要重新初始化时钟和外设。

待机模式:关闭所有时钟,关闭内核1.8V供电,寄存器和RAM数据不能保持(除了电源控制/状态寄存器(PWR_CSR)、备份寄存器,其他数据都丢失);可通过唤醒引脚(PA0)上升沿、RTC闹钟中断,或者复位唤醒;唤醒后相当于复位,从复位地址开始执行。

三种模式的特性汇总如下表:

当stm32执行WFI(等待中断)或WFE(等待事件)指令后,即进入低功耗模式,这是两条汇编指令,实际使用时,HAL库已经为我们封装好了函数,只需要调用相应的C语言函数即可。

2)低功耗模式的使用

我们仍然以串口的工程为基础,在它上面添加设置,如下图,先设置外部中断:

再设置RTC:

### STM32 HAL实现低功耗模式 为了使STM32进入低功耗模式开发者可以利用HAL中的特定API来配置和管理不同类型的低功耗状态。常见的低功耗模式包括睡眠(Sleep)、停止(Stop)以及待机(Standby)[^1]。 #### 配置低功耗模式前的准备 在设置任何一种低功耗模式之前,必须先完成基本的系统初始化工作,确保所有外设处于适当的工作条件之下。此过程涉及调用`HAL_Init()`函数来进行全局变量初始化,并通过RCC模块设定系统的时钟频率等参数。 ```c // 初始化HAL并配置系统时钟 HAL_Init(); SystemClock_Config(); // 用户自定义函数用于配置系统时钟 ``` #### 进入Sleep模式 当CPU暂停执行而其他硬件资源保持活动状态时,则进入了Sleep模式。可以通过下面的方式让MCU进入该模式: ```c // 准备进入SLEEP模式 __HAL_RCC_PWR_CLK_ENABLE(); /* 使能PWR控制器 */ HAL_PWREx_EnableLowPowerRunMode(); /* 启用低功耗运行模式 */ /* 请求进入SLEEP模式 */ HAL_SuspendTick(); /* 停止SysTick计数器 */ HAL_GPIO_DeInit(GPIOA, GPIO_PIN_0); /* 关闭不需要使用的GPIO端口 */ HAL_sleep_mode_entry(); /* 调用底层驱动程序进入sleep mode */ ``` 需要注意的是,在实际应用中应当根据具体需求调整上述代码片段内的细节部分,比如关闭哪些具体的I/O接口或是是否要禁用中断服务例程(ISRs),以此达到最佳节能效果。 #### 使用Stop Mode减少能耗 对于更深层次的能量节省来说,可以选择使用Stop Mode。在此状态下除了保留RAM数据之外几乎所有的内部电路都会被断电。恢复操作可通过外部中断唤醒信号触发。 ```c // 设置STOP模式下的电源管理和RTC配置 __HAL_RCC_PWR_CLK_ENABLE(); HAL_PWREx_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); while (1){ __WFI(); /* 等待事件发生以退出stop模式 */ } ``` 这段代码展示了如何切换至Stop Mode并通过等待指令(`__WFI`)使得微控制器停留在这种省电的状态直到有外部中断请求将其激活为止。 #### Standby Mode的应用场景 最后介绍的是最深级别的休眠方式——Standby Mode。它不仅会切断大部分供电路径而且还会清除SRAM内容仅保存寄存器里的少量信息以便快速重启。因此适用于长时间无动作期间最大限度降低消耗的情况。 ```c // 切换到STANDBY模式 __HAL_RCC_PWR_CLK_ENABLE(); /* 清除唤醒标志位 */ __HAL_PVD_EXTI_CLEAR_FLAG(); /* 开启WKUP按键作为唤醒源 */ HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1_HIGH); HAL_PWR_EnterSTANDBYMode(); /* 不再返回 */ ``` 以上就是基于STM32 HAL实现三种主要低功耗模式的方法概述及其对应的简单示例代码。每种模式都有其适用范围,请依据实际情况合理选用合适的策略来优化产品的电池寿命或其他性能指标。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值