OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5334|回复: 16

STM32L151C6T6最小系统,没有任何外设,进入stop模式还有300uA电流

[复制链接]

19

主题

96

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
253
金钱
253
注册时间
2015-4-29
在线时间
38 小时
发表于 2020-12-10 22:00:26 | 显示全部楼层 |阅读模式
大神帮忙看一下,最近在做一个低功耗的项目,用的STM32L151C6T6A单片机,目前把所有外设全部拆除,只保留最小系统和一个稳压LDO,LDO是ADP151-3.3(电流消耗不到15uA),进入stop模式还有300uA电流,程序中把引脚已经全部处理了,有点黔驴技穷了,实在不知道到底是哪里有问题,电流一直降不下来,大神帮忙看看
最小系统图:
引脚处理方式:
GPIO_InitTypeDef GPIO_InitStructure;
int main(void)
{
delay_init(32);

RTC_Config();  //ê1ÄüRTC

GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &GPIO_InitStructure);


GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOC, &GPIO_InitStructure);

while(1)
{     
    To_Enter_Stop();//½øèë′y»úÄ£ê½
}
}   















微信图片_20201210215203.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

19

主题

96

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
253
金钱
253
注册时间
2015-4-29
在线时间
38 小时
 楼主| 发表于 2020-12-11 10:21:52 | 显示全部楼层
回复 支持 反对

使用道具 举报

1

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
123
金钱
123
注册时间
2018-5-9
在线时间
22 小时
发表于 2020-12-11 13:45:40 | 显示全部楼层
进入stop模式前 改时钟源,改GPIO模式,关GPIO时钟,配置唤醒中断......

  1. void StopMode_Config(void)

  2. {

  3.   GPIO_InitTypeDef GPIO_InitStructure;



  4.   /* Enable Power Control clock */

  5.   __HAL_RCC_PWR_CLK_ENABLE();



  6.   /* Enable Ultra low power mode */

  7.   HAL_PWREx_EnableUltraLowPower();

  8.   

  9.   /* Enable the fast wake up from Ultra low power mode */

  10.   HAL_PWREx_EnableFastWakeUp();



  11.   /* Select MSI as system clock source after Wake Up from Stop mode */

  12.   __HAL_RCC_WAKEUPSTOP_CLK_CONFIG(RCC_STOP_WAKEUPCLOCK_MSI);



  13.   /* Enable GPIOs clock */

  14.   __HAL_RCC_GPIOA_CLK_ENABLE();

  15.   __HAL_RCC_GPIOB_CLK_ENABLE();

  16.   __HAL_RCC_GPIOC_CLK_ENABLE();



  17.   /* Configure all GPIO port pins in Analog Input mode (floating input trigger OFF) */

  18.   /* Note: Debug using ST-Link is not possible during the execution of this   */

  19.   /*       example because communication between ST-link and the device       */

  20.   /*       under test is done through UART. All GPIO pins are disabled (set   */

  21.   /*       to analog input mode) including  UART I/O pins.           */

  22.   GPIO_InitStructure.Pin = GPIO_PIN_All;

  23.   GPIO_InitStructure.Mode = GPIO_MODE_ANALOG;

  24.   GPIO_InitStructure.Pull = GPIO_NOPULL;



  25.   HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);

  26.   HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);

  27.   HAL_GPIO_Init(GPIOC, &GPIO_InitStructure);

  28.    

  29.   /* Disable GPIOs clock */

  30.   __HAL_RCC_GPIOA_CLK_DISABLE();

  31.   __HAL_RCC_GPIOB_CLK_DISABLE();

  32.   __HAL_RCC_GPIOC_CLK_DISABLE();



  33. }
复制代码


回复 支持 反对

使用道具 举报

1

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
123
金钱
123
注册时间
2018-5-9
在线时间
22 小时
发表于 2020-12-11 13:47:47 | 显示全部楼层
官方PWR例程里都有。
回复 支持 反对

使用道具 举报

3

主题

821

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3359
金钱
3359
注册时间
2011-11-10
在线时间
207 小时
发表于 2020-12-11 15:26:58 | 显示全部楼层
不是所有引脚都设置模拟才能低功耗。
要降低功耗必须设置引脚与外部电平一致,否则会有漏电流存在。
回复 支持 反对

使用道具 举报

19

主题

96

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
253
金钱
253
注册时间
2015-4-29
在线时间
38 小时
 楼主| 发表于 2020-12-13 16:00:27 | 显示全部楼层
killalljp 发表于 2020-12-11 13:45
进入stop模式前 改时钟源,改GPIO模式,关GPIO时钟,配置唤醒中断......

这个方法不行
回复 支持 反对

使用道具 举报

19

主题

96

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
253
金钱
253
注册时间
2015-4-29
在线时间
38 小时
 楼主| 发表于 2020-12-13 16:04:40 | 显示全部楼层
c2007s 发表于 2020-12-11 15:26
不是所有引脚都设置模拟才能低功耗。
要降低功耗必须设置引脚与外部电平一致,否则会有漏电流存在。

根据你提供的思路,我把所有48个引脚的电平都测了一遍,其中38脚和40脚电平是高点,其余非功能引脚电平均是0,我又单独把38脚和40脚的模拟浮空输入改成上拉输入,电流几乎没变,然后又各种方式修改这两脚的方式,电流始终不变,应该是其他原因
回复 支持 反对

使用道具 举报

1

主题

11

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
317
金钱
317
注册时间
2018-7-27
在线时间
119 小时
发表于 2020-12-14 08:55:44 | 显示全部楼层
以前用这个芯片做过水浸探测器,停止模式时电流小于1uA
回复 支持 反对

使用道具 举报

19

主题

96

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
253
金钱
253
注册时间
2015-4-29
在线时间
38 小时
 楼主| 发表于 2020-12-17 22:38:21 | 显示全部楼层
张可 发表于 2020-12-14 08:55
以前用这个芯片做过水浸探测器,停止模式时电流小于1uA

能做到小于1uA还是比较厉害的
回复 支持 反对

使用道具 举报

19

主题

96

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
253
金钱
253
注册时间
2015-4-29
在线时间
38 小时
 楼主| 发表于 2020-12-17 22:45:37 | 显示全部楼层
我已经放弃使用stop模式了,切换成了standby模式,功耗算是降下来了,最小系统测的差不多4.1uA,之前没有用待机模式的原因是当时待机模式下没办法同时用RTC和外部wakeup引脚唤醒,stop功耗又降不下来,没办法,又下狠心搞standby,不过还好,现在已经实现了同时唤醒
回复 支持 反对

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
190
金钱
190
注册时间
2017-11-10
在线时间
46 小时
发表于 2021-2-3 11:02:42 | 显示全部楼层
本帖最后由 GSYxz2012 于 2021-2-3 11:03 编辑

我用的STM32L151CBT6A一开始也是用的HAL库调用ENTERSTOP进入后还是有100uA以上的电流,跟踪之后发现是因为HAL_PWR_EnterSTOPMode(uint32_t Regulator, uint8_t STOPEntry)函数中的MODIFY_REG(PWR->CR, (PWR_CR_PDDS | PWR_CR_LPSDSR), Regulator);只把RCC->CR的LPSDSR置1了而没有把PDDS置1。手动添加PWR->CR|=0x00000003;后进入STOP模式电流成功降到1.2uA左右。如图所示:
1612321059(1).jpg
1612321294(1).jpg
回复 支持 反对

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
190
金钱
190
注册时间
2017-11-10
在线时间
46 小时
发表于 2021-2-3 16:33:20 | 显示全部楼层
GSYxz2012 发表于 2021-2-3 11:02
我用的STM32L151CBT6A一开始也是用的HAL库调用ENTERSTOP进入后还是有100uA以上的电流,跟踪之后发现是因为H ...

但是发现了新的问题,我好像进入的是standby模式,跟手册上不太一样啊...
回复 支持 反对

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
190
金钱
190
注册时间
2017-11-10
在线时间
46 小时
发表于 2021-2-3 16:42:11 | 显示全部楼层
GSYxz2012 发表于 2021-2-3 11:02
我用的STM32L151CBT6A一开始也是用的HAL库调用ENTERSTOP进入后还是有100uA以上的电流,跟踪之后发现是因为H ...

其他文档中描述的进入STOP的必需条件,额是我对英文原版的手册理解有误吗...
}D[_3S_BD35)FR@P4A3VV`0.png
回复 支持 反对

使用道具 举报

10

主题

205

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1322
金钱
1322
注册时间
2015-3-3
在线时间
127 小时
发表于 2021-2-4 14:24:58 | 显示全部楼层
我用F103RET6待机模式,一堆外设,关闭后也就8微安左右。你这怎么可能这么大,肯定是进入休眠以前没有对外设IO进行处理。不需要的设置成输入模式,唤醒线什么的也得设置。必要的时候,晶振还需要重新配置一下。
海纳百川者,荣耀伴一生!
回复 支持 反对

使用道具 举报

19

主题

96

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
253
金钱
253
注册时间
2015-4-29
在线时间
38 小时
 楼主| 发表于 2021-3-1 15:47:35 | 显示全部楼层
GSYxz2012 发表于 2021-2-3 11:02
我用的STM32L151CBT6A一开始也是用的HAL库调用ENTERSTOP进入后还是有100uA以上的电流,跟踪之后发现是因为H ...

学习了
回复 支持 反对

使用道具 举报

19

主题

96

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
253
金钱
253
注册时间
2015-4-29
在线时间
38 小时
 楼主| 发表于 2021-3-1 15:49:49 | 显示全部楼层
shumivan 发表于 2021-2-4 14:24
我用F103RET6待机模式,一堆外设,关闭后也就8微安左右。你这怎么可能这么大,肯定是进入休眠以前没有对外 ...

除了晶振没有配置,其他引脚也都配置了,F系列还是比较稳定,L系列芯片比较麻烦
回复 支持 反对

使用道具 举报

10

主题

205

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1322
金钱
1322
注册时间
2015-3-3
在线时间
127 小时
发表于 2021-3-2 08:39:48 | 显示全部楼层
Sunny^o^ 发表于 2021-3-1 15:49
除了晶振没有配置,其他引脚也都配置了,F系列还是比较稳定,L系列芯片比较麻烦

好吧,我没细看L的,你加油.
海纳百川者,荣耀伴一生!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-28 12:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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