本帖最后由 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来做电源管理就非常省电了。
|