你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32L051C8T6低功耗配置问题

[复制链接]
AngryCat 提问时间:2019-3-4 23:24 /
在使用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);
  }
}




收藏 1 评论7 发布时间:2019-3-4 23:24

举报

7个回答
AngryCat 回答时间:2019-3-4 23:27:33
是STM32L151C8T6
七哥 回答时间:2019-3-5 09:26:22
说是休眠模式,但从函数命名看,你这是停机模式啊。唤醒以后,需要把时钟全重新配置一遍,必要的时候还得重配置部分外设。

01.png

02.png


评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

AngryCat 回答时间:2019-3-6 22:34:41
toofree 发表于 2019-3-5 09:26
说是休眠模式,但从函数命名看,你这是停机模式啊。唤醒以后,需要把时钟全重新配置一遍,必要的时候还得重 ...

我这里的休眠是通俗的意思,芯片低功耗模式是STOP+RTC,理论功耗应该是1.2uA左右。我在只焊接主芯片的情况下第一次可以达到1.2uA,但当第二次进入休眠后就有3~4uA了,比理论值增加2uA左右,之后就一直是这个值了。
废鱼 回答时间:2019-3-7 10:34:07
唤醒是RTC自动唤醒还是外部按键唤醒?如果是外部按键,考虑一下外部的IO配置。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

AngryCat 回答时间:2019-3-8 12:05:42
安 发表于 2019-3-7 10:34
唤醒是RTC自动唤醒还是外部按键唤醒?如果是外部按键,考虑一下外部的IO配置。 ...

RTC自动唤醒
废鱼 回答时间:2019-3-8 13:41:04
我看到楼主有对IO检测进行操作。检测完毕后,是否有设置为其他状态?可能是因为这里导致的。
AngryCat 回答时间:2019-6-6 15:42:28
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); //少了这一句
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版