急,STMF337能否实现的SDADC1+DMA1+USB实时采样传输功能

2019-12-10 18:21发布

各位大牛:

        小弟,刚接手用stm337的SDADC实现三路实时采样USB传输的项目,先已经基本实现一路,但问题时,采出的波形部分丢失。

        我的思路如下: 用SDADC1的通道注入模式,循环采集,DMA搬数,循环模式,DMA的深度为512,当DMA全部传输产生中断,然后我
                        就去搬移,然后USB发送。

        我测试如下: 我用信号源给500HZ正玄信号输入,USB接收来的数用上位机绘出。

        遇到好几个问题如下:

        1.DMA每次产生全部传输完中断后,我就从buf1搬到buf2,但是bug下单步发现,搬到同时,buf1的数据含在变化,即就是SDADC1还在采集,       

        那么这样,我就会覆盖数据,buf2中也不是实时数据,我改怎么弄?

        2.我试图加大DMA的深度,buf1大小到4k short型,但仍然还是覆盖?为什么


        2.我试图用定时器控制注入速率,即采样率,降低采样率。但还是丢,为什么?

        3.还是一种想法,当进入DMA中断后,切换下次搬移目的地址,搬移另一个buf,但是怎么实现?这种思路是否正确?

        4.各位大牛,有什么高招?


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
20条回答
huarana
1楼-- · 2019-12-10 21:15
双缓存吧 ,  buf1存满了 就开始存buf2  ,同时从buf1取数。 要保证取数的时间小于 buf存满的时间。

2满了再换1.
acmilannast
2楼-- · 2019-12-10 21:31
1. 开DMA半满中断,满中断。半满中断拷贝前256    满中断拷贝后256  就不会产生数据重叠
xiaomu
3楼-- · 2019-12-10 21:50
3楼正确, dma一直在运行,你搬的过程中一直在采集数据,采用半满,全满中断处理最合适
wdluo
4楼-- · 2019-12-10 23:03
 精彩回答 2  元偷偷看……
wdluo
5楼-- · 2019-12-11 03:06
加上高速USB,我采集并口的数据,基本上30M速度不会丢数据
avr9299
6楼-- · 2019-12-11 06:27
不要buff1搬到buff2,中断中直接改dma存储地址到buff2,然后传buff1数据

一周热门 更多>