Skip to main content
Visitor II
November 25, 2025
Solved

No usb enumeration with UX_DEVICE_CLASS_CDC_ACM_TRANSMISSION_DISABLE option disabled

  • November 25, 2025
  • 1 reply
  • 231 views

 

Hello everyone,

I'm trying to get the USB CDC protocol working with USBX. The hardware is fine because DFU works, and I can flash the board through it. Following a tutorial, I was also able to implement a bare-metal USB CDC device, and everything enumerated correctly and printed data.

I uploaded the USB_CDC example for the STM32WBA65RIVx, and that also enumerated without issues.
(I removed the UART part because I don’t have it; I only tested sending “hello world”.)

Then I tried to integrate USB CDC into my own project, and I got stuck because I couldn't understand why the example works but my IOC configuration does not.

Eventually, I found that enumeration only works if the option UX_DEVICE_CLASS_CDC_ACM_TRANSMISSION_DISABLE is enabled.

When I disable that option, the PC cannot detect my board.
What could be the reason for this?

I increased:

  • usbx_system_stack_size to 32×1024

  • usbx_memory_pool_size to 32×1024

Another strange thing: this parameter must be set exactly like this, otherwise enumeration does not happen:

#define UX_SLAVE_REQUEST_DATA_MAX_LENGTH 512

Even if UX_DEVICE_CLASS_CDC_ACM_TRANSMISSION_DISABLE is enabled, increasing this value stops enumeration. I don’t understand why.

Minimum HEAP and STACK sizes are both set to 0x2000.

Any ideas or suggestions would be greatly appreciated.

I will attach some photos.

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

    Hi @SpaceExplorer 

    There are several configuration options for building USB Device CDC-ACM Class. All options are located in the ux_user.h.

    UX_DEVICE_CLASS_CDC_ACM_TRANSMISSION_DISABLE macro disables CDC ACM non-blocking transmission support. it is mentioned in readme notes

    • CDC ACM non-blocking transmission by default disabled, to enable non-blocking transmission UX_DEVICE_CLASS_CDC_ACM_TRANSMISSION_DISABLE must be disabled and 2048 additional in USBX byte pool and USBX_MEMORY_SIZE.

    1 reply

    FBLAnswer
    Technical Moderator
    November 26, 2025

    Hi @SpaceExplorer 

    There are several configuration options for building USB Device CDC-ACM Class. All options are located in the ux_user.h.

    UX_DEVICE_CLASS_CDC_ACM_TRANSMISSION_DISABLE macro disables CDC ACM non-blocking transmission support. it is mentioned in readme notes

    • CDC ACM non-blocking transmission by default disabled, to enable non-blocking transmission UX_DEVICE_CLASS_CDC_ACM_TRANSMISSION_DISABLE must be disabled and 2048 additional in USBX byte pool and USBX_MEMORY_SIZE.

    Visitor II
    November 26, 2025

    Hello, thank you for your response!

    I checked the example’s README again and found this section, but I wasn’t able to locate the corresponding settings in my ux_user.h.

    The option UX_DEVICE_CLASS_CDC_ACM_TRANSMISSION_DISABLE is present in the file.

    However, the part about “USBX byte pool” and “USBX_MEMORY_SIZE” is not present anywhere in ux_user.h.
    Unfortunately, I do not understand where these values are supposed to be changed.

    The only similar parameters I found are:

    usbx_system_stack_size = 32 × 1024

    usbx_memory_pool_size = 32 × 1024


    These are located in the CubeMX GUI, under USBX parameters, and I believe I have already increased them sufficiently.

    I have uploaded all my USBx parameters screenshot under my post, if you could check that too?

    Could you please specify more precisely what I need to change and where I should change it?

    Sorry if these questions seem basic — this is my first time working with such a complex system.

    Thank you!