USb做虚拟串口。 void USB_Send_Data(u16* data_buffer, u8 len) //调用的此函数发送数组 { count_in=len; UserToPMABufferCopy(data_buffer, ENDP1_TXADDR, count_in); SetEPTxCount(ENDP1, count_in); SetEPTxValid(ENDP1); } 上面帖子是可以发送64字节数据,不管是u8还是u16类型。 现在要发送的远远不止几十个字节,是8千字节到2万4千字节。 现在是单向传输,从stm32开发板往电脑上微机发送数据,开的单缓冲,缓冲区设置大小为512字节。 //b是数组名,offset是地址的偏置,count计数 USB_Send_Data(b+offset, 64); //每次发送64字节 offset+=64; count -=64; delay_1us(100); //delay 100us 发现当发送8000字节时,每发送64个字节要延迟50us,才能保证数据不丢包,8000个字节是完整的,数据的接收是通过串口调试助手接收的,波特率一般设置为115200,通过调试助手保存数据txt. 但是,当发送2万4千个字节时,要保证数据不丢包,每发送64字节要延时600us. 因为包与包之间的延时增加,一定使得USB的传输速率大大降低,所以,请问:每发送64字节为什么要加延时才能保证串口调试助手接受的数据完整不丢包,发送大量数据,程序中怎么匹配stm32开发板和PC上位机,才能保证数据一完整不丢包,不会被冲掉或覆盖掉? |