最近使用stmf103做一个信号采集的实验板,觉得用usb传数据比较方便(主要是笔记本上都不带串口啊)。比较后打算用usb的虚拟串口功能比较好。有主机端的驱动程序,又有设备端的例程。 但是用起来有很多问题。因为是实时采集,所以缓冲区(buff_in)满后就传输,发现用串口调试助手接收的数据最初很快,几秒钟后就变得有停顿,速度明显变慢。起初怀疑dma或da处有问题。 所以定义一个640字节的数组,初始化后连续传输,发现也有同样问题。速度变慢,同时分包连续传输(比如32字节或64字节)时,会有丢包的现象,而且比较规律,就是包是完整,但是中间会丢掉几个包。接收时cpu占用率为100%。郁闷啊,不知道什么原因。主机还是设备? 我的程序主要是基于万利提供的虚拟串口例程,驱动程序是st网站上提供的(6月份上传的版本比较新啊)。设备程序主要常识了两个办法。一个是在EP1_IN_callback函数中填入以下程序。 UsertoPMABufferCopy(&buff_in(i*32),ENP1_TXADDR,32); SetEP1TxCount(ENP1,32); setEPTxStatus(ENP1,EP_TX_VALID); 其中i是累加的,循环传输640个字节,这个程序出现上述问题后又常识了在主程序里修改,并去掉对EP1_IN_callback的修改,程序如下: if(GetEPTxStatus(ENP1)==EP_TX_NAK) { UsertoPMABufferCopy(&buff_in(i*32),ENP1_TXADDR,32); SetEP1TxCount(ENP1,32); setEPTxStatus(ENP1,EP_TX_VALID); } 问题依然,到底是为什么啊?还需要其他的什么设置吗?或者是驱动程序和串口调试助手不兼容,接受有问题?请各位高手指点
|