STM32F103 USB CDC迴環測試

/**
  * @brief  Data received over USB OUT endpoint are sent over CDC interface
  *         through this function.
  *
  *         @note
  *         This function will block any OUT packet reception on USB endpoint
  *         untill exiting this function. If you exit this function before transfer
  *         is complete on CDC interface (ie. using DMA controller) it will result
  *         in receiving more data while previous ones are still not sent.
  *
  * @param  Buf: Buffer of data to be received
  * @param  Len: Number of data received (in bytes)
  * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
  */
static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)
{
  /* USER CODE BEGIN 6 */
  uint32_t buffsize;
  USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);  //給USB庫指定一個接收緩衝區,讓USB控制器收到數據以後可以往裏填。
  USBD_CDC_ReceivePacket(&hUsbDeviceFS);
  
  if(1)       //調用了CDC_Transmit_FS做回聲
  {
      if(UserTxBufPtrIn + *Len <= APP_TX_DATA_SIZE)  //判斷緩衝區是否足夠
      {
        memcpy((uint8_t*)(UserTxBufferFS + UserTxBufPtrIn), Buf, *Len); 
        UserTxBufPtrIn += *Len;
      }
      else
      {
        memcpy((uint8_t*)(UserTxBufferFS), Buf, *Len); //從0開始
        UserTxBufPtrIn = *Len;
        UserTxBufPtrOu t= 0;
      }
      
      if(UserTxBufPtrOut != UserTxBufPtrIn)
      {
         if(UserTxBufPtrOut > UserTxBufPtrIn) /* Rollback */
         {
           buffsize= UserTxBufPtrIn;
         }
         else
         {
           buffsize = UserTxBufPtrIn - UserTxBufPtrOut;
         }
         
         CDC_Transmit_FS((uint8_t*)(UserTxBufferFS+UserTxBufPtrOut),buffsize);      //調用了CDC_Transmit_FS做回聲
         UserTxBufPtrOut += buffsize; 
      }
  }
  else
  {
    
  }

  return (USBD_OK);
  /* USER CODE END 6 */
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章