今天做STM32H7A3->PC的USB数据发送速度测试,发现数据传输速率一直很低:
这个速率是我无法接受的,甚至不如HID,可是接收速度却很快,将近900KB/S的速率。
上位机采用传输每调用一次发送函数就会发送63字节的数据,速度显示约为900KB/S,那会不会STM32端每次也只能发送63字节的数据?可考虑到STM32的USB在发送大于最大包长(full speed情况下为64字节)小于缓冲区容量的情况下应该会自动分包,而且用CDC例程一次性发送1K数据也没有这么慢过。
偶然间在Bus Hound查看STM32H7A3的USB信息,发现USB的最大包长不对:
虽然STM32H7A3有USB HS,但实际使用的是full speed模式,所以最大包长应为64而不是512。查看源码发现配置描述符关于最大包长写错了:
修改如下:
最后测试发现速度有明显提升:
一个小小的失误导致USB传输速度明显下降实属不该,以后写程序还是需要多点细心。
工程文件如下:
STM32H7A3_WINUSB独立库_下位机发送速度测试.zip
(999.91 KB)
WINUSB上位机.zip
(100.3 KB)
|