搜索
bottom↓
回复: 9

stm32WB55外部引脚唤醒低功耗,功耗过高问题

[复制链接]

出5入0汤圆

发表于 2022-8-24 20:33:22 | 显示全部楼层 |阅读模式
本帖最后由 ttfox 于 2022-8-24 20:44 编辑

在使用stm32WB55开发项目过程中,遇到如下问题,请问本坛大佬有没有遇到过,给指点一下,感谢!
问题描述:
1、我目前开发的小产品,对功耗要求比较高,在不工作时要进入待机standby模式,然后用户可以通过外部按键唤醒,点亮MCU;
2、程序中,启用PA0wakeup唤醒功能,HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1_HIGH);
3、然后进入待机模式:HAL_PWR_EnterSTANDBYMode();//进入待机模式
4、程序烧录进去后,第一次进入待机模式,测量电路电流50na到100na,电流很低;PA0按键唤醒后,再次进入待机模式,测量发现电路电流60多ua,这个差别有点大。
5、修改程序,改为RTC定时唤醒,发现,通过RTC唤醒后再进入待机模式,电路功耗始终稳定在几十na,低功耗效果非常好。

这里对通过按键唤醒待机模式,再进入待机模式后的功耗表现十分不解,在官方提供的例程中,按键外部唤醒待机模式,代码简单粗暴,按道理来讲,没有什么特殊需要设置的地方,仍然出现了第一次进入待机模式功耗很低,第二次进入功耗较高的奇怪现象。大家帮忙分析一下,怎么解决这个问题,头疼啊

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出5入0汤圆

 楼主| 发表于 2022-8-24 20:35:36 | 显示全部楼层
本帖最后由 ttfox 于 2022-8-24 20:44 编辑

待机代码如下:
  1. void Sys_EnterStandbyMode(void)
  2. {
  3.         LED_Red_On;
  4.         LED_Green_On;
  5.         delay_ms(1000);   
  6.    
  7. //        if( (__HAL_PWR_GET_FLAG(PWR_FLAG_SB) != RESET)     
  8. //     && (__HAL_PWR_GET_FLAG(PWR_FLAG_C2SB) != RESET)
  9. //    )//检查系统是否从待机模式恢复
  10. //        {
  11.                 __HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);   //必须清除待机标志,才能顺利进入下次待机模式      
  12.         __HAL_PWR_CLEAR_FLAG(PWR_FLAG_C2SB);
  13.                 printf("待机唤醒复位 \r\n");
  14. //        }
  15. //        else printf("非待机唤醒复位 \r\n");
  16.    
  17.     HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1_HIGH);//禁用所有使用的唤醒源:PWR_WAKEUP_PIN1 connected to PA.00
  18.     HAL_RTCEx_DeactivateWakeUpTimer(&hrtc);
  19.    
  20.    
  21.         delay_ms(5000);
  22.         LED_Red_Off;
  23.         LED_Green_Off;
  24.         printf("进入待机模式 \r\n");       
  25.     __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);      //清除全部唤醒标志,否则无法唤醒
  26. //    GPIOSetting_EnterShutdown();
  27.     HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1_HIGH);//启用连接到PA.00的WakeUp PinW
  28.     HAL_RTCEx_SetWakeUpTimer_IT(&hrtc,20479,RTC_WAKEUPCLOCK_RTCCLK_DIV16);
  29.    
  30.         HAL_PWR_EnterSTANDBYMode();//进入待机模式
  31.    
  32. }
复制代码

出5入0汤圆

 楼主| 发表于 2022-8-25 18:01:17 | 显示全部楼层
终于找到问题和解决办法,问题原因及解决方案分享如下:
问题原因:
1】wakeup按键电路,我直接把PA0通过按键接到VDD,加了个去抖100nf电容,其他就没什么。然而这个电路对普通按键没有问题,但对于要使用wakeup唤醒功能的按键则有问题。
2】当使用HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1_HIGH);使能按键唤醒功能时,上升沿有效,触发唤醒,但MCU内部不会自动对PA0上拉或下拉。对于1中的按键电路,我在使能按键唤醒前,对PA0初始化为下拉,结果就导致进入低功耗后,有60ua的电流消耗。
3】正确做法是:要么整个程序不对PA0作任何处理,直接使能按键唤醒功能,进入待机模式后,不会存在60ua的电流消耗;要么在gpio.c程序中对PA0初始化为输入GPIO_MODE_INPUT,GPIO_NOPULL不上拉或下拉。
另外,电路一定要正确,我的那个电路是错误的,正确电路如下图:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出5入0汤圆

 楼主| 发表于 2022-8-25 18:02:55 | 显示全部楼层
我原来错误的电路也贴在这里,给大家参考:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出100入312汤圆

发表于 2022-8-25 18:43:11 来自手机 | 显示全部楼层
不错,学习

出0入228汤圆

发表于 2022-8-25 18:58:30 来自手机 | 显示全部楼层
本帖最后由 wxws 于 2022-8-25 19:00 编辑

功耗低吗?na   ??   
最近搞个msp430  rtc 待机  2ua


已经是经过 dcdc 了。锂电池供电。

出0入0汤圆

发表于 2022-8-25 19:01:01 | 显示全部楼层
低功耗一定不要用芯片内部的上下拉

出5入0汤圆

 楼主| 发表于 2022-8-25 19:07:22 | 显示全部楼层
wxws 发表于 2022-8-25 18:58
功耗低吗?na   ??   
最近搞个msp430  rtc 待机  2ua

(引用自6楼)

这个功耗都高了,我实际测量功耗100na以下(待机模式),关机模式功耗更低。

出5入0汤圆

 楼主| 发表于 2022-8-25 19:08:09 | 显示全部楼层
yerrmin 发表于 2022-8-25 19:01
低功耗一定不要用芯片内部的上下拉
(引用自7楼)

手册里面没有说明,自己测出来的,老费劲了

出0入228汤圆

发表于 2022-8-25 19:12:05 来自手机 | 显示全部楼层
确实牛。  要 低功耗,确实要 对 io操作。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-14 18:10

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表