OpenEdv-开源电子网

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

STM32L071低功耗下不去,求助

[复制链接]

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2018-8-24
在线时间
32 小时
发表于 2019-3-6 15:38:57 | 显示全部楼层 |阅读模式
5金钱
目前做的一块L071的板子,把外设基本都拆了,留了两个晶振,一个电池稳压芯片.进入stop+rtc之前,关了中断,默认初始化,把IO全设为无上下拉模拟,ADC、SPI和I2c的引脚改为无上下拉输出,并输出0。外设去使能。关闭全部外设的时钟。
从电池供电口串电流表测量的时候,低功耗模式一直是400ua,有没有大佬支个招。

附上我进低功耗之前的处理函数。


[mw_shl_code=c,true]void my_lp()
{

    LL_GPIO_InitTypeDef GPIO_InitStructure;   

    NVIC_DisableIRQ(TIM2_IRQn);
    NVIC_DisableIRQ(EXTI2_3_IRQn);
    NVIC_DisableIRQ(EXTI0_1_IRQn);
    NVIC_DisableIRQ(RCC_IRQn);
    LL_GPIO_DeInit(GPIOA);
    LL_GPIO_DeInit(GPIOB);   
    LL_GPIO_DeInit(GPIOC);
    LL_ADC_DeInit(ADC1);

   
   
   
    LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA|LL_IOP_GRP1_PERIPH_GPIOB|LL_IOP_GRP1_PERIPH_GPIOC);

    GPIO_InitStructure.Pin= GPIO_PIN_All;
    GPIO_InitStructure.Speed= GPIO_SPEED_FREQ_LOW;
    GPIO_InitStructure.Mode= GPIO_MODE_ANALOG;
    GPIO_InitStructure.Pull       = LL_GPIO_PULL_NO;
    LL_GPIO_Init(GPIOA, &GPIO_InitStructure);
    LL_GPIO_Init(GPIOB, &GPIO_InitStructure);
    LL_GPIO_Init(GPIOC, &GPIO_InitStructure);

    GPIO_InitStructure.Pin= GPIO_PIN_15;
    GPIO_InitStructure.Speed= GPIO_SPEED_FREQ_HIGH;
    GPIO_InitStructure.Mode= GPIO_MODE_ANALOG;
    GPIO_InitStructure.Pull       = LL_GPIO_PULL_NO;
    LL_GPIO_Init(GPIOB, &GPIO_InitStructure);

    GPIO_InitStructure.Pin= GPIO_PIN_0;
    GPIO_InitStructure.Speed= GPIO_SPEED_FREQ_HIGH;
    GPIO_InitStructure.Mode= GPIO_MODE_OUTPUT_PP;
    GPIO_InitStructure.Pull       = LL_GPIO_PULL_NO;
    LL_GPIO_Init(GPIOA, &GPIO_InitStructure);

    GPIO_InitStructure.Pin= GPIO_PIN_14|GPIO_PIN_15;
    GPIO_InitStructure.Speed= GPIO_SPEED_FREQ_HIGH;
    GPIO_InitStructure.Mode= GPIO_MODE_OUTPUT_PP;
    GPIO_InitStructure.Pull       = LL_GPIO_PULL_NO;
    LL_GPIO_Init(GPIOC, &GPIO_InitStructure);

    GPIO_InitStructure.Pin= GPIO_PIN_9;
    GPIO_InitStructure.Speed= GPIO_SPEED_FREQ_HIGH;
    GPIO_InitStructure.Mode= GPIO_MODE_OUTPUT_OD;
    GPIO_InitStructure.Pull       = LL_GPIO_PULL_NO;
    LL_GPIO_Init(GPIOA, &GPIO_InitStructure);


    // spi io A4 A5 A6 A7
    LL_GPIO_SetPinMode(GPIOA, LL_GPIO_PIN_4, LL_GPIO_MODE_ANALOG);
    LL_GPIO_SetPinSpeed(GPIOA, LL_GPIO_PIN_4, LL_GPIO_SPEED_FREQ_HIGH);
    LL_GPIO_SetPinPull(GPIOA, LL_GPIO_PIN_4, LL_GPIO_PULL_NO);

    LL_GPIO_SetPinMode(GPIOA, LL_GPIO_PIN_5, LL_GPIO_MODE_ANALOG);
    LL_GPIO_SetPinSpeed(GPIOA, LL_GPIO_PIN_5, LL_GPIO_SPEED_FREQ_HIGH);
    LL_GPIO_SetPinPull(GPIOA, LL_GPIO_PIN_5, LL_GPIO_PULL_NO);

    LL_GPIO_SetPinMode(GPIOA, LL_GPIO_PIN_6, LL_GPIO_MODE_ANALOG);
    LL_GPIO_SetPinSpeed(GPIOA, LL_GPIO_PIN_6, LL_GPIO_SPEED_FREQ_HIGH);
    LL_GPIO_SetPinPull(GPIOA, LL_GPIO_PIN_6, LL_GPIO_PULL_NO);

    LL_GPIO_SetPinMode(GPIOA, LL_GPIO_PIN_7, LL_GPIO_MODE_ANALOG);
    LL_GPIO_SetPinSpeed(GPIOA, LL_GPIO_PIN_7, LL_GPIO_SPEED_FREQ_HIGH);
    LL_GPIO_SetPinPull(GPIOA, LL_GPIO_PIN_7, LL_GPIO_PULL_NO);   

    // adc io A2
    LL_GPIO_SetPinMode(GPIOA, LL_GPIO_PIN_2, LL_GPIO_MODE_ANALOG);
    LL_GPIO_SetPinSpeed(GPIOA, LL_GPIO_PIN_2, LL_GPIO_SPEED_FREQ_HIGH);
    LL_GPIO_SetPinPull(GPIOA, LL_GPIO_PIN_2, LL_GPIO_PULL_NO);



    LL_GPIO_ResetOutputPin(GPIOA, LL_GPIO_PIN_5|LL_GPIO_PIN_6|LL_GPIO_PIN_7|LL_GPIO_PIN_8|LL_GPIO_PIN_9|LL_GPIO_PIN_11|LL_GPIO_PIN_12);
    LL_GPIO_ResetOutputPin(GPIOC, LL_GPIO_PIN_14|LL_GPIO_PIN_15);

    LL_IOP_GRP1_DisableClock(LL_IOP_GRP1_PERIPH_ALL);

    LL_APB2_GRP1_DisableClock(LL_APB2_GRP1_PERIPH_ALL);
    LL_APB1_GRP1_DisableClock(LL_APB1_GRP1_PERIPH_ALL);


    LL_USART_Disable(USART1);
    LL_SPI_Disable(SPI1);
    LL_I2C_Disable(I2C3);
    LL_ADC_Disable(ADC1);     
    LL_TIM_DisableCounter(TIM2);

}[/mw_shl_code]

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2019-3-7 03:04:08 | 显示全部楼层
回复

使用道具 举报

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2018-8-24
在线时间
32 小时
 楼主| 发表于 2019-3-7 10:31:42 | 显示全部楼层

原子哥我有2个问题。
1,手册上说IO配成模拟,电流消耗是0,那如果硬件上有上拉或者下拉的电阻也是0吗
333.png
2,我看到有的博客上说可以关掉Vref,但那个不是参考电压吗,而且48pin也没看到有这个脚。。。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2019-3-8 02:53:42 | 显示全部楼层
也无晴丶 发表于 2019-3-7 10:31
原子哥我有2个问题。
1,手册上说IO配成模拟,电流消耗是0,那如果硬件上有上拉或者下拉的电阻也是0吗

...

1,理论上是。
2,是的没有外置vref不存在关闭的问题
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7546
金钱
7546
注册时间
2016-11-30
在线时间
642 小时
发表于 2019-3-8 11:18:36 | 显示全部楼层
感觉你这个问题还是有IO口没有设置正确
回复

使用道具 举报

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2018-8-24
在线时间
32 小时
 楼主| 发表于 2019-3-9 18:04:19 | 显示全部楼层
正点原子 发表于 2019-3-8 02:53
1,理论上是。
2,是的没有外置vref不存在关闭的问题

换成电池供电之后,单片机加DCDC也有40ua,整机1.2ma,隔手册说的还是差了几十倍。。。
回复

使用道具 举报

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2018-8-24
在线时间
32 小时
 楼主| 发表于 2019-3-9 18:20:26 | 显示全部楼层
lvkanger 发表于 2019-3-8 11:18
感觉你这个问题还是有IO口没有设置正确

目前用电池都还剩40ua,IO设置那边,大佬有啥建议没
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2019-3-10 02:30:30 | 显示全部楼层
也无晴丶 发表于 2019-3-9 18:20
目前用电池都还剩40ua,IO设置那边,大佬有啥建议没

你可以单独做一个裸板,只有你这个芯片的,测试下
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

17

主题

193

帖子

0

精华

高级会员

Rank: 4

积分
708
金钱
708
注册时间
2014-7-2
在线时间
137 小时
发表于 2019-3-11 07:51:06 来自手机 | 显示全部楼层
IO有上拉电阻设置为上拉,下拉电阻设置为下拉。
回复

使用道具 举报

17

主题

193

帖子

0

精华

高级会员

Rank: 4

积分
708
金钱
708
注册时间
2014-7-2
在线时间
137 小时
发表于 2019-3-11 07:51:42 来自手机 | 显示全部楼层
建议刚开始用最小系统来测试
回复

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7546
金钱
7546
注册时间
2016-11-30
在线时间
642 小时
发表于 2019-3-11 09:34:20 | 显示全部楼层
也无晴丶 发表于 2019-3-9 18:20
目前用电池都还剩40ua,IO设置那边,大佬有啥建议没

检查每一个端口,避免存在任何压差。
回复

使用道具 举报

7

主题

333

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1838
金钱
1838
注册时间
2012-7-16
在线时间
504 小时
发表于 2019-3-11 10:04:48 | 显示全部楼层
测试低功耗不要接仿真器
回复

使用道具 举报

7

主题

333

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1838
金钱
1838
注册时间
2012-7-16
在线时间
504 小时
发表于 2019-3-11 10:05:30 | 显示全部楼层
先单独焊了单片机的测试下,然后再焊接其他电路,一点排查。
回复

使用道具 举报

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2018-8-24
在线时间
32 小时
 楼主| 发表于 2019-3-11 11:43:51 | 显示全部楼层
qiousanxi 发表于 2019-3-11 07:51
IO有上拉电阻设置为上拉,下拉电阻设置为下拉。

目前在逐个IO排查,那ADC的IO同时有上下拉的怎么弄,还是说得改硬件,再用个IO控制电源接通与否。
2323.PNG
回复

使用道具 举报

17

主题

193

帖子

0

精华

高级会员

Rank: 4

积分
708
金钱
708
注册时间
2014-7-2
在线时间
137 小时
发表于 2019-3-11 13:31:40 来自手机 | 显示全部楼层
你把下拉去掉试试,IO弄成上拉
回复

使用道具 举报

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2018-8-24
在线时间
32 小时
 楼主| 发表于 2019-3-11 14:16:17 | 显示全部楼层
qiousanxi 发表于 2019-3-11 13:31
你把下拉去掉试试,IO弄成上拉

调试板我把电阻都去掉了,我的意思是正常使用的版本需要用到ADC,那分压电阻就不能拆掉呀,那样的话低功耗该怎么办
回复

使用道具 举报

12

主题

143

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2687
金钱
2687
注册时间
2017-9-8
在线时间
468 小时
发表于 2019-3-11 14:45:21 | 显示全部楼层
ADC供电单独成一路,低功耗时关掉
回复

使用道具 举报

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2018-8-24
在线时间
32 小时
 楼主| 发表于 2019-3-11 17:33:08 | 显示全部楼层
jian0052 发表于 2019-3-11 14:45
ADC供电单独成一路,低功耗时关掉

再用一个IO控制三极管来开关吗。还是怎么关?
另外,请问32的那些和外设芯片直接连上的引脚,低功耗时候一般怎么配,还是说要测电压再配上下拉?
回复

使用道具 举报

12

主题

143

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2687
金钱
2687
注册时间
2017-9-8
在线时间
468 小时
发表于 2019-3-12 08:30:39 | 显示全部楼层
也无晴丶 发表于 2019-3-11 17:33
再用一个IO控制三极管来开关吗。还是怎么关?
另外,请问32的那些和外设芯片直接连上的引脚,低功耗时候 ...

用三极管MOS管什么的做开关,或者用带有开关控制的电源
我低功耗用的是KL16,单原理是一样的,外设另用电源,低功耗直接关电源,通信接口什么的,配置成输出下拉,这个要试的,片子不一样,配置不同
回复

使用道具 举报

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2018-8-24
在线时间
32 小时
 楼主| 发表于 2019-3-12 20:03:47 | 显示全部楼层
jian0052 发表于 2019-3-12 08:30
用三极管MOS管什么的做开关,或者用带有开关控制的电源
我低功耗用的是KL16,单原理是一样的,外设另用 ...

我把外设的供电去掉了。单片机的所有IO口,在低功耗库函数里全部配成模拟无上下拉了。
这样的话是不是可以认为IO口上岂不是就没有电流消耗了?
回复

使用道具 举报

4

主题

63

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1194
金钱
1194
注册时间
2017-8-31
在线时间
295 小时
发表于 2019-3-13 09:25:24 | 显示全部楼层
如果你单片机除了电源所有IO都没连器件,那设成待机模式的功耗就是你STOP模式单片机设置能达到的最低功耗,
多余的功耗可能是你DCDC的功耗,可以看着买几个贵点低功耗点的DCDC试试。
另外ADC的功耗I=U/R提高电阻阻值到M级这个损耗就能小到可以忽略了,试下L071的AD管脚如果在M级电阻下还能采到正确电压那直接用这个就是了,省事
回复

使用道具 举报

27

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
232
金钱
232
注册时间
2016-8-31
在线时间
252 小时
发表于 2019-3-13 10:05:04 | 显示全部楼层
IO全设成模拟输入试过了吗?
回复

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7546
金钱
7546
注册时间
2016-11-30
在线时间
642 小时
发表于 2019-3-13 10:05:29 | 显示全部楼层
也无晴丶 发表于 2019-3-11 11:43
目前在逐个IO排查,那ADC的IO同时有上下拉的怎么弄,还是说得改硬件,再用个IO控制电源接通与否。

ADC口设置为浮空输入,3.3V/200K = 16.5uA,这里功耗还是蛮大的,如果ADC采集精度不高,可以加大分压电阻来降低功耗。
回复

使用道具 举报

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2018-8-24
在线时间
32 小时
 楼主| 发表于 2019-3-13 10:59:31 | 显示全部楼层
hyghyg1234 发表于 2019-3-11 10:05
先单独焊了单片机的测试下,然后再焊接其他电路,一点排查。

没有接仿真器,用电池供的电,然后手工不好焊,我就把板子拆到只剩MCU和按键什么的,再加上DCDC了。
请问如果用3.6V电池直接供给单片机,会不会电压不稳定,或者导致测量低功耗不准什么的。(手册上说的供电在1.65-3.6V)
回复

使用道具 举报

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2018-8-24
在线时间
32 小时
 楼主| 发表于 2019-3-13 11:46:01 | 显示全部楼层
lvkanger 发表于 2019-3-13 10:05
ADC口设置为浮空输入,3.3V/200K = 16.5uA,这里功耗还是蛮大的,如果ADC采集精度不高,可以加大分压电阻 ...

后面改硬件再换大电阻,目前我把上拉的R28拆掉了。然后配置成PPout,down,输出0。这样应该没电流了吧,
然后问下12M晶振的俩引脚怎么处理比较好,我做成PPout,down,输出0,并没什么改善。晶振这部分进STOP的时候会耗电吗
回复

使用道具 举报

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2018-8-24
在线时间
32 小时
 楼主| 发表于 2019-3-13 11:47:14 | 显示全部楼层
宫本无三四 发表于 2019-3-13 10:05
IO全设成模拟输入试过了吗?

目前浮空的脚是模拟输入,有上下拉电阻的就对应配成上下拉了。
回复

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7546
金钱
7546
注册时间
2016-11-30
在线时间
642 小时
发表于 2019-3-13 14:13:26 | 显示全部楼层
也无晴丶 发表于 2019-3-13 11:46
后面改硬件再换大电阻,目前我把上拉的R28拆掉了。然后配置成PPout,down,输出0。这样应该没电流了吧,
...

现在功耗调到多少了?晶振这边用外部晶振的话应该功耗还会降一些,主频越低功耗越小。主要看你现在功耗是什么量级的
回复

使用道具 举报

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2018-8-24
在线时间
32 小时
 楼主| 发表于 2019-3-13 15:46:21 | 显示全部楼层
lvkanger 发表于 2019-3-13 14:13
现在功耗调到多少了?晶振这边用外部晶振的话应该功耗还会降一些,主频越低功耗越小。主要看你现在功耗是 ...

目前断掉其他外设的供电,41ua。然后有俩问题还想请教下,
1,我看手册上说的stop with rtc模式,会关闭HSE ,PLL,然而我在它的LL库函数里貌似没看到有切换时钟源的操作,那我从HSE+PLL进入stop之后,时钟源是用的哪个?
2,如果我自己切换的话,我试过直接写RCC->CFGR,以及调用LL库里面的函数去改时钟源。貌似并不起作用。GET到的时钟源依旧是PLL。
(stop之后串口停用,GET到的时钟源看不到)
回复

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7546
金钱
7546
注册时间
2016-11-30
在线时间
642 小时
发表于 2019-3-13 17:22:35 | 显示全部楼层
也无晴丶 发表于 2019-3-13 15:46
目前断掉其他外设的供电,41ua。然后有俩问题还想请教下,
1,我看手册上说的stop with rtc模式,会关闭 ...

1.电压模式HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE2);
2.RTC使用外部晶振功耗可以忽略。
3.我的进入stop模式的函数
void Enter_Stop_Mode(void)
{
        HAL_RCCEx_WakeUpStopCLKConfig(RCC_STOP_WAKEUPCLOCK_MSI);//配置退出stop模式后系统时钟为MSI 100K
        HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI);
}
4.__HAL_RCC_PWR_CLK_ENABLE();这个时钟要打开。
5.让程序完成初始化之后直接进入stop模式测功耗看看。调整进stop模式的位置,看功耗的变化情况。
比如:
时钟设置;
IO初始化;
stop;//记录功耗
串口初始化;
stop;//记录功耗
ADC初始化;
stop;//记录功耗
...
这样一步一步的去调,看功耗的变化再去分析。

这都是我之前调试的一些经验,可以参考一下。
功耗这块容易出问题的也就是时钟和IO口了。
回复

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7546
金钱
7546
注册时间
2016-11-30
在线时间
642 小时
发表于 2019-3-13 17:28:33 | 显示全部楼层
也无晴丶 发表于 2019-3-13 15:46
目前断掉其他外设的供电,41ua。然后有俩问题还想请教下,
1,我看手册上说的stop with rtc模式,会关闭 ...

进入stop模式后系统时钟就停止了,只有rtc的时钟还在运行吧。
回复

使用道具 举报

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2018-8-24
在线时间
32 小时
 楼主| 发表于 2019-3-13 19:12:22 | 显示全部楼层
lvkanger 发表于 2019-3-13 17:28
进入stop模式后系统时钟就停止了,只有rtc的时钟还在运行吧。

也就是说芯片已经自行处理了?
按手册上说的是只有LSE和LSI在跑,然后我这边stop时只有IWDG和RTC在跑,用的LSI。这俩影响大吗
回复

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7546
金钱
7546
注册时间
2016-11-30
在线时间
642 小时
发表于 2019-3-14 09:49:26 | 显示全部楼层
LSI肯定会比LSE功耗要高一点
回复

使用道具 举报

54

主题

143

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
363
金钱
363
注册时间
2019-3-14
在线时间
44 小时
发表于 2019-3-14 10:03:29 | 显示全部楼层
自己顶顶贴
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 12:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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