[STM32U0]

【STM32U083测评】+几种低功耗模式的电流测试与休眠唤醒功能开发

[复制链接]
1994|2
手机看帖
扫描二维码
随时随地手机跟帖
chen000000009|  楼主 | 2024-4-27 00:47 | 显示全部楼层 |阅读模式
#申请原创#

几种低功耗模式的电流测试与休眠唤醒功能开发

首先介绍一下STM32U0支持的几种低功耗模式
下面这个图出自datasheet13页,展示了不同低功耗模式的区别
b78430dace193b9fac550aa3b81c092b
其中sleep模式是M0核心关掉,其他外设工作
low power模式是M0核心运行在一个很低的频率
三种STOP模式都是M0和大部分外设关掉,仅保留唤醒源,但SRAM保持工作,意味着唤醒之后M0核心可以从之前进入STOP模式的地方继续运行
StandBy模式要关闭SRAM,意味着唤醒后程序要从头运行
这几种模式都支持RTC唤醒,前提是配置了RTC唤醒功能
然后STOP2模式只允许用LPUART唤醒,不能用普通UART唤醒,STOP0/1可以用普通UART和LPUART唤醒
这几种模式下GPIO都是可以工作的,但是GPIO输出会额外增加功耗。
从通用性的角度来说,几种STOP模式通用性比较好,因为休眠时不工作,唤醒可以立即恢复工作。下面重点介绍
参考STM32Cube_FW_U0_V1.0.0\Projects\NUCLEO-U083RC\Examples\PWR里面的demo,可以看到,进入STOP模式的API分别为
STOP0模式
HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON, PWR_STOPENTRY_WFI);
STOP1模式
HAL_PWREx_EnterSTOP1Mode(PWR_STOPENTRY_WFI);
STOP2模式
HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI);
调用这些API之后,系统会进入STOP模式,唤醒后返回
这里要配置一个中断作为唤醒源,比如板上的USER按钮。配置此中断的方法如下
bbefc5fb93983dd32ec85195d044a98b
然后要实现一下中断入口函数
6b14d1a6862a9e8ed9c8c4df99246a11
然后实现一下main函数的while循环
0c241ef4f1d5fa825b049d62025805cb
这里实现的功能是,每隔250ms让LED4翻转一下,然后每隔5s进入一次STOP模式,进入STOP模式之前,除了GPIOC那一组,把其他的GPIO全部关闭,并设置为模拟模式,以降低功耗
进入低功耗前,要把tick定时器关掉,不然它的中断也能唤醒
唤醒之后,要把tick定时器以及要用到的GPIO重新打开。
时钟配置用默认的MSI,其余配置按默认的。
编译后烧录到板上测试。然后取下JP5跳线帽,JP5两个针脚接电流表两端,以测量消耗的电流
723533be2c70b962833dbbd6aa483327
STOP0模式下,电流109uA
6549205d585c7f9a63351463a68985f1
STOP1模式下,电流2.9uA
2d4767c3fa4306634302f6d3059fb7a4
STOP2模式下,电流0.9uA
这三种模式都可以在按下USER按钮后唤醒,唤醒后LED4仍然按原有250ms频率闪烁
说明如果只需要若干个GPIO作为唤醒源的情况下,使用STOP2模式无疑是最省电的
到这里,三种低功耗模式及GPIO唤醒功能就调试完毕。

遇到的问题与解决方案
1、烧录后进行测试,发现进入STOP1或STOP2模式后休眠电流过高,达到1.7mA左右
解决方法:在烧录程序之后,需要断电再通电,再进行测试。原因不明

使用特权

评论回复
lihui567| | 2024-5-9 14:10 | 显示全部楼层
0.9ua还可以,说明U系列的功耗和L系列差不多

使用特权

评论回复
zjk103| | 2024-5-15 10:33 | 显示全部楼层
STOP0跟STOP1模式的主要区别是什么?

使用特权

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

本版积分规则

27

主题

762

帖子

2

粉丝