我正在编写STM32F373RCT程序,我一直在尝试制作一个USB虚拟comport设备。如果我以每秒960比特的速度发送数据(我使用的是计时器(50 is ),并且在每一个周期中发送14个字节),那么通信是正确工作的,但是如果我试图发送更多的数据,就会丢失一些数据。我必须提高数据传输速度。我该怎么增加?
发布于 2016-07-03 09:48:05
我发现了问题。在我的代码中,3个定时器中断是活动的,它们设置为高优先级。USB中断设置为低优先级。当USB连接到计算机时,新代码将停止计时器的中断。USB通讯现在稳定。非常感谢你的评论。
发布于 2016-06-27 18:19:54
USB有内置的流量控制,所以你应该能够尽快发送数据,而不会丢失任何数据。在您正在使用的USB堆栈中,或者在用于将数据发送到USB堆栈的代码中,都存在错误。如果您能够识别并修复该错误,那么您应该能够以更快的速度发送数据,而不会丢失任何东西。
发布于 2016-07-02 06:10:23
这可能是驱动程序或相关设置的错误。我的一个使用STM32F103通过USB以600 600KBytes/s的速度发送数据的项目曾经用VCP完成,并且运行良好,直到Linux内核更新。新内核附带了一个驱动程序,该驱动程序以高速度随机丢弃数据,可能是由于不同的缓冲区设置所致。
为了解决这个问题,我切换到libusb,并在用户空间中处理所有批量数据包。它在可靠性和延迟(如果使用异步API )方面都运行得很好。
我还制造了基于STM32F103的设备,这些设备与flashrom一起工作,可以在VCP上以800 800KBytes/s的速度传输,不会有任何损失或问题,所以我想更多的是关于缓冲区设置的。
https://stackoverflow.com/questions/38047739
复制相似问题