|
发送大量数据,程序中怎么匹配stm32开发板和PC上位机
[复制链接]
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上位机,才能保证数据一完整不丢包,不会被冲掉或覆盖掉? |
|
|