Skip to main content
Associate II
March 12, 2025
Solved

STM32H753ZI Nucleo board with USB_OTG_FS communication

  • March 12, 2025
  • 1 reply
  • 475 views

 

I'm using the STM32H753ZI Nucleo board with USB_OTG_FS communication,

and I have enabled VBUS_SENSING.

 

I would like to detect when the physical connection is lost,

but I am not sure how to do it.

Could you kindly provide any reference materials or guidance on the best approach?

This topic has been closed for replies.
Best answer by FBL

Hi @HMsDobby2 

Which stack are you using? If it is USBX x-cube-azrtos-h7, in order to implement detection of USB cable removal, you can add the following in app_usbx_device.c file.


static UINT USBD_ChangeFunction(ULONG Device_State)
{
 UINT status = UX_SUCCESS;
 
/* USER CODE BEGIN USBD_ChangeFunction0 */
 
/* USER CODE END USBD_ChangeFunction0 */
 
switch (Device_State)
{
 case UX_DEVICE_ATTACHED:
 
 /* USER CODE BEGIN UX_DEVICE_ATTACHED */
 
 /* USER CODE END UX_DEVICE_ATTACHED */
 
 break;
 
 case UX_DEVICE_REMOVED:
 
 /* USER CODE BEGIN UX_DEVICE_REMOVED */
 
 /* USER CODE END UX_DEVICE_REMOVED */
 
 break;
 
 case UX_DCD_STM32_DEVICE_CONNECTED:
 
 /* USER CODE BEGIN UX_DCD_STM32_DEVICE_CONNECTED */
 
 /* USER CODE END UX_DCD_STM32_DEVICE_CONNECTED */
 
 break;
 
 case UX_DCD_STM32_DEVICE_DISCONNECTED:
 
 /* USER CODE BEGIN UX_DCD_STM32_DEVICE_DISCONNECTED */
 
 HAL_PCD_DisconnectCallback(&hpcd_USB_OTG_HS);
 
 /* USER CODE END UX_DCD_STM32_DEVICE_DISCONNECTED */
 
 break;
 
 case UX_DCD_STM32_DEVICE_SUSPENDED:
 
 /* USER CODE BEGIN UX_DCD_STM32_DEVICE_SUSPENDED */
 
 /* USER CODE END UX_DCD_STM32_DEVICE_SUSPENDED */
 
 break;
 
 case UX_DCD_STM32_DEVICE_RESUMED:
 
 /* USER CODE BEGIN UX_DCD_STM32_DEVICE_RESUMED */
 
 /* USER CODE END UX_DCD_STM32_DEVICE_RESUMED */
 
 break;
 
 case UX_DCD_STM32_SOF_RECEIVED:
 
 /* USER CODE BEGIN UX_DCD_STM32_SOF_RECEIVED */
 
 /* USER CODE END UX_DCD_STM32_SOF_RECEIVED */
 
 break;
 
 default:
 
 /* USER CODE BEGIN DEFAULT */
 
 /* USER CODE END DEFAULT */
 
 break;
 
}

And update this call

/* Install the device portion of USBX */
if (ux_device_stack_initialize(device_framework_high_speed,
device_framework_hs_length,
device_framework_full_speed,
device_framework_fs_length,
string_framework,
string_framework_length,
language_id_framework,
language_id_framework_length,
USBD_ChangeFunction) != UX_SUCCESS)

 

1 reply

FBLBest answer
ST Technical Moderator
March 26, 2025

Hi @HMsDobby2 

Which stack are you using? If it is USBX x-cube-azrtos-h7, in order to implement detection of USB cable removal, you can add the following in app_usbx_device.c file.


static UINT USBD_ChangeFunction(ULONG Device_State)
{
 UINT status = UX_SUCCESS;
 
/* USER CODE BEGIN USBD_ChangeFunction0 */
 
/* USER CODE END USBD_ChangeFunction0 */
 
switch (Device_State)
{
 case UX_DEVICE_ATTACHED:
 
 /* USER CODE BEGIN UX_DEVICE_ATTACHED */
 
 /* USER CODE END UX_DEVICE_ATTACHED */
 
 break;
 
 case UX_DEVICE_REMOVED:
 
 /* USER CODE BEGIN UX_DEVICE_REMOVED */
 
 /* USER CODE END UX_DEVICE_REMOVED */
 
 break;
 
 case UX_DCD_STM32_DEVICE_CONNECTED:
 
 /* USER CODE BEGIN UX_DCD_STM32_DEVICE_CONNECTED */
 
 /* USER CODE END UX_DCD_STM32_DEVICE_CONNECTED */
 
 break;
 
 case UX_DCD_STM32_DEVICE_DISCONNECTED:
 
 /* USER CODE BEGIN UX_DCD_STM32_DEVICE_DISCONNECTED */
 
 HAL_PCD_DisconnectCallback(&hpcd_USB_OTG_HS);
 
 /* USER CODE END UX_DCD_STM32_DEVICE_DISCONNECTED */
 
 break;
 
 case UX_DCD_STM32_DEVICE_SUSPENDED:
 
 /* USER CODE BEGIN UX_DCD_STM32_DEVICE_SUSPENDED */
 
 /* USER CODE END UX_DCD_STM32_DEVICE_SUSPENDED */
 
 break;
 
 case UX_DCD_STM32_DEVICE_RESUMED:
 
 /* USER CODE BEGIN UX_DCD_STM32_DEVICE_RESUMED */
 
 /* USER CODE END UX_DCD_STM32_DEVICE_RESUMED */
 
 break;
 
 case UX_DCD_STM32_SOF_RECEIVED:
 
 /* USER CODE BEGIN UX_DCD_STM32_SOF_RECEIVED */
 
 /* USER CODE END UX_DCD_STM32_SOF_RECEIVED */
 
 break;
 
 default:
 
 /* USER CODE BEGIN DEFAULT */
 
 /* USER CODE END DEFAULT */
 
 break;
 
}

And update this call

/* Install the device portion of USBX */
if (ux_device_stack_initialize(device_framework_high_speed,
device_framework_hs_length,
device_framework_full_speed,
device_framework_fs_length,
string_framework,
string_framework_length,
language_id_framework,
language_id_framework_length,
USBD_ChangeFunction) != UX_SUCCESS)

 

To give better visibility on the answered topics, please click on "Best answer" on the reply which solved your issue or answered your question.Best regards,FBL