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

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
toofree 回答时间: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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版