STM32L051C8T6低功耗配置问题
在使用STM32L051C8T6开发低功耗产品时遇到这么个问题:第一次进入休眠模式时功耗可降低至3uA左右,符合预期;休眠时间6秒,唤醒后检测一个开关量输入信号后立马进入休眠,时间极短,随后再次进入休眠状态;就是这第二次进入后,休眠功耗变为5uA了,而且之后进入休眠都保持这个功耗,比预期高。这是什么原因造成的呢?以下是进入和唤醒部分代码,用RTC定时唤醒。
void MCU_IntoStopMode(u16 wake_up_sec_time)
{
printf("\n******into sleep! wake_up_sec_time=%us\n",wake_up_sec_time);
if(wake_up_sec_time==0)
{
return;
}
RTC_SetWakeUpCounter(wake_up_sec_time*2048);
RTC_WakeUpCmd(ENABLE);
MCU_StopMode_GPIO_Init();//GPIO设置
PWR_PVDCmd(DISABLE);
PWR_FastWakeUpCmd(ENABLE);
PWR_UltraLowPowerCmd(ENABLE);
PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);//进入停止模式
// HSI_Config();
// UART_Init();//串口初始化
printf("out sleep!\n");
}
void RTC_WKUP_IRQHandler(void)
{
RTC_WakeUpCmd(DISABLE);
HSI_Config();
UART_Init();//串口初始化
if(RTC_GetITStatus(RTC_IT_WUT) != RESET)
{
// printf("RTC_IT_WUT\n");
RTC_ClearFlag(RTC_FLAG_WUTF);
RTC_ClearITPendingBit(RTC_IT_WUT);
EXTI_ClearITPendingBit(EXTI_Line20);
}
}
是STM32L151C8T6 说是休眠模式,但从函数命名看,你这是停机模式啊。唤醒以后,需要把时钟全重新配置一遍,必要的时候还得重配置部分外设。
toofree 发表于 2019-3-5 09:26
说是休眠模式,但从函数命名看,你这是停机模式啊。唤醒以后,需要把时钟全重新配置一遍,必要的时候还得重 ...
我这里的休眠是通俗的意思,芯片低功耗模式是STOP+RTC,理论功耗应该是1.2uA左右。我在只焊接主芯片的情况下第一次可以达到1.2uA,但当第二次进入休眠后就有3~4uA了,比理论值增加2uA左右,之后就一直是这个值了。 唤醒是RTC自动唤醒还是外部按键唤醒?如果是外部按键,考虑一下外部的IO配置。 安 发表于 2019-3-7 10:34
唤醒是RTC自动唤醒还是外部按键唤醒?如果是外部按键,考虑一下外部的IO配置。 ...
RTC自动唤醒 我看到楼主有对IO检测进行操作。检测完毕后,是否有设置为其他状态?可能是因为这里导致的。 void RTC_WKUP_IRQHandler(void)
{
RTC_WakeUpCmd(DISABLE);
HSI_Config();
#ifdef USE_UART2
UART2_Init();//串口初始化
#endif
if(RTC_GetITStatus(RTC_IT_WUT) != RESET)
{
// log_debug("RTC_IT_WUT\n");
RTC_ClearFlag(RTC_FLAG_WUTF);
PWR_ClearFlag(PWR_FLAG_WU); //少了这一句
RTC_ClearITPendingBit(RTC_IT_WUT);
EXTI_ClearITPendingBit(EXTI_Line20);
}
}
原因是少了这一句
PWR_ClearFlag(PWR_FLAG_WU); //少了这一句
页:
[1]