硬汉嵌入式论坛

 找回密码
 立即注册
查看: 259|回复: 4
收起左侧

[ADC] ADC转换后的数据通过DMA传输到缓存区中,如果通过USB虚拟串口发送至上位机该如何操作?

[复制链接]

4

主题

13

回帖

25

积分

新手上路

积分
25
发表于 2024-2-20 15:16:19 | 显示全部楼层 |阅读模式
你好汉哥,有个问题需要请教一下!
H7我使用了三个ADC分别为ADC1、ADC2和ADC3,其中每个ADC选用两个通道进行数据的采集转换(共六个通道),我采用DMA的方式将每个ADC采集的数据分别存放在三个自定义的uint16_t的缓存区中ADC1_TransVal[128]、ADC2_TransVal[128]、ADC3_TransVal[128],需要实现六个通道的数据通过USB的虚拟串口方式传输到Labview上位机,我的问题有三个:
1、因为每个缓存区中存放了两个通道的数据,而且是以121212的方式存放的,那么我在通过VCP发送之前需要将六个通道的数据整合在一起,也就是以123456,123456这个通道的存放顺序,然后依次发送出去么?
2、如何实现六个通道的数据打包并以乒乓发送的方式进行传输上位机?
3、使用USB VCP发送我应该调用库函数中的哪个?
感谢汉哥为我答疑!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2024-2-20 16:06:10 | 显示全部楼层
1、不用,自己定义个协议就行。比如加个开头和结束标识。
2、使用ADC+DMA双缓冲,一个缓冲存ADC的时候,另一个缓冲的数据通过虚拟串口发送出来。
3、这个看你用的那个USB库了,都有对应的API。
回复

使用道具 举报

4

主题

13

回帖

25

积分

新手上路

积分
25
 楼主| 发表于 2024-2-20 16:27:48 | 显示全部楼层
如果使用例程中的双缓冲区,会不会存在前半个缓存区的数据没发完,后半个缓存区又存满,然后将前半个缓存区覆盖掉的情况呢?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2024-2-20 17:08:09 | 显示全部楼层
langlangago 发表于 2024-2-20 16:27
如果使用例程中的双缓冲区,会不会存在前半个缓存区的数据没发完,后半个缓存区又存满,然后将前半个缓存区 ...

1、给你的虚拟串口发送开个大的缓冲,可以存储多轮ADC数据。
2、当然,最好的还是给你的虚拟串口发送速度要快于你的ADC转换一轮缓冲的速度,也就需要你合理设置ADC转换速度和DMA缓冲大小。
回复

使用道具 举报

4

主题

13

回帖

25

积分

新手上路

积分
25
 楼主| 发表于 2024-2-20 17:19:12 | 显示全部楼层
十分感谢汉哥!
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 15:34 , Processed in 0.162232 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表