[STM32H5]

STM32单片机双ADC同步转换和DMA传输数据到Buffer并通过串口发送数据的方法

[复制链接]
451|10
手机看帖
扫描二维码
随时随地手机跟帖
kevia|  楼主 | 2025-3-10 23:25 | 显示全部楼层 |阅读模式
  作者将在本文中通过实际例演示STM32单片机双ADC同步转换机制、通过DMA把采集到的数据发送到DMA Buffer中去,最后在ADC传输完成事件中断回调函数HAL_ADC_ConvCpltCallback()里,通过串口把转换的工程值发送到串口助手。

        可以参考本文作者的其他文章: 细说STM32单片机ADC规则组多通道输入和DMA传输数据到Buffer并通过串口发送数据的方法-CSDN博客  https://wenchm.blog.csdn.net/article/details/144060957

一、 工程配置
1、工程描述
        开发板的底板上有2个可调电位器的模拟信号输入到PA0和PA1引脚。

        使用ADC1和ADC2同步采集两个通道的信号,双重ADC同步采集时,不能采集同一个通道,所以使用ADC1_IN1采集可调电位器的模拟信号输入到PA0,使用ADC2_IN2采集另一个可调电位器的模拟信号输入到PA1,多重ADC模式只能采用DMA方式传输数据。

使用特权

评论回复
公羊子丹| | 2025-3-12 08:14 | 显示全部楼层
你的方法很清晰,STM32H5的双ADC同步采集确实很高效,尤其是结合DMA,数据传输又快又稳。

使用特权

评论回复
周半梅| | 2025-3-12 08:15 | 显示全部楼层
在双ADC同步采集中,ADC时钟配置也很关键,时钟频率太高可能会影响转换精度,你的时钟是怎么设置的?

使用特权

评论回复
帛灿灿| | 2025-3-12 08:17 | 显示全部楼层
HAL_ADC_ConvCpltCallback()回调里做串口发送时,如果数据量较大,可能会影响实时性,或许可以考虑用DMA传输串口数据。

使用特权

评论回复
童雨竹| | 2025-3-12 08:18 | 显示全部楼层
这种多ADC+DMA的组合在音频、信号分析等场景很实用,我之前也用过类似方法处理传感器阵列数据。

使用特权

评论回复
万图| | 2025-3-12 08:19 | 显示全部楼层
如果发现ADC采样值有偏差,可能和GPIO的配置有关,确保PA0和PA1引脚设置成模拟模式,避免干扰。

使用特权

评论回复
Wordsworth| | 2025-3-12 08:20 | 显示全部楼层
你的串口发送是直接发送ADC原始值,还是经过了数值转换?如果是电压测量,可能还需要加上转换系数。

使用特权

评论回复
Bblythe| | 2025-3-12 08:22 | 显示全部楼层
STM32H5系列的双ADC性能不错,支持更高的采样率,配合DMA时数据量很大时可以考虑使用更大的Buffer。

使用特权

评论回复
Pulitzer| | 2025-3-12 08:23 | 显示全部楼层
你在DMA的配置里用的是什么模式?循环模式(Circular Mode)在这种持续采样场景中效果挺好的。

使用特权

评论回复
Uriah| | 2025-3-12 08:24 | 显示全部楼层
为了避免数据错位,可以在DMA传输完成后加个标志位,确保HAL_ADC_ConvCpltCallback()里处理的是完整数据。

使用特权

评论回复
Clyde011| | 2025-3-12 08:25 | 显示全部楼层
如果串口助手接收数据有丢包的情况,建议在每次数据包前后加上帧头和帧尾,能提高数据完整性。

使用特权

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

本版积分规则

14

主题

19

帖子

0

粉丝