STM32L031低功耗深度睡眠RTC唤醒注意事项

news/2024/10/28 20:16:35/

0. 第一可以进入休眠,第二次无法进入休眠,折腾了好久。后来想想应该是进入休眠后立刻被唤醒了,应该是上次的唤醒中断没清除。在启动唤醒前加入以下语句,问题解决。

__HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG();	//清除标志,否则第二次以后无法进入休眠// HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 0xB4D8, RTC_WAKEUPCLOCK_RTCCLK_DIV16);		//20sHAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 0xffff, RTC_WAKEUPCLOCK_RTCCLK_DIV16);		//28s

1. 发现进入睡眠后,电流1.2uA,满足要求。结果唤醒后,第二次进入睡眠后,电流跳到了19uA,且一直保持下去。结果看了https://blog.csdn.net/zzw3255/article/details/54342878的介绍,把串口干掉了,电流下降到了2.6uA。


2. 去掉了串口,第一次进入睡眠1.2uA,第二次进入睡眠2.6uA。又陷入了僵局,没开串口、没开GPIO,啥事都没干,怎么回事?谁能帮忙解决下?

网上搜索了一下资料,遇到和我这样的情况的人还真不少。例如:

https://blog.csdn.net/zhufeng88/article/details/66968101#commentsedit

说是清除唤醒标志就好了,明天按照这个思路,改代码试试看。(但是本文第0点,不是已经清除了吗?该文指的的标志是哪个标志?)

相关文章:

https://blog.csdn.net/flydream0/article/details/52511311STM32L152的低功耗测试》

3. 按照昨天的思路,清除唤醒标志

	/* Clear all related wakeup flags */__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);

但是问题依旧,第一次进入睡眠1.2uA,第二次进入睡眠2.6uA。抓狂中。

看了文档,多于的1.4uA可能来源于IVREFINT,如下图所示:


但是我的程序已经将VREFINT关闭了,调试后也看到标志位已经确认关闭了,但是还是有2.6uA的电流。

	 /* Enable Ultra low power mode */HAL_PWREx_EnableUltraLowPower();/* Enable Fast WakeUP */HAL_PWREx_EnableFastWakeUp();


到这里真的就没招了,重新理了下思路,看了代码,发现自己代码改得太乱了,之前的中断标志清除的语句在调试过程中注释掉了,重新加回来。问题解决。

4. 附上源码

void enter_stop_rtc(unsigned stoptime)
{/* Enable Ultra low power mode */HAL_PWREx_EnableUltraLowPower();			//必须要加,否则多出1.4uA的电流/* Enable Fast WakeUP */HAL_PWREx_EnableFastWakeUp();/* Disable Wakeup Counter */HAL_RTCEx_DeactivateWakeUpTimer(&hrtc);/*To configure the wake up timer to 4s the WakeUpCounter is set to 0x242B:RTC_WAKEUPCLOCK_RTCCLK_DIV = RTCCLK_Div16 = 16 Wakeup Time Base = 16 /(~37KHz) = ~0,432 msWakeup Time = ~5s = 0,432ms  * WakeUpCounter==> WakeUpCounter = ~5s/0,432ms = 11562 */HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, stoptime*2396, RTC_WAKEUPCLOCK_RTCCLK_DIV16);system_power_config();/* Enter Stop Mode */HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);/* Clear all related wakeup flags */__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);				//必须要加,否则多出1.4uA的电流__HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG();	//清除标志,否则第二次以后无法进入休眠SystemClock_Config();}

5. 最终,待机电流定格在1.2uA,满足项目需求。


6. 关于lpuart休眠后异常的问题。因为每次休眠后,都要重新初始化串口。但是发现使用hal库初始化的时候并没有成功,因为里面有个标志,初始化后就不再允许再次初始化了,所以,每次初始化时,需重置标志并位。

/* LPUART1 init function */
static void MX_LPUART1_UART_Init(void)
{hlpuart1.Instance = LPUART1;hlpuart1.Init.BaudRate = 115200;hlpuart1.Init.WordLength = UART_WORDLENGTH_8B;hlpuart1.Init.StopBits = UART_STOPBITS_1;hlpuart1.Init.Parity = UART_PARITY_NONE;hlpuart1.Init.Mode = UART_MODE_TX_RX;hlpuart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;hlpuart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;hlpuart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;hlpuart1.gState = HAL_UART_STATE_RESET;		//休眠后初始化要重置该标志位if (HAL_UART_Init(&hlpuart1) != HAL_OK){_Error_Handler(__FILE__, __LINE__);}}





http://www.ppmy.cn/news/503407.html

相关文章

1568_AURIX_TC275_电源管理_唤醒配置与状态

全部学习汇总: GreyZhang/g_TC275: happy hacking for TC275! (github.com) 如果有待机RAM保持的功能激活了,那么唤醒以及复位都不会进行RAM的重新初始化。 PORST相关的滤波开了之后,可以抵抗500ns的尖峰脉冲干扰。 CPU不仅可以请求自我进入i…

Stm32 RTC周期唤醒待机模式

Stm32 RTC周期唤醒待机模式 一、前言 二、开发环境 1、软件:CubeMXMDK 2、硬件:超纬电子-NB开发板 三、参考资料 四、实现过程 1、配置CubeMX 2、程序修改 2.1、添加 wukeup函数,通过调用函数进入待机模式 void WKUP_EnterStandby(v…

怎样把LoRa模块功耗降到极致

怎样把LoRa模块功耗降到极致 一. 引言 能耗对于电池供电的产品来说是一个重大的问题,一旦电能耗尽设备将“罢工”,在某些场合电能意味着电子产品的生命。物联网时代将会有越来越多电池供电的设备通过无线通信连接,降低能耗再次摆在工程师…

安卓系统耗电太快?针对wakelock(唤醒锁)的设置优化教程

导读: android为了确保应用程序的正确执行,提供了wakelock(唤醒锁)的api,wakelock是一种锁的机制,只要有应用拿着这个锁,系统就无法进入休眠,手机耗电的问题,其实大部分是这个锁正不正常的问题。 手机上应…

root后待机耗电,手机root后耗电

手机获取了root对手机耗电有影响? 手机获取ROOT权限后一般情况下都不会对手机耗电有影响,甚至将ROOT权限授予安全软件后,还可以一定程度上减少耗电量,增加手机待机时间。 手机获取ROOT权限的主要危害: 1.第三方的恶意软件可以利用…

待机唤醒实验

在系统或电源复位以后,微控制器处于 运行状态。运行状态下的 HCLK 为 CPU 提供时钟,内核执行程序代码。当 CPU 不需继续运行 时,可以利用多个低功耗模式来节省功耗,例如等待某个外部事件时。 STM32的3种低功耗模式: ①…

STM32L0系列单片机低功耗(STOP)使用+RTC唤醒+LPUART(DMA方式)唤醒+LPTIM唤醒

文章目录 STM32L0低功耗应用1.睡眠模式2.低功耗运行模式3.低功耗睡眠模式4.带RTC的停止模式5.不带RTC的停止模式6.带RTC待机模式7.不带RTC待机模式 进入STOP模式LPUART在DMA模式下唤醒STOP STM32L0低功耗应用 STM32L0支持7种低功耗模式,本文重点讨论停止(STOP)模式…

在 iPhone 上使用 “抬起唤醒”功能

今天给大家带来的是如何在 iPhone 上使用 “抬起唤醒”功能,还不知道如何操作的朋友,可以按照这个方法试试哦。 抬起激活 “提起激活”的优势在于,您只需拿起iPhone并查看屏幕即可。这很有用,例如,如果您想查看现在几…