STM32 USB CDC的最大速度是多少?

STM32 USB CDC的最大速度是多少?,usb,stm32,cdc,Usb,Stm32,Cdc,我使用stm32L151通过USB CDC与PC进行通信。我使用stm32 HAL库来创建我的项目。 我发现usb以1ms的间隔发送数据,每次发送64字节。那么,USB CDC的最高速度是64KB/s吗?这个速度比USB全速12比特/秒要低。我怎样才能达到这个速度?或者至少是这个速度的一小部分? 谢谢不。如果您的代码“足够快”,CDC的最大速度约为1MByte/sec。这可能需要设备端有一个大的(>1KB)FIFO。哦,PC端必须能够足够快地读取数据,例如使用大的缓冲区 64KByte/s限制适

我使用stm32L151通过USB CDC与PC进行通信。我使用stm32 HAL库来创建我的项目。 我发现usb以1ms的间隔发送数据,每次发送64字节。那么,USB CDC的最高速度是64KB/s吗?这个速度比USB全速12比特/秒要低。我怎样才能达到这个速度?或者至少是这个速度的一小部分? 谢谢

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

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

  • USB FS帧为1ms,因此如果将64个字节放入缓冲区(使用HAL函数),它将在下一帧中发送这64个字节。在下一个1ms帧之前,它不会再发送任何数据

  • 如何提高此速度->将数据聚合成更大的数据块,并在一个事务中发送更多数据(使用HAL库最多8kB)


  • 谢谢@Turbo J。如前所述,我使用HAL库,使用函数CDC_Transmit_FS()将数据发送到PC。如何使用此功能达到1MB/s?我有一个2KB大小的大缓冲区,但是端点大小是64字节。我在示波器上看到usb每1ms发送一次数据。如果CDC函数使用端点发送数据,它每1ms可以发送64字节?我想错了吗?还有一个问题:是否有任何免费软件来检查传入的数据波特率?感谢您需要打开COM端口进行读取,以便每毫秒查看除SOF之外的任何内容。一旦打开并读取,您应该每隔几微秒就会看到一个数据令牌。非常感谢您的帮助性回答。所以,我们可以说使用HAL库的最大速度是8kB*64=512KB/秒还是4096Mbit/秒?这是真的吗?我们如何达到接近全速,如8Mbit/s或1MByte/s?谢谢你需要一个比STM提供的更好的USB库。记住,windows本身会限制这种速度,因为VCOM的内置实现不是很好。再次感谢@PeterJ。使用HAL库,我可以达到500字节/秒的最大速度。使用HAL库有什么技巧可以提高这个速度吗?或者你能给我介绍比HAL更好的usb库吗?