打印
[STM32U0]

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

[复制链接]
2999|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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

2、在唤醒后开启HSI

3、唤醒后配置时钟


LPTIMER的配置
1、定义HAL_LPTIM_MspInit函数,此函数主要就是开启相关时钟配置以及中断配置。参考例程或者用cubemx生成一个都行
注意这里板上没有LSE的情况下,只能选LSI

2、实现lptimer2的初始化函数

这里的Prescaler是相对于外部32768Hz的时钟而言的,Prescaler值越大
触发源要填LPTIM_TRIGSOURCE_SOFTWARE,这样可以使用lptimer的定时功能而不需要依赖外部事件。
3、在每次进入低功耗前调用

这个TIMEOUT值可以自行定义。即可在休眠一段时间后唤醒
演示效果如下

然后介绍LPUART的配置。
首先这里选择LPUART1,此LPUART1接到板上STLINK的虚拟串口上面,调试起来比较方便

1、配置LPUART的时钟源,引脚,中断

这个函数可以直接参考例程或者用cubemx生成一个都行。注意时钟来源需要配置为HSI
2、LPUART初始化函数

这里主要是配置一下波特率,停止位,校验位等信息
3、使能中断

其中WUF就是唤醒中断,RXNE是接收中断
4、在休眠前调用以下API

需要确保串口上面没有数据传输再进入低功耗,以免进入后立即被唤醒
休眠后调用此API

按以上配置后,MCU STOP后,如果有串口数据,即可唤醒
演示效果如下


在修改了时钟配置,并开启了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 | 只看该作者
这功耗控制的不错

使用特权

评论回复
5
lihui567| | 2024-6-23 08:56 | 只看该作者
功耗和L系列差不多,功耗这块不占优势

使用特权

评论回复
6
Stahan| | 2024-6-30 10:27 | 只看该作者
单独mcu的功耗怎么测量啊?

使用特权

评论回复
7
kepe| | 2024-7-31 00:35 | 只看该作者
我们需要配置HSI(高速内部振荡器)和LSI(低速内部振荡器)作为系统时钟源。

使用特权

评论回复
8
kepe| | 2024-7-31 00:50 | 只看该作者
LPTIMER用于STOP模式下的定时任务,如LED闪烁。

使用特权

评论回复
9
为你转身| | 2024-8-31 13:47 | 只看该作者
LPUART在STOP模式下可以工作。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

777

帖子

2

粉丝