打印
[应用相关]

实战经验 | 关于STM32H7使用LL库生成ADC代码工作异常问题说明

[复制链接]
70|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主


01前言
在客户使用STM32H723以及STM32H743的16-bit的ADC过程中,反馈如果使用HAL库,ADC可以正常采样,运行正常,但如果使用LL库生成的代码则ADC采样结果异常。针对这个问题,在CubeMx V6.12版本下测试,的确发现了客户描述的问题,因此就这个LL库的Bug进行测试说明,使用硬件板Nucleo-H743ZI测试。

02复现客户描述问题
2.1. 使用CubeMx对ADC进行配置


使用CubeMx对ADC进行配置,这边使用模拟功能复用方式,让PA4,PA5分别做为ADC的输入通道同时也做为DAC的输出通道,方便查看数据正确与否。

















从上面测试看,当配置DAC输出为0x300(12-bit),那么16-bit的ADC1的注入组以及规则组的数据应该在0x3000附近是正确的,这边可以实时改变DAC数据,那么ADC结果将跟随DAC数据的变化而变化。


2.2. 复现客户问题

同样的配置,只是在CubeMx选择ADC使用LL库,然后生成代码。
可以看到上面的采样数据是错误的,而且如果改变DAC的输出,ADC通道值也是无规律的不跟随DAC数据而变化。


03原因分析并给出修改方法
3.1. 错误原因分析

经过测试发现,LL库和HAL库在最底层寄存器级别配置中有两个点是不同的,一个是LL库并没有配置ADC的Boost模式,依然保持默认状态,另外一个是LL库没有对ADC的channel preselection进行配置,这将导致ADC看上去在工作,实际上通道是没连接到外部管脚的,因此会产生客户描述的错误。







3.2. 解决方法

当使用ADC的LL库进行配置时候,当前版本的(CubeMx 6.12或者之前版本,CubeH7 V1.11或者之前版本)需要手动增加Boost以及PCSEL的配置,然后再去运行ADC采样程序,这边注意要根据实际情况去修改,本例中使用的是CH18,CH19通道,因此会修改PCSEL为0x000C0000,如果实际中使用其他通道,则需要手动配置相关的数据,让通道能够切换转换。


点击按钮下载《关于STM32H7使用LL库生成ADC代码工作异常问题说明
》原文档。点击下载
相关阅读






使用特权

评论回复
沙发
STM新闻官|  楼主 | 2025-5-7 16:47 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:意法半导体(中国)投资有限公司
简介:您的嵌入式应用将得益于意法半导体领先的产品架构、技术、多源产地和全方位支持。意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器。

1287

主题

1512

帖子

20

粉丝