STM32 HAL库USB VCP的一些问题

2019-07-20 04:05发布

      本人是基于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?.。总是你发给他的数据不会少,只会多。不知道这是什么问题,有经
验的朋友可以帮我看看。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。