既然选L4不玩低功耗就对不起这芯片了。在l4低功耗上调了2天,终于从最初的680ua降到了22ua(MCU+触模+NFC+RF总功耗)。这个功耗还算可以,如果只是单mcu的话也就2ua不到。
低功耗这块想要低关键还是要看Io口的配置。这个太关键了。总的方法是:
1、SWD脚的上拉不要
2、空的引脚用模拟输入(这样可以切掉思密特电路);
3、I2C 浮空输入
4、SPI 这个要具体看你对接的芯片了,通常MISO浮空输入,其他的PP输出,都不要加上下拉。
5、HAL_RCC_PWR_CLK_ENABLE();
HAL_RCC_WAKEUPSTOP_CLK_CONFIG(RCC_STOP_WAKEUPCLOCK_MSI);
6、rt_hw_interrupt_disable(); 这个要定要加上
7、关所有外设时钟
8、HAL_PWREx_DisableInternalWakeUpLine();禁wakeup.我只需要外部中断。
9、HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI);
后面的事就是唤醒后重新对所有的IO口进行配置了。如果用低功耗定时器补偿记得重新设置TICK.我使用的环境是唤醒后直接NVIC_SystemReset();的。
我前两天也在调试stm32l476的低功耗问题。跟你的问题有点类似,我在裸机情况下,STOP2模式的功耗是1.5uA;使用RT-Thread的pm组件时,STOP2模式的低功耗为30uA左右,还不断的浮动。在使用PM组件时,我已经把systick 、lptimer 及所有的IO的时钟都关闭了。不知道哪里还有功耗。想搞清楚使用PM组件时,是那些功能增大了系统的功耗。