Is There Any Working UAC2.0 Example for STM32H7?
I’m trying to build a UAC2.0 (USB Audio Class 2.0) device on STM32H7, supporting:
- High-Speed USB
- 24-bit audio
- Playback + Recording
- Full-duplex, stable, low-latency operation
After reviewing many threads here, I still haven’t found a complete or working reference.
Previous Threads Don’t Answer the Core Question
Here are some related ST Community posts with no clear resolution:
- Using STM32H7 SAI Slave Mode for USB Audio (UAC2.0) with DSD Format - no reply
- Getting TinyUSB UAC2.0 Multi-Channel Audio Working on STM32H7S78-DK High-Speed Port - TinyUSB marked as unsupported, redirected to X-CUBE-AUDIO
- X-CUBE-AUDIO: USB audio high speed not work with iOS - still unresolved.
- USB Audio Device/Host Class 2.0 Middleware support? - response was to use X-CUBE-AUDIO or USBX
Across all of these, the same question remains unanswered:
Is there a working UAC2.0 reference for STM32H7?
What I Have Tried (and Why I’m Stuck)
1. X-CUBE-AUDIO-KIT
Not to be confused with X-CUBE-AUDIO (last updated 2019). Reference: X-CUBE-AUDIO-KIT
The audio kit focuses heavily on LiveTune and doesn’t explain the folder structure or how to adapt it for UAC2.0 device work. Most forum replies simply say "look at X-CUBE-AUDIO," but there is no clear documentation on how to integrate it into an actual USB audio project.
2. USBX Examples (Azure RTOS)
I looked into:
Both use UAC2.0, but neither is fully functional. There are several issues (audio distortion, buffering, pointer handling, feedback endpoint logic, etc.) that prevent reliable playback, let alone adding recording.
I also evaluated STM32WBA-BLE-USBx Standalone, but porting it to H7 requires major rewrites and may not be compatible with the existing H7 USB stack.
3. Legacy H7 USBD Audio (UAC1.0)
I considered starting from the H7 USBD Audio Standalone UAC1.0 example and updating it manually to UAC2.0, bypassing USBX entirely, but I’m unsure whether this is practical or recommended.
Moving forward...
I’m currently unable to move forward with actual development because I’m spending all my time debugging:
-
ring-buffer logic bugs
-
incorrect pointer handling
-
missing wrap-around
-
feedback endpoint issues
-
unexplained artifacts (e.g., a loud screech at 4–5 seconds)
Before I continue down another rabbit hole, I need a clear answer:
What is the correct, supported path to get UAC2.0 working on STM32H7?
Any guidance from ST experts would be greatly appreciated. @FBL @JonathanC
