seawwh 发表于 2016-12-27 14:22:56

F205 虚拟串口通信可靠性问题

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 VQPHL7B 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=Buf;
    if (APP_Rx_ptr_in == APP_RX_DATA_SIZE)
      APP_Rx_ptr_in = 0;
}
return USBD_OK;
}

uint8_tBu;
static uint16_t VCP_DataRx (uint8_t* Buf, uint32_t Len) {

uint32_tCnt;
Cnt=Buf+((u16)Buf<<8);// 收到的长度信息L
VCP_DataTx( Bu, Cnt);         // 回发数据包
return USBD_OK;
}

测试发现问题: 当F205发送数据长度为4096以上的时候,有时PC机收数据包长度不够,

jackten 发表于 2016-12-27 14:35:26

谢谢分享                        

creep 发表于 2016-12-27 15:04:03

官方的例子是环形缓存,如果你要直接发送数据的话可以自己写个函数来发送数据查询数据发送状态。你可以参考下面帖子里的发送函数,无论是标准库或者HAL库都差不多。
【F769IDISCOVERY评测】高速USB VCP和全速USB VCP 速度对比
https://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=609496&fromuid=394920
(出处: 意法半导体STM32/STM8技术社区)



seawwh 发表于 2016-12-27 23:09:47

creep, 拜读了你的VCP测试帖子,很多的工作内容与我的相重合。
如果方便的话,请帮忙使用下列条件测试一下:

1. 使用FS VCP 测试;
2. #define APP_RX_DATA_SIZE   8192      // 发送缓冲区加大到8K
3. MCU发送的报文长度 4097-8192 之间;
4. 10000次以上的重复试验。

我的测试发现短报文(<4096)没有出现问题。

andypanfan 发表于 2016-12-28 08:50:09

还没有发送过这么长的数据,学习了谢谢!!!
页: [1]
查看完整版本: F205 虚拟串口通信可靠性问题