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

STM32L051单片机ADC如何彻底关闭?

[复制链接]
zxk126 提问时间:2019-12-24 10:42 /
阅读主题, 点击返回1楼
收藏 评论16 发布时间:2019-12-24 10:42
16个回答
zxk126 回答时间:2020-8-14 15:59:16
问题终于解决,在此说明原因,以感谢给予帮助的同学们!



之前软件在开启ADC初始化后,电流由5.5uA上升至20uA,经查看手册发现reference开启后电流大约为13.525uA,怀疑是reference没关导致。


将初始化代码中关于开启reference部分代码注释掉,
  /** Configure for the selected ADC regular channel to be converted.
  */
//  sConfig.Channel = ADC_CHANNEL_VREFINT;
//  if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
//  {
//    Error_Handler();
//  }

此时,系统电流变为6uA左右,因此确定是由于开启了VREFINT导致。因此需要在关闭ADC的同时也要关闭reference


经过检查代码以及调试发现,执行函数
HAL_ADC_DeInit(&hadc);时会将ADC和VREFINT全部关闭,但是程序功耗并不降低。


又经过一段时间的调试和仔细阅读说明书,发现,PWR 电源控制寄存器(PWR_CR)中的ULP位会控制VREFINT在低功耗模式下的打开状态,


在进入低功耗模式前,必须将ULP置位,HAL_PWREx_EnableUltraLowPower();此时功耗下降至正常水平。至此折磨我很长一段时间的问题终于解决。


虽然问题解决,但仍然有一个疑问:

如果ADC不初始化,或者ADC初始化中不将VREFINT通道纳入转换通道,功耗不会增加,此时ULP位状态不影响。也就是说只要没有初始化设置采集内部参考通道,设置为低功耗模式下打开VREFINT也是无效的。但是只要初始化设置一次后,不管后面将ADC所有寄存器清零(HAL_ADC_DeInit),设置为不采集VREFINT,此时如果ULP0,则进入低功耗时VREFINT就会打开,不知是何原因?









Ankky 回答时间:2020-8-17 09:59:35
zhengxk-344971 发表于 2020-8-14 15:59
问题终于解决,在此说明原因,以感谢给与帮助的同学们!

感谢楼主分享。
12
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版