重新问个问题,stm32 usb采集

[复制链接]
1887|11
 楼主| gurong60 发表于 2013-6-25 16:13 | 显示全部楼层 |阅读模式
采用外部16位adc对信号进行100Khz的采样,然后用usb把数据(数据大小是100K*2字节)传输到电脑上
采用定时中断来对信号采样,
现在遇到问题是,如果发送的信号是直流,是没问题,但交流,问题就大了
30HZ 360截图20130625160904078.jpg
10HZ 360截图20130625161015625.jpg
这里为保证采样的时间准确,定时中断使用最高优先级
抓包数据显示 360截图20130625161259500.jpg
IJK 发表于 2013-6-25 17:18 | 显示全部楼层
看上去丢数据了?
但是按理用BULK传输不应该丢数据的。
Eric2013 发表于 2013-6-25 18:46 | 显示全部楼层
 楼主| gurong60 发表于 2013-6-25 18:57 | 显示全部楼层
我在定时中断里面经行数据处理大概在5us处理时间,而中断是10us一次,
这样在usb等到有64字节时进行传输,会不会和定时中断冲突?
 楼主| gurong60 发表于 2013-6-27 20:13 | 显示全部楼层
 楼主| gurong60 发表于 2013-6-27 20:14 | 显示全部楼层
IJK 发表于 2013-6-25 17:18
看上去丢数据了?
但是按理用BULK传输不应该丢数据的。

100k的采样率,stm32够用吗?
lxyppc 发表于 2013-6-27 22:00 | 显示全部楼层
100k,完全无压力啊
用dma来收集外部ad数据。
王紫豪 发表于 2013-6-28 01:46 | 显示全部楼层
对,要么dma,要么外部 fifo
IJK 发表于 2013-6-28 09:32 | 显示全部楼层
gurong60 发表于 2013-6-25 18:57
我在定时中断里面经行数据处理大概在5us处理时间,而中断是10us一次,
这样在usb等到有64字节时进行传输, ...

“定时中断里面经行数据处理大概在5us处理时间,而中断是10us一次”

这种做法是有问题的,中断函数应该尽量短、小 才行。
如上面所说 ADC取数应该用DMA。
 楼主| gurong60 发表于 2013-6-30 22:46 | 显示全部楼层
lxyppc 发表于 2013-6-27 22:00
100k,完全无压力啊
用dma来收集外部ad数据。

采用spi传输方式,接收20位数据,还要在中断里面对数据处理,移位成16位,不知道dma方式如何进行
 楼主| gurong60 发表于 2013-6-30 22:50 | 显示全部楼层
IJK 发表于 2013-6-28 09:32
“定时中断里面经行数据处理大概在5us处理时间,而中断是10us一次”

这种做法是有问题的,中断函数应该 ...

好吧,我慢慢来啃dma,再问下 USB_SIL_Write(EP1_IN, data35, 64);这个函数执行一次需要多少时间,标准48M USB?
还有为什么 USB_SIL_Write(EP1_IN, data35, 64);和 USB_SIL_Write(EP1_IN, data35,1024);循环执行的时候 抓包软件显示的速度不一样?
IJK 发表于 2013-7-1 09:52 | 显示全部楼层
gurong60 发表于 2013-6-30 22:46
采用spi传输方式,接收20位数据,还要在中断里面对数据处理,移位成16位,不知道dma方式如何进行 ...

spi传输方式可以考虑用DMA,接收到16次(或者32次之类的)数据后,在主程序里进行移位处理,然后再通过USB发出去
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:对手,队友

179

主题

1308

帖子

4

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