cancel
Showing results for 
Search instead for 
Did you mean: 

USBD_CDC_ACM_Activate() never get called

PPate.1
Associate III

Hi,

I have implemented CDC USB device on my custom board using STM32C071CBT6. When i connect USB cable to host PC then I can see Virtual COM Port on PC as 'USB Serial Device (COMxx)' However, I tried transmitting some data which I could not receive on PC side. After debugging I noticed that function USBD_CDC_ACM_Activate() is never getting called. 

In file, app_usbx_device.c, function MX_USBX_Device_Init() has following code:

UINT MX_USBX_Device_Init(VOID)

{

UINT ret = UX_SUCCESS;

UCHAR *device_framework_high_speed;

UCHAR *device_framework_full_speed;

ULONG device_framework_hs_length;

ULONG device_framework_fs_length;

ULONG string_framework_length;

ULONG language_id_framework_length;

UCHAR *string_framework;

UCHAR *language_id_framework;

 

UCHAR *pointer;

 

/* USER CODE BEGIN MX_USBX_Device_Init0 */

 

/* USER CODE END MX_USBX_Device_Init0 */

pointer = ux_device_byte_pool_buffer;

 

/* Initialize USBX Memory */

if (ux_system_initialize(pointer, USBX_DEVICE_MEMORY_STACK_SIZE, UX_NULL, 0) != UX_SUCCESS)

{

/* USER CODE BEGIN USBX_SYSTEM_INITIALIZE_ERROR */

return UX_ERROR;

/* USER CODE END USBX_SYSTEM_INITIALIZE_ERROR */

}

 

/* Get Device Framework High Speed and get the length */

device_framework_high_speed = USBD_Get_Device_Framework_Speed(USBD_HIGH_SPEED,

&device_framework_hs_length);

 

/* Get Device Framework Full Speed and get the length */

device_framework_full_speed = USBD_Get_Device_Framework_Speed(USBD_FULL_SPEED,

&device_framework_fs_length);

 

/* Get String Framework and get the length */

string_framework = USBD_Get_String_Framework(&string_framework_length);

 

/* Get Language Id Framework and get the length */

language_id_framework = USBD_Get_Language_Id_Framework(&language_id_framework_length);

 

/* 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,

UX_NULL) != UX_SUCCESS)

{

/* USER CODE BEGIN USBX_DEVICE_INITIALIZE_ERROR */

return UX_ERROR;

/* USER CODE END USBX_DEVICE_INITIALIZE_ERROR */

}

 

/* Initialize the cdc acm class parameters for the device */

cdc_acm_parameter.ux_slave_class_cdc_acm_instance_activate = USBD_CDC_ACM_Activate;

cdc_acm_parameter.ux_slave_class_cdc_acm_instance_deactivate = USBD_CDC_ACM_Deactivate;

cdc_acm_parameter.ux_slave_class_cdc_acm_parameter_change = USBD_CDC_ACM_ParameterChange;

 

/* USER CODE BEGIN CDC_ACM_PARAMETER */

 

/* USER CODE END CDC_ACM_PARAMETER */

 

/* Get cdc acm configuration number */

cdc_acm_configuration_number = USBD_Get_Configuration_Number(CLASS_TYPE_CDC_ACM, 0);

 

/* Find cdc acm interface number */

cdc_acm_interface_number = USBD_Get_Interface_Number(CLASS_TYPE_CDC_ACM, 0);

 

/* Initialize the device cdc acm class */

if (ux_device_stack_class_register(_ux_system_slave_class_cdc_acm_name,

ux_device_class_cdc_acm_entry,

cdc_acm_configuration_number,

cdc_acm_interface_number,

&cdc_acm_parameter) != UX_SUCCESS)

{

/* USER CODE BEGIN USBX_DEVICE_CDC_ACM_REGISTER_ERROR */

return UX_ERROR;

/* USER CODE END USBX_DEVICE_CDC_ACM_REGISTER_ERROR */

}

 

/* USER CODE BEGIN MX_USBX_Device_Init1 */

 

/* Initialization of USB device */

USBX_APP_Device_Init();

 

/* USER CODE END MX_USBX_Device_Init1 */

 

return ret;

}

 

VOID USBX_APP_Device_Init(VOID)

{

/* USER CODE BEGIN USB_Device_Init_PreTreatment_0 */

 

/* USER CODE END USB_Device_Init_PreTreatment_0 */

 

/* USB_DRD_FS init function */

MX_USB_PCD_Init();

/* USB_DRD_FS init function */

 

 

/* USER CODE BEGIN USB_Device_Init_PreTreatment_1 */

HAL_PCDEx_PMAConfig(&hpcd_USB_DRD_FS, 0x00, PCD_SNG_BUF, 0x0C);

HAL_PCDEx_PMAConfig(&hpcd_USB_DRD_FS, 0x80, PCD_SNG_BUF, 0x4C);

HAL_PCDEx_PMAConfig(&hpcd_USB_DRD_FS, 0x81, PCD_SNG_BUF, 0x8C);

/* USER CODE END USB_Device_Init_PreTreatment_1 */

 

/* Initialize the device controller driver*/

ux_dcd_stm32_initialize((ULONG)USB_DRD_FS, (ULONG)&hpcd_USB_DRD_FS);

/* Start the USB device */

HAL_PCD_Start(&hpcd_USB_DRD_FS);

 

/* USER CODE BEGIN USB_Device_Init_PostTreatment */

 

/* USER CODE END USB_Device_Init_PostTreatment */

}

 

Is something wrong in above init code? Please help locating the issue.

Thanks,

Pradeep

0 REPLIES 0