Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
STM32超低功耗
STM32超低功耗入门之停止模式
发布于 2021-04-19 22:26:57 浏览:2272
订阅该版
[tocm] ### 一. 认识停止模式 STM32L4 系列提供了 3 种停止模式:stop0 , stop1 , stop2. 功耗逐次更低。    通过上图可以得出结论: 1. stop0 模式有 2 种电压调节器方案。stop 1 2 只有一种 2. 在 stop0 1 2 模式下 CPU 是停止状态 3. 在 stop0 1 2模式下 FLASH 已经断电 4. SRAM1 SRAM2 可以独立的开启或关闭 5. 时钟只可以使用 LSE 或者 LSI 6. 支持的外设有限,对于不常见的外设,表1 给出说明 7. 唤醒的方式,常见的外设中断都可以唤醒 MCU 8. 功耗情况 stop0 , stop1 , stop2. 功耗逐次更低 9. 在 SRAM 运行的程序唤醒速度更快 stop 0 两种电压调节器的方案说明如下:  表1: | 外设 | 功能| |--|--| | BOR| Brown out reset 掉电复位 | | PVD | Programmable voltage detector 可编程电压监测器 | |PVM | PVM:Peripheral Voltage Monitor 外围电压检测| 由以上的资料可以知道,不同的 STOP 模式支持大部分功能都是相同的,区别就是表中,进入停止模式之后的外设支持以及唤醒方式,最终也就导致的功耗的不同。 ### 二. 停止模式的进入  SRAM 中的数据不丢失。但是核心域的时钟都停止了,PLL ,MSI , HSI16 , HSE都不能使用了。LSI 和 LSE 继续保持运行。 通过上面的描述可以知道:大部分外设的时钟已经停止了,所以进入 STOP 模式之前不需要关闭 systick 的中断,但是**唤醒之后需要重新配置时钟**. 进入睡眠模式的方法很简单,不同模式的 API 也不一样,但是传入的参数是一样的。 1. STOP0 进入 API `void HAL_PWREx_EnterSTOP0Mode(uint8_t STOPEntry)` 2. STOP1 进入 API `void HAL_PWREx_EnterSTOP1Mode(uint8_t STOPEntry)` 3. STOP2 进入 API `void HAL_PWREx_EnterSTOP2Mode(uint8_t STOPEntry)` 这里的参数有两个可以设置: 1. PWR_STOPENTRY_WFI 2. PWR_STOPENTRY_WFE 这两个参数决定了是事件唤醒还是中断唤醒。这个参数在各种模式下都要用到。 ### 三. 停止模式的进入代码 进入睡眠模式的代码实现 ``` int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); HAL_Delay(500); // 上电之后延时一会再进入睡眠模式,这样可以保证复位之后可以立即下载程序 HAL_PWREx_EnterSTOP0Mode(PWR_STOPENTRY_WFI); // 进入停止模式 //HAL_PWREx_EnterSTOP1Mode(PWR_STOPENTRY_WFI); //HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI); SystemClock_Config(); // 重新设置时钟 while (1) { HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_13); HAL_Delay(500); } } ``` 代码解析: 1. 进入停止模式后将导致调试器无法识别到 `MCU`,所以在启动的时候加了一个 `HAL_Delay(500)` ,如果没有加,则需要按住复位键点击下载,点击下载之后立即松开复位键,就可以正常的下载程序了。 2. 停止模式将关闭很多的时钟其中包括 systick, 所以进入停止模式时不需要关闭 systick 3. 进入停止模式的 API 只有一字之差 4. 唤醒 `MCU` 之后,将执行进入睡眠模式的下一个指令。但是要重新配置时钟 停止模式支持 `WFI` 和 `WFE` WFI: 立刻进入低功耗模式 WFE: 不是立刻进入低功耗模式,根据Event Register(一个单bit的寄存器,每个PE一个)的状态,有两种情况:如果Event Register为1,该指令会把它清零,然后执行完成(不会standby) 选择 `WFE` 可是使用如下代码 ``` HAL_PWREx_EnterSTOP0Mode(PWR_SLEEPENTRY_WFE); HAL_PWREx_EnterSTOP1Mode(PWR_SLEEPENTRY_WFE); HAL_PWREx_EnterSTOP2Mode(PWR_SLEEPENTRY_WFE); ``` ### 四. 总结 1. 进入停止模式是 `MCU` 停止,唤醒之后**需重**重新配置时钟 2. 停止模式唤醒后,无需对外设重新进入初始化 3. 睡眠模式支持 **中断唤醒** 和 **事件唤醒** 4. 可用外设有限,具体查看上图
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
whj467467222
开源,分享,交流,共同进步
文章
32
回答
1222
被采纳
149
关注TA
发私信
相关文章
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
I2C_IIC
UART
ESP8266
cubemx
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
ulog
SFUD
msh
C++_cpp
MicroPython
本月问答贡献
RTT_逍遥
10
个答案
3
次被采纳
xiaorui
3
个答案
2
次被采纳
winfeng
2
个答案
2
次被采纳
三世执戟
8
个答案
1
次被采纳
KunYi
8
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
lizimu
2
篇文章
9
次点赞
swet123
1
篇文章
4
次点赞
Days
1
篇文章
4
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部