[STM32U0] 【STM32U083测评】+LPUART和LPTIMER唤醒功能开发

[复制链接]
4226|14
 楼主| chen000000009 发表于 2024-4-29 01:19 | 显示全部楼层 |阅读模式
本帖最后由 chen000000009 于 2024-4-29 01:24 编辑

#申请原创#
LPUART和LPTIMER唤醒功能开发


STM32U0里面有若干组LPUART和LPTIMER,这两者和GPIO,都可以作为STOP模式的唤醒源。
如果要使用STOP2模式,则一般的串口是无法工作的,只能选择使用LPUART。
所有的STOP模式下,一般的TIMER都无法工作,只能选择用LPTIMER
而LPTIMER的时钟来源必须是LSE或者LSI,其他时钟源在STOP模式下不工作
知道了以上三点,下面来设计这些功能。进入STOP模式的方法以及LED闪烁的逻辑参考笔者上一篇文章,这里不赘述,直接在上一篇文章的基础上增加相关功能。

首先RCC的配置要改为使用HSI和LSI,前者是LPUART需要的,后者是LPTIMER需要的,LPUART不支持MSI
1、配置HSI和LSI
978954f268d06af36d0757413be88824
2、在唤醒后开启HSI
f6f5b7a9a1d5d6ae0c5eafe7b58e5e9b
3、唤醒后配置时钟
68d3683275c94ea41e007170e1937f19

LPTIMER的配置
1、定义HAL_LPTIM_MspInit函数,此函数主要就是开启相关时钟配置以及中断配置。参考例程或者用cubemx生成一个都行
注意这里板上没有LSE的情况下,只能选LSI
f8e1fba7ea7e66aae86877834d8dbf0a
2、实现lptimer2的初始化函数
e44024f910e46e6ad895a66cffbb23fa
这里的Prescaler是相对于外部32768Hz的时钟而言的,Prescaler值越大
触发源要填LPTIM_TRIGSOURCE_SOFTWARE,这样可以使用lptimer的定时功能而不需要依赖外部事件。
3、在每次进入低功耗前调用
72965aac7b32e07a88451ad0d790cd80
这个TIMEOUT值可以自行定义。即可在休眠一段时间后唤醒
演示效果如下 VID_20240429_005434467.gif

然后介绍LPUART的配置。
首先这里选择LPUART1,此LPUART1接到板上STLINK的虚拟串口上面,调试起来比较方便
8fc7a1dd845a4b867a10eba07850ac77
1、配置LPUART的时钟源,引脚,中断
4e44ec641768dda932720047f1bf2bca
这个函数可以直接参考例程或者用cubemx生成一个都行。注意时钟来源需要配置为HSI
2、LPUART初始化函数
497c1d38f6ff63ca93a244bc153d029e
这里主要是配置一下波特率,停止位,校验位等信息
3、使能中断
32e2fcf5083ea14259837a221c0cb8c4
其中WUF就是唤醒中断,RXNE是接收中断
4、在休眠前调用以下API
6a17edd91fa717eab4cb5bb921a43c6f
需要确保串口上面没有数据传输再进入低功耗,以免进入后立即被唤醒
休眠后调用此API
a187cf6fe3f7ab4d495b38a0f205f3b5
按以上配置后,MCU STOP后,如果有串口数据,即可唤醒
演示效果如下
VID_20240429_010304665 00_00_00-00_00_30.gif

在修改了时钟配置,并开启了LPUART和LPTIMER的情况下,使用STOP2模式时,测得电流约为
1.7uA
以这种级别的功耗待机,就非常节约能源了。像有些广告*,用的是太阳能电池供电的,只在收到控制中心的命令时才工作,那用STM32U0来做电源管理就非常省电了。


micoccd 发表于 2024-4-29 15:13 | 显示全部楼层
这个灯算在功耗里面吗
 楼主| chen000000009 发表于 2024-4-29 17:14 | 显示全部楼层
micoccd 发表于 2024-4-29 15:13
这个灯算在功耗里面吗

不算,只算MCU的消耗,其他的东西都不算
yuyy1989 发表于 2024-5-16 16:52 | 显示全部楼层
这功耗控制的不错
lihui567 发表于 2024-6-23 08:56 | 显示全部楼层
功耗和L系列差不多,功耗这块不占优势
Stahan 发表于 2024-6-30 10:27 | 显示全部楼层
单独mcu的功耗怎么测量啊?
kepe 发表于 2024-7-31 00:35 | 显示全部楼层
我们需要配置HSI(高速内部振荡器)和LSI(低速内部振荡器)作为系统时钟源。
kepe 发表于 2024-7-31 00:50 | 显示全部楼层
LPTIMER用于STOP模式下的定时任务,如LED闪烁。
为你转身 发表于 2024-8-31 13:47 | 显示全部楼层
LPUART在STOP模式下可以工作。
linguanghua 发表于 2024-12-19 15:23 | 显示全部楼层
看上去,比L系列多了2个可在STOP2模式工作的LPTIMER,适合低功耗下测量脉冲计数。
Amazingxixixi 发表于 2024-12-27 16:45 | 显示全部楼层
过来学习学习
yangjiaxu 发表于 2024-12-31 11:12 | 显示全部楼层
功耗这么低呢啊?真的很不错
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

780

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部