[STM32L0] L0芯片进入STOP模式后功耗高。

[复制链接]
2095|12
 楼主| gezhia 发表于 2017-9-7 12:19 | 显示全部楼层 |阅读模式
本帖最后由 gezhia 于 2017-9-7 12:22 编辑

芯片用一组IIC接口HAL_I2C_Master_Transmit;对外设写数据,然后HAL_I2C_DeInit,配置相关IO口味模拟输入状态,外部设备和上拉电平掉电,进入STOP模式。
测试发现,进入STOP模式后,功耗大概在0.45mA左右。
如果芯片上电初始化完成后,不操作,就是不调用HAL_I2C_Master_Transmit函数,能够正常进入低功耗。
通过逻辑分析全程监控数据通讯,整个通讯过程数据正常,响应正常。
grant_jx 发表于 2017-9-7 13:41 | 显示全部楼层
STOP要关掉之前使用的外设的。
mmuuss586 发表于 2017-9-7 14:03 | 显示全部楼层
程序没有把芯片外设关了吧
 楼主| gezhia 发表于 2017-9-7 14:25 | 显示全部楼层
grant_jx 发表于 2017-9-7 13:41
STOP要关掉之前使用的外设的。

已经调用HAL_I2C_DeInit来关闭啦!
而且在调用HAL_I2C_DeInit之后还将相关的IO口配置成了模拟输入状态。
 楼主| gezhia 发表于 2017-9-7 14:26 | 显示全部楼层
mmuuss586 发表于 2017-9-7 14:03
程序没有把芯片外设关了吧

芯片内的外设已经通过HAL_I2C_DeInit关闭了,而且外部设备也相应的进入掉电状态了
mmuuss586 发表于 2017-9-7 15:31 | 显示全部楼层
gezhia 发表于 2017-9-7 14:26
芯片内的外设已经通过HAL_I2C_DeInit关闭了,而且外部设备也相应的进入掉电状态了
...

端口的时钟也关了
 楼主| gezhia 发表于 2017-9-7 16:27 | 显示全部楼层
mmuuss586 发表于 2017-9-7 15:31
端口的时钟也关了

调用了
/* Disable GPIOs clock */
  __HAL_RCC_GPIOA_CLK_DISABLE();
  __HAL_RCC_GPIOB_CLK_DISABLE();
  __HAL_RCC_GPIOC_CLK_DISABLE();
  __HAL_RCC_GPIOD_CLK_DISABLE();
  __HAL_RCC_GPIOH_CLK_DISABLE();
 楼主| gezhia 发表于 2017-9-7 16:56 | 显示全部楼层
@grant_jx @mmuuss586

进入STOP之前都要调用哪些函数才能正常进入STOP模式?
zhazhahua 发表于 2017-9-8 09:34 | 显示全部楼层
gezhia 发表于 2017-9-7 16:56
@grant_jx @mmuuss586

进入STOP之前都要调用哪些函数才能正常进入STOP模式?

PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);//进入停止模式
是不是这个函数?
 楼主| gezhia 发表于 2017-9-8 10:12 | 显示全部楼层
我是希望确认一下,进入STOP模式前,启用过的外设是否都要对应的调用DeInit函数后才行。
grant_jx 发表于 2017-9-10 12:31 | 显示全部楼层
保险的做法,当然是全部关闭所有调用过的外设时钟,曾遇到过这样的问题。
客户以为只要调用了进入STOP的函数就算进了STOP模式了,实际何种低功耗模式进去前都是有准备工作要做的,比如对应时钟关闭、时钟的选择,GPIO对应唤醒的状态、内部调压器的设置,这些都会影响功耗级别。

但你的问题是开了调用HAL_I2C后的差别,你关闭I2C和对应GPIO的时钟看看效果。
 楼主| gezhia 发表于 2017-9-11 10:52 | 显示全部楼层
grant_jx 发表于 2017-9-10 12:31
保险的做法,当然是全部关闭所有调用过的外设时钟,曾遇到过这样的问题。
客户以为只要调用了进入STOP的函 ...

好的,谢谢!
 楼主| gezhia 发表于 2017-9-11 10:52 | 显示全部楼层
问题找到了,是手工焊接有问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

10

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部