F205 虚拟串口通信可靠性问题
最近在一个项目中,发现F205 USB的虚拟串口向PC机发送长报文的过程中偶尔会失败,主机收到的报文长度不够。为了固定问题,取消了其他代码做了一个简单的测试环境。
使用 F205 的USB FS 端口做VCP device 与主机通信,程序是使用ST最新库中的Project\USB_Device_Examples\VCP\EWARM 略加修改而成。
通信测试程序十分简单:
主机通过虚拟串口发送2个字节的长度信息L,F205收到之后发送L长度字节的数据包返回到Host,反复发送统计通信的可靠性。
运行环境: XP, F205版本:STM32F205RGT6 7B494 VQ PHL 7B 608,F205外部的时钟为 12M,
因此代码中做了相应的修改:
#define HSE_VALUE 12000000 // 配合12M时钟
#define PLL_M 12
#define APP_RX_DATA_SIZE 8192 // 发送缓冲区加大到8K
static uint16_t VCP_DataTx (uint8_t* Buf, uint32_t Len)
{
uint32_t i;
for (i=0; i<Len; i++) {
APP_Rx_Buffer[APP_Rx_ptr_in++]=Buf[i];
if(APP_Rx_ptr_in == APP_RX_DATA_SIZE)
APP_Rx_ptr_in = 0;
}
return USBD_OK;
}
uint8_t Bu[8192];
static uint16_t VCP_DataRx (uint8_t* Buf, uint32_t Len) {
uint32_t Cnt;
Cnt=Buf[0]+((u16)Buf[1]<<8); // 收到的长度信息L
VCP_DataTx( Bu, Cnt); // 回发数据包
return USBD_OK;
}
测试发现问题: 当F205发送数据长度为4096以上的时候,有时PC机收数据包长度不够,
|