#申请原创#
几种低功耗模式的电流测试与休眠唤醒功能开发
首先介绍一下STM32U0支持的几种低功耗模式
下面这个图出自datasheet13页,展示了不同低功耗模式的区别
其中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按钮。配置此中断的方法如下
然后要实现一下中断入口函数
然后实现一下main函数的while循环
这里实现的功能是,每隔250ms让LED4翻转一下,然后每隔5s进入一次STOP模式,进入STOP模式之前,除了GPIOC那一组,把其他的GPIO全部关闭,并设置为模拟模式,以降低功耗
进入低功耗前,要把tick定时器关掉,不然它的中断也能唤醒
唤醒之后,要把tick定时器以及要用到的GPIO重新打开。
时钟配置用默认的MSI,其余配置按默认的。
编译后烧录到板上测试。然后取下JP5跳线帽,JP5两个针脚接电流表两端,以测量消耗的电流
STOP0模式下,电流109uA
STOP1模式下,电流2.9uA
STOP2模式下,电流0.9uA
这三种模式都可以在按下USER按钮后唤醒,唤醒后LED4仍然按原有250ms频率闪烁
说明如果只需要若干个GPIO作为唤醒源的情况下,使用STOP2模式无疑是最省电的
到这里,三种低功耗模式及GPIO唤醒功能就调试完毕。
遇到的问题与解决方案
1、烧录后进行测试,发现进入STOP1或STOP2模式后休眠电流过高,达到1.7mA左右
解决方法:在烧录程序之后,需要断电再通电,再进行测试。原因不明
|