Skip to main content
Graduate
March 15, 2025
Question

USBX on STM32C0 incomplete?

  • March 15, 2025
  • 1 reply
  • 1231 views

Hi All,

I have previously experiemented with USB HID mouse coding on STM32F0 series and got code working very quickly.

However, I am now trying to get the same going using USBX on STM32C0. My application has been built in MX but wouldn't enumerate. I asked ST if they could take a look at my code, which they did, and said that I needed to add some code to app_usbx_device.c to configure the endpoints and a periodic call in main(). It now enumerates fine and although they didn't say as much I presume its absence in the MX build is a bug as MX knows exactly which endpoints I need enabled.

The applications engineer finished his email by saying 'and now you should be able to send reports' without elaborating. There's no USBD_HID_Mouse_SendReport function in the code that MX built as I would normally expect and am having extreme difficulty figuring out how to do it myself due to inexperience on my part.

My question is whether I have perhaps started too soon with C0 when the MX provision isn't complete? The STM32CubeC0 code was only released recently (I'm using vesion 1.4.0) and perhaps the absence of USBD_HID_Mouse_SendReport is also a bug.

For sure, the code doesn't work straight out of the blocks as the F0 code did so it seems it may be incomplete. I did ask the applications engineer but he hasn't replied.

Thanks for any insight.

 

    This topic has been closed for replies.

    1 reply

    Technical Moderator
    April 25, 2025

    Hi @pretoriandave 

    USBX is a middleware solution that abstracts USB operations, and it's a bit different from the standard USB library you might have used with the STM32F0 series. To send HID reports, you typically need to 

    VOID USBX_DEVICE_HID_MOUSE_Task(VOID)
    {
     UX_SLAVE_DEVICE *device;
     UX_SLAVE_CLASS_HID_EVENT hid_event;
    
     device = &_ux_system_slave->ux_system_slave_device;
     ux_utility_memory_set(&hid_event, 0, sizeof(UX_SLAVE_CLASS_HID_EVENT));
    
     /* Check if the device state already configured */
     if ((device->ux_slave_device_state == UX_DEVICE_CONFIGURED) && (hid_mouse != UX_NULL))
     {
     /* Check if user button is pressed */
     if (User_Button_State)
     {
     /* Get the new position */
     GetPointerData(&hid_event);
    
     /* Send an event to the hid */
     ux_device_class_hid_event_set(hid_mouse, &hid_event);
    
     /* Reset User Button state */
     User_Button_State = 0U;
     }
     }
    }