感谢您的反馈。对于您那边不能识别设备的问题,我们使用你所使用的BSP版本在AT-START板子上实验没有复现问题。但是对于您提到的收发数据问题,这边已找到问题原因;请按照如下修改代码,测试看看。
将usbd_cdc_vcp.c文件内的CDC_DataTx函数替换如下即可:
static uint16_t CDC_DataTx (void)
{
uint16_t dwSendLen = 0;
uint32_t SendPtr = 0;
static uint8_t send0packet = 0;
if (usb_txfifo.wrpointer == usb_txfifo.curpointer )
{
if(send0packet == 1)
{
USB_DCD_EPT_Tx (&USB_OTG_dev, CDC_IN_EP, &usb_txfifo.fifo[SendPtr] , 0 );
send0packet = 0;
return USB_DEVICE_OK;
}
else
{
return USB_DEVICE_FAIL;
}
}
if ( usb_txfifo.wrpointer > usb_txfifo.curpointer )
{
dwSendLen = usb_txfifo.wrpointer - usb_txfifo.curpointer;
}
else
{
dwSendLen = USB_FIFO_MAX - usb_txfifo.curpointer;
}
SendPtr = usb_txfifo.curpointer;
if ( dwSendLen > 64 )
{
dwSendLen = 64;
}
usb_txfifo.curpointer += dwSendLen;
if ( usb_txfifo.curpointer >= USB_FIFO_MAX )
usb_txfifo.curpointer = 0;
send0packet = 1;
USB_DCD_EPT_Tx (&USB_OTG_dev, CDC_IN_EP, &usb_txfifo.fifo[SendPtr] , dwSendLen );
return USB_DEVICE_OK;
}
|