langlangago 发表于 2024-2-20 15:16:19

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

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

eric2013 发表于 2024-2-20 16:06:10

1、不用,自己定义个协议就行。比如加个开头和结束标识。
2、使用ADC+DMA双缓冲,一个缓冲存ADC的时候,另一个缓冲的数据通过虚拟串口发送出来。
3、这个看你用的那个USB库了,都有对应的API。

langlangago 发表于 2024-2-20 16:27:48

如果使用例程中的双缓冲区,会不会存在前半个缓存区的数据没发完,后半个缓存区又存满,然后将前半个缓存区覆盖掉的情况呢?

eric2013 发表于 2024-2-20 17:08:09

langlangago 发表于 2024-2-20 16:27
如果使用例程中的双缓冲区,会不会存在前半个缓存区的数据没发完,后半个缓存区又存满,然后将前半个缓存区 ...

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

langlangago 发表于 2024-2-20 17:19:12

十分感谢汉哥!
页: [1]
查看完整版本: ADC转换后的数据通过DMA传输到缓存区中,如果通过USB虚拟串口发送至上位机该如何操作?