2017-05-31 1446 views
1

我使用stm32L151通过USB CDC与PC进行通信。我使用stm32 HAL库来创建我的项目。 我发现USB发送数据的间隔为1ms,每次发送64字节。那么,USB CDC的最大速度是64kbyte/s?而且这个速度远低于USB全速12Mbit /秒。我如何才能达到这个速度?或至少是这个速度的一小部分? 谢谢STM32 USB CDC的最大速度是多少?

回答

0

没有。如果您的代码“足够快”,则最大CDC速度大约为1MByte/sec。这可能需要在设备端有一个大的(> 1KB)FIFO。哦,并且PC侧必须能够足够快地读取数据,例如有很大的缓冲。

64KByte/s限制适用于使用中断端点的USB HID。 USB CDC接口使用更快的批量终端。

+0

Thanks @Turbo J.如前所述,我使用HAL库,我使用函数CDC_Transmit_FS()将数据发送到PC。我应该如何使用此功能达到1MB/s?我有一个2K字节的大缓冲区,但是端点大小是64字节。我在示波器中看到usb每1毫秒发送一次数据。如果CDC功能使用端点发送数据,它可以每1ms发送64byte?我想错了吗?还有一个问题:是否有免费的软件来检查传入的数据波特率?谢谢 – Mohammad

0
  1. USB FS帧为1ms,所以如果你将64个字节放入缓冲区(使用HAL功能) - 它会在下一帧发送这64个字节。它将不会再发送更多的数据,直到另一个1ms帧

  2. 如何提高速度 - >将数据集中在更大的块中,并在一个事务中发送更多的数据(使用HAL库高达8kB)。

+0

非常感谢您的帮助。那么,我们可以说使用HAL库的最大速度将是8kB * 64 = 512kByte /秒或4096Mbit /秒?这是真的吗?我们如何能够达到全速,例如8 Mbit/s或1MByte/s?谢谢 – Mohammad

+0

您需要比STM提供的USB库更好一些。请记住,Windows本身会限制速度,因为内置的VCOM实施不是很好 –

+0

再次感谢@ PeterJ。我可以使用HAL库达到500kByte /秒的最大速度。有没有什么技巧使用HAL库来提高速度?或者可以向我介绍比HAL库更好的usb库吗? – Mohammad