[STM32H7] ADC双通道采样并UART发送数据

[复制链接]
2925|10
 楼主| 咚了个咚 发表于 2025-3-2 20:30 | 显示全部楼层 |阅读模式
想要同时连续采样两个通道,采样率为10 ksps-12位,然后通过UART将数据发送给PC。我用Cubemx创建了配置和初始化,但没有使用HAL库来处理多通道ADC。
根据HAL驱动用户手册记性了多模式ADC的常规通道配置,选择多通道模式ADC(双模或三模),并使用HAL_ADCEx_MultiModeConfigChannel()函数配置DMA模式。
使用HAL_ADCEx_MultiModeStart_DMA()启动ADC外设,在这个阶段,用户指定每次转换结束时要传输的数据长度。
使用HAL_ADCEx_MultiModeGetValue()函数读取ADC转换结果。是否可以使用'HAL_TIM_PeriodElapsedCallback()'来触发ADC开始采样并通过UART发送其数据?

公羊子丹 发表于 2025-3-3 07:44 | 显示全部楼层
我之前也试过类似的方案,不过用的是单通道采样+DMA,你的双通道模式有测试过数据同步性吗?
周半梅 发表于 2025-3-3 07:48 | 显示全部楼层
用HAL_TIM_PeriodElapsedCallback()触发ADC采样是个不错的方法,这样可以精准控制采样率。你打算用哪个定时器呢?
帛灿灿 发表于 2025-3-3 07:49 | 显示全部楼层
HAL_ADCEx_MultiModeGetValue()只能获取主ADC的数据,副ADC的数据你是怎么取的?
童雨竹 发表于 2025-3-3 07:51 | 显示全部楼层
UART的波特率设多少才能保证10 ksps的数据流不丢失?用DMA传输UART会不会更稳定?
万图 发表于 2025-3-3 07:52 | 显示全部楼层
我试过类似的多通道ADC采样,但用的是中断方式,感觉DMA模式效率会更高,想知道你的实际测试效果如何?
Wordsworth 发表于 2025-3-3 07:53 | 显示全部楼层
你考虑过用FIFO或者环形缓冲区存数据后再通过UART发送吗?这样可能更稳定一些。
Bblythe 发表于 2025-3-3 07:55 | 显示全部楼层
你的数据格式是怎样的?是直接把ADC的12位数据打包成16位发送,还是有其他编码方式?
Pulitzer 发表于 2025-3-3 07:56 | 显示全部楼层
STM32H7的ADC带双缓冲DMA模式,你有没有试过?这样数据可以更流畅地传输给UART。
Uriah 发表于 2025-3-3 07:58 | 显示全部楼层
你用的是同步模式还是异步模式的ADC?如果是异步模式,两个通道的数据可能不会严格对齐。
Clyde011 发表于 2025-3-3 07:59 | 显示全部楼层
这个方案很有意思,我正在H7上做类似的ADC采样,可以分享你的CubeMX配置吗?
捧一束彼岸花 发表于 2025-3-22 01:34 | 显示全部楼层
是的,你可以使用 HAL_TIM_PeriodElapsedCallback() 来触发 ADC 开始采样,并通过 UART 发送数据

西洲 发表于 2025-3-22 02:23 | 显示全部楼层
建议使用定时器触发 ADC 采样,采样率为 10 ksps。同时采样两个 ADC 通道,并通过 DMA 传输数据

风凉 发表于 2025-3-22 03:23 | 显示全部楼层
通过 UART ADC 转换结果发送给 PC

温室雏菊 发表于 2025-3-22 04:43 | 显示全部楼层

ADC 和定时器的配置是否正确
白马过平川 发表于 2025-3-22 05:23 | 显示全部楼层
是不是DMA 没有正常工作啊

故意相遇 发表于 2025-3-22 06:34 | 显示全部楼层
UART 的波特率是否匹配。如果不匹配也是不行的

她已醉 发表于 2025-3-22 07:37 | 显示全部楼层
看看定时器中断是否正常触发

失物招領 发表于 2025-3-22 08:34 | 显示全部楼层
串口通讯部分用串口+DMA应该会好一些

春日负喧 发表于 2025-3-22 09:34 | 显示全部楼层
我觉得你这种操作应该是没啥问题的

您需要登录后才可以回帖 登录 | 注册

本版积分规则

57

主题

66

帖子

0

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