Skip to main content
Visitor II
December 28, 2022
Question

I'm getting USBD_BUSY when i try to transmit data via virtual com port

  • December 28, 2022
  • 1 reply
  • 864 views
char *data = "Hello World"; 
 
while (1) { 	
 
HAL_GPIO_TogglePin(LD2_GPIO_Port,LD2_Pin); 	
 
HAL_Delay(1000); 	
 
CDC_Transmit_FS((uint8_t*)data,strlen(data)); }

uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)
{
 uint8_t result = USBD_OK;
 /* USER CODE BEGIN 7 */
 
 USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*)hUsbDeviceFS.pClassData;
 if (hcdc->TxState != 0){
 return USBD_BUSY;
 }
 USBD_CDC_SetTxBuffer(&hUsbDeviceFS, Buf, Len);
 result = USBD_CDC_TransmitPacket(&hUsbDeviceFS);
 /* USER CODE END 7 */
 return result;
}

I'm trying to transmit MPU6050 sensor readings to my computer via virtual comport.I'm using STM32 Nucleo F446RE. As far as i can see in debug mode there is no issue in sensor and sensor readings. Problem is I can't transmit them using USB. Are there anyone who have experienced this issue before?

    This topic has been closed for replies.

    1 reply

    Graduate
    December 28, 2022
    1. Do you have the F446 USB connected to your PC? The target MCU USB connector in not present on the Nucleo64 board - you need to use some extension borad with USB connector.
    2. You cannot transfer anything via VCOM until it's connected, physically and logically - the terminal is open. Typically, the VCOM is operational about 50 ms after the terminal connection is established.
    3. Calling CDC_Transmit_FS() from main will sooner or later lead to a hangup - you may call it only from an ISR of the same priority as USB interrupt.
    4. Start with VCOM character echo, then try to add your functionality.