0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

实战经验 | STM32U5 ADC 自校准不成功的问题分析

STM32单片机 来源:未知 2023-12-10 16:45 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

wKgZomV1e7qAZlHJAAHUHXdxAL4922.gif

关键词:STM32U5,ADC

目录预览

1、引言

2、问题

3、问题解决

4、小结

01

引言

很多 STM32 系列中的 ADC 都带有自校准的功能。它提供了一个自动校准的过程,用于驱动包括 ADC 上电/掉电序列在内的所有校准动作。在这个过程中,ADC 计算出一个校准因子,并在内部应用到此 ADC 模块,直到下一次 ADC 掉电。在执行任何 ADC 操作之前必须校准,以消除芯片之间 ADC 结果的偏差。

02

问题

2.1. 问题详情

客户使用 STM32U575ZIT6Q 验证 ADC4 时,使用 STM32CubeMX 配置后生成工程项目。因为使用 ADC 进行采样转换前,必须要做 ADC 的自校准。于是在 main 函数中加入自校准代码,如图 1 所示。

wKgZomV1e7qAY1wgAABT0CW0xu8134.jpg

图1.代码:ADC 自校准

然而,在运行代码的情况下,发现 PC 指针最后跑到这个 Calibration Error 的Error_Handler()里。也就是说,执行自校准失败了!

再检查进入 Error_Handler()发生的问题,发现在执行HAL_ADCEx_Calibration_Start()时陷在了下面这个 Loop 当中,如图 2 所示。

wKgZomV1e7qATXCCAACJk9sCAkM641.jpg

图2.代码:等待 ADC 自校准完成

也就是说,ADCAL 位被置 1 后,始终没有被硬件清 0,代表自校准始终不成功。

2.2. 问题分析

查看 STM32U5 的参考手册 RM0456 中关于自校准的描述。考虑到校准没有成功,那么应该看看是不是自校准需要哪些条件,而这些条件并没有成立。

于是,在 ADC 章节中的 Calibration 小节找到了这么一段话,如图 3 所示。

wKgZomV1e7uAdIIgAACWubvvays217.jpg

图3.ADC 自校准要求条件

也就是说,在初始化自校准之前,需要保证 3 个条件:

1) ADC 的电压调整器已经使能并正常工作(ADVREGEN = 1 且 LDORDY =1)

2) ADC 没有打开(ADEN=0)

3) 自动掉电模式没有使能(AUTOFF = 0)

回到刚才等待 ADC 自校准完成的代码,当指针停留到这边时,在线调试检查各个标志位情况,发现 ADVREGEN=1,ADEN=0,AUTOFF=0,LDORDY=0。所以,可以肯定的是就是 LDORDY 不为 1,也就是说 ADC 的电压调整器还没有准备好,导致了自校准无法成功并退出。

在 STM32U5 中,引入了一个新的 ADC 特性,叫 ADC 电压调整器(ADC voltageregulator)。在使用 ADC 之前,这个电压调整器必须被使能并且能够稳定工作。可以通过将 ADC_CR 寄存器中的 ADVREGEN 位置 1 来使能它,然后必须要等这个电压调整器的启动时间之后,才可以正常启动自校准或者使用 ADC。这个 LDO 有没有准备好,可以通过 ADC_ISR 寄存器中的 LDORDY 这个位来判断。LDORDY=1 才代表了 LDO 已经准备好了。

回到客户的问题,可以知道即使 ADVREGEN 置 1 了,LDORDY 始终没有置起来,电压调整器没有启动工作,难道是 ADC 的这个电压调整器坏掉了?

别急,想到电源的问题,还不能忘了参考手册的另一个章节 :电源控制 PWR。翻到PWR 这一章,先要考虑到,与 ADC 相关的电源为 VDDA,所以要重点查看 VDDA 的内容。找到 Independent analog peripherals supply 这一小节,可以看以下关键的句子,如图 4。

wKgZomV1e7uAZofaAAG5GJGPf38431.jpg

图4.独立的模拟外设供电

从图中黄色高亮的文字,我们可以了解到,STM32U5 的 VDDA 在控制上还跟其他系列不一样,它有一个开关来选择是否隔离。芯片复位后,VDDA 提供的 ADC 和模拟开关控制在逻辑和电气上是隔离的,因此不可用。一旦 VDDA 电源存在,就必须在使用模拟外设之前,通过在 PWR_SVMCR 寄存器中将 ASV 置位来消除隔离。也就是说,要想使用ADC,必须先将 ASV 置位来消除隔离。

在 PWR_SVMCR 寄存器的解释中,也可以看到 ASV 位的描述中要求将此位强制置 1才可以使用模拟外设,如图 5。

wKgZomV1e7uAQJKdAAC6z9jcInY958.jpg

图5.ASV 位描述

ASV 的配置是没有在 STM32CubeMX 中进行配置的,所以需要在后期添加。所以,很可能就是因为没有将 ASV 置位以使能 VDDA,导致 ADC 外设被隔离,并没有得到供电,所以 ADC 的电压调整器不可能正常工作,LDORDY 也不可能为 1。

03

问题解决

在工程项目中搜索 ASV,可以找到两个 API,如图 6。

wKgZomV1e7uAe3w2AADPvGnknRw460.jpg

图6.VDDA 使能或禁用 API

也就是说,我们需要先将 HAL_PWREx_EnableVddA()添加到代码中。因为其属于MSP 硬件配置,所以将其加到 HAL_MspInit()函数,如图 7 所示。

wKgZomV1e7uACC1ZAACpY3G4lvA520.jpg

图7.修改过的 HAL_MspInit()函数

再重新编译,然后执行指令代码,就可以看到 ADC 的自校准可以正常完成,PC 指针已经可以正常跑到自校准后面的代码了。

04

小结

在 STM32U5 中,为了更好地控制功耗,ADC 中加入电压调整器和 VDDA 隔离功能。这与以往的 STM32 有所不同,需要注意一下。使用 ADC 等模拟外设前,需要注意将PWR_SVMCR 寄存器中将 ASV 置位来消除隔离。

其实不仅仅是 VDDA 可以隔离,VDDIO2 也是可以的,通过 PWR_SVMCR 寄存器的IO2SV 位进行控制。

如果仔细看过 STM32U5 的 ADC 例程,可以看到 HAL_MspInit()的内容是这么写的,如图 8 所示。

wKgZomV1e7yAZ9XYAAC98ziGubc031.jpg

图8.例程的 HAL_MspInit()函数

可以看到,在 MSP 初始化里,不仅使能了 VDDA,还使能了 VDDIO2。所以要使用VDDIO2 相关 I/O 的,也需要注意一下。

wKgZomV1e7yACjBNAAHiBpzEGaQ725.png

完整内容请点击“阅读原文”下载原文档。


原文标题:实战经验 | STM32U5 ADC 自校准不成功的问题分析

文章出处:【微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6074

    文章

    45340

    浏览量

    663443
  • STM32
    +关注

    关注

    2305

    文章

    11120

    浏览量

    371119

原文标题:实战经验 | STM32U5 ADC 自校准不成功的问题分析

文章出处:【微信号:STM32_STM8_MCU,微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    用Jlink连接E203不成功是什么原因导致的?

    用Jlink连接E203不成功,卡了3天了,求助!
    发表于 11-11 06:01

    【课程升级】STM32U5开发板《TouchGFX 图形界面开发》,从快速入门到深度UI实战教程

    好消息,华清远见STM32U5开发板配套课程升级通知!本次升级计划,主要致力于为初学者提供更深入、更实用的TouchGFX图形界面开发学习体验。01课程升级核心内容快速入门,构建完整学习路径
    的头像 发表于 11-04 11:05 197次阅读
    【课程升级】<b class='flag-5'>STM32U5</b>开发板《TouchGFX 图形界面开发》,从快速入门到深度UI<b class='flag-5'>实战</b>教程

    立即在GitHub上抢先体验面向STM32U5的最新STM32Cube HAL更新

    其满足您的需求。 如何获取预览版本 面向STM32U5系列的STM32Cube HAL2预览版已在GitHub代码库STM32CubeU5-V2-Preview中开放。 更新后的HAL2有哪些新功能? HAL2在原有HAL的基础
    的头像 发表于 10-20 17:12 636次阅读

    scons --target=mdk5编译不成功如何解决?

    使用scons —target=mdk5编译不成功,报错如下: scons --target=mdk5 scons: Reading SConscript files ... UV4.exe
    发表于 09-26 07:20

    数据库慢查询分析与SQL优化实战技巧

    今天,我将分享我在处理数千次数据库性能问题中积累的实战经验,帮助你系统掌握慢查询分析与SQL优化的核心技巧。无论你是刚入门的运维新手,还是有一定经验的工程师,这篇文章都将为你提供实用的解决方案。
    的头像 发表于 09-08 09:34 605次阅读

    Linux服务器性能调优的核心技巧和实战经验

    如果你正在为这些问题头疼,那么这篇文章就是为你准备的!作为一名拥有10年经验的运维工程师,我将毫无保留地分享Linux服务器性能调优的核心技巧和实战经验
    的头像 发表于 08-27 14:36 718次阅读

    请问STM32U5不支持ST-LINK v2怎么办?

    STM32U5不支持ST-LINK v2怎么办?
    发表于 06-09 07:59

    移动电源EMC整改:认证失败到一次通过的实战经验

    深圳南柯电子|移动电源EMC整改:认证失败到一次通过的实战经验
    的头像 发表于 05-26 11:25 569次阅读
    移动电源EMC整改:认证失败到一次通过的<b class='flag-5'>实战经验</b>

    STM32U5‌(超低功耗MCU,支持TinyML)全面解析

    :在电机或设备中部署STM32U5,通过振动传感器数据训练TinyML模型,预测设备故障,避免停机损失。智能传感器 :集成14位ADC与MDF,实现高精度信号采集(如工业流量计),结合AI算法优化测量
    的头像 发表于 04-08 17:38 3191次阅读
    <b class='flag-5'>STM32U5</b>‌(超低功耗MCU,支持TinyML)全面解析

    训练好的ai模型导入cubemx不成功怎么处理?

    训练好的ai模型导入cubemx不成功咋办,试了好几个模型压缩了也不行,ram占用过大,有无解决方案?
    发表于 03-11 07:18

    DLPC3478初始化不成功是什么原因?

    : https://www.ti.com/tool/DLP3010EVM-LC 启动时候系统上电成功 但是没有VOFS,VRST,VBIAS均为0V,这是什么原因呢?初始化不成功 是怎么回事我们应该怎么做呢 我们没有接 3478 2005 3010,
    发表于 02-21 09:47

    烧录DLP4500 FIRMWARE的过程中一直不成功,什么原因?

    我在烧录DLP4500 FIRMWARE的过程中一直不成功,总是在最后一步停止不动,显示download completed in xxxxxx,但进度一直是0%不动,如图,请问这个问题如何解决?
    发表于 02-21 07:57

    提升开关电源效率的理论分析实战经验

    在这里有电源技术干货、电源行业发展趋势分析、最新电源产品介绍、众多电源达人与您分享电源技术经验,关注我们,与中国电源行业共成长! 提升开关电源效率的理论分析实战经验 引言 开关电源设
    的头像 发表于 01-09 10:04 1798次阅读
    提升开关电源效率的理论<b class='flag-5'>分析</b>与<b class='flag-5'>实战经验</b>

    ADS1262寄存器的写入不成功是什么原因?

    最近在调ADS1262,spi通信时序用的就是之前调1248的时序,没有问题。但是在调1262的时候,对寄存器的写入不成功,设置以AINCOM作为恒流源输出,1ma电流,然而流经2.4k电阻后电压
    发表于 12-30 07:46

    用cc2530驱动ADS8862采集数据,ADS8862老是驱动不成功,为什么?

    用cc2530驱动ADS8862采集数据,2530SPI主模式配置完毕,ADS8862老是驱动不成功,请问有没有相关例程呢?望大佬提供下,谢谢!
    发表于 12-10 07:04