本人是基于STM32F4系列单片机进行的USB VCP开发。因为HAL库给提供了很好的USB库,只要在CDC_Transmit_FS和CDC_Receive_FS自己编写发收代码即可。如下为自己基于单个byte的接受代码。
[mw_shl_code=c,true]int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len) //当作中断来处理
{
uint32_t i = 0;
USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);
USBD_CDC_ReceivePacket(&hUsbDeviceFS);
for(i=0;i<*Len;i++)
{
USB_VCP_AddReceived( *(Buf + i) );
}
return (USBD_OK);
/* USER CODE END 6 */
}
[/mw_shl_code]
后来了解到USB可以一帧一帧的去接收数据的,我自己也觉得自己定义单个Byte去接受数据的话,整个代码的效率可能
差一些,另外一帧一帧接受数据的话,也有利于识别。所以就改成如下的接受代码。
[mw_shl_code=c,true]uint8_t USB_RX_Buffer[1024];
int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len) //当作中断来处理
{
USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &USB_RX_Buffer);
USBD_CDC_ReceivePacket(&hUsbDeviceFS);
USB_Reveive_Flag=1;
}
int main
[
if(USB_Receive_Flag)
{
USB_Receive_Flag
/*UserCode*/
}
}[/mw_shl_code]
后来我就在UserCode这里打上断电,发现USB接收的数据后面总是会多出一些Byte,比如我说我发了
AAABBB,打出来的数据是AAABBB?.。总是你发给他的数据不会少,只会多。不知道这是什么问题,有经
验的朋友可以帮我看看。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
后面出现错误的数据,我只要找到 这个字节所在的位置替换成' ',然后strcpy到另外一个字符数组当中
去,然后去处理这个正确的字符串。虽然基于我的项目应用解决了这个问题,但是在硬件层面上,你接收到
的数据错的那就是错的!
同时, 在STM32程序里面的int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len) {} 设断点.
比较BusHound看到的, 和这边看到的, 有什么差异.
一周热门 更多>