Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
STM32超低功耗
STM32超低功耗入门之唤醒
发布于 2021-05-09 20:30:01 浏览:2206
订阅该版
[tocm] ### 一. 认识唤醒 人每天晚上要睡觉,早上要醒来。那 MCU 进入低功耗模式之后,在我们需要他卖力干活的时候,还需要他能醒来,所以在前面的文章对于各种功耗模式有了一个全面的认识了之后,还要再总结以下再不同模式下改如何来唤醒 MCU。 ### 二,唤醒 MCU 如何唤醒 MCU 最好的办法当然是查看官方的手册。 STM32L4 系列提供了多种低功耗模式,不同的模式下唤醒的方式也不相同,可以查看手册。 ![在这里插入图片描述](https://oss-club.rt-thread.org/uploads/20220714/dd30c32e755c486e57882fb060c06e4d2963fc93.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3doajEyMzk5OQ==,size_16,color_FFFFFF,t_70) 1. 睡眠模式的唤醒 睡眠模式分为,**普通睡眠模式** 和 **低功耗睡眠模式**。 通过上图知道唤醒方式的描述是:`any interrupt or event` 意思就是,所有的中断或者事件。 中断:中断比较好理解,比如定时器中断,串口中断 事件:wakeup 按键触发事件 睡眠模式唤醒后会从进入低功耗模式之后的代码开始执行 **注意** : - 如果使用 CUBEMX 生才的代码默认是开启了 `systick`,模式会每 ms 产生一次中断,在 MCU 进入睡眠模式的时候,需要调用 `HAL_SuspendTick();` 来关闭 `systick` 中断 2. STOP 0 模式的唤醒 STOP0 模式下的唤醒上图已经描述的很详细了,他和睡眠模式唤醒的区别在于,不是所有的中断了,仅仅是在 STOP 0 模式下可以运行的外设中断才可以唤醒 MCU。 STOP 0 模式 唤醒之后会从进入 STOP 0 模式之后的代码开始运行。 STOP 0 模式唤醒之后需要重新配置时钟 唤醒方式的名词解释: | 名词 | 解释 | | --------- | ---------------------- | | reset pin | 复位按键 | | all I/Os | 所有可以配置成 GPIO 的 | | BOR | 掉电复位 | | PVD | 可编程电压检测器 | | PVM | 外围电压监测 | 其他都是常见外设的中断,要注意检查支持唤醒的外设。 ![在这里插入图片描述](https://oss-club.rt-thread.org/uploads/20220714/0c80622064e3f94fd2ed18faa97b4a7916729a85.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3doajEyMzk5OQ==,size_16,color_FFFFFF,t_70) 3. STOP 1 模式的唤醒 STOP 1 模式下的唤醒参考上图,他和 STOP 0模式唤醒的区别在于,支持的外设进一步减少 STOP 1 模式 唤醒之后会从进入 STOP 1 模式之后的代码开始运行。 STOP 1 模式唤醒之后需要重新配置时钟 4. STOP 2 模式的唤醒 STOP 2 模式下的唤醒参考上图,他和 STOP 1 模式唤醒的区别在于,支持的外设进一步减少 STOP 2 模式 唤醒之后会从进入 STOP 2 模式之后的代码开始运行。 STOP 2 模式唤醒之后需要重新配置时钟 **注意** - 支持的外设要注意,比如 STOP2 已经不支持 USART 的中断唤醒 - 支持的外设要注意,比如 STOP2 仅仅支持 I2C3 的中断唤醒,I2C1 I2C2 已经不再支持了。 ![在这里插入图片描述](https://oss-club.rt-thread.org/uploads/20220714/a39d590f78ee977c6cea04d3df42f4a6be6b007e.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3doajEyMzk5OQ==,size_16,color_FFFFFF,t_70) 5. 待机模式的唤醒 待机模式的唤醒方式见上图,可以在 cubemx 配置唤醒引脚 ![在这里插入图片描述](https://oss-club.rt-thread.org/uploads/20220714/16007f36ebe357de9edd3daabe17bbc80f723ce3.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3doajEyMzk5OQ==,size_16,color_FFFFFF,t_70) 配置完之后,就可以直接在程序中使用了,使用方法如下: ``` HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN2);//禁用所有使用的唤醒源:PWR_WAKEUP_PIN2 connected to PC.13 __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);//清除所有相关的唤醒标志 HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN2_HIGH);//启用连接到PC.13的WakeUp Pin HAL_PWR_EnterSTANDBYMode(); // 进入待机模式 ``` 这里要根据具体板子的设计确定按下按键之后是高电平还是低电平。 停机模式唤醒后,MCU 复位,从程序开始的地方运行 待机模式下,唤醒之后需要判断程序是否是从待机模式唤醒的 ``` if (__HAL_PWR_GET_FLAG(PWR_FLAG_SB) != RESET) { /* Clear Standby flag */ __HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB); __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WUF2); } ``` 6. 停机模式的唤醒 停机模式下只有三种方式唤醒:复位,唤醒按键,RTC。其中唤醒和停机模式下是一样的。 RTC 唤醒 MCU 有两种方式:设置为唤醒 和 闹钟 设置唤醒的代码如下: ``` To configure the wake up timer to 60s the WakeUpCounter is set to 0xFFFF: Wakeup Time Base = 16 /(~32.000KHz) = ~0.5 ms Wakeup Time = 0.5 ms * WakeUpCounter Therefore, with wake-up counter = 0xFFFF = 65,535 Wakeup Time = 0,5 ms * 65,535 = 32,7675 s ~ 33 sec. */ HAL_RTCEx_SetWakeUpTimer_IT(&RTCHandle, 0x0FFFF, RTC_WAKEUPCLOCK_RTCCLK_DIV16); /* Enter the ShutDown mode */ HAL_PWREx_EnterSHUTDOWNMode(); ``` ### 三,总结 不同的模式下会有不同的唤醒方式,在实际使用过程中要注意不同模式下支持的外设是不一样的,不同的低功耗模式,唤醒之后开始代码执行的位置也不一样。要根据实际的项目需求,来选择使用的低功耗模式和对应的唤醒方式。
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
whj467467222
开源,分享,交流,共同进步
文章
32
回答
1222
被采纳
148
关注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
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
805
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部