Hello,
I am evaluating the STM32U585 on the Arduino UNO Q for a I/Q acquisition application. I need to acquire two analog signals, I and Q, during an autonomous PLL frequency ramp.
The required acquisition is:
- ADC1 on one analog pin and ADC4 on a different analog pin;
- both ADCs triggered by the same timer event;
- one GPDMA channel per ADC;
- 512 or 1024 samples per ADC;
- target sampling rates of 1.0, 1.8 and ideally 2.5 MS/s;
- samples stored as two 16-bit buffers, for a total of 2048 or 4096 bytes;
- no CPU processing is required while the capture is running.
From the STM32U585 pinctrl definitions, the UNO Q analog pins are physically connected to both ADC instances. For example, PA4/A0 can be ADC1_IN9 or ADC4_IN9, and PA5/A1 can be ADC1_IN10 or ADC4_IN10. I would use different pins, for example A0 for ADC1 and A1 for ADC4.
In the current ArduinoCore-zephyr UNO Q variant I found that:
- only
adc1is enabled in the board overlay; - A0-A5 are currently assigned to ADC1;
CONFIG_DMA=yis enabled;CONFIG_ADC_STM32_DMAis not enabled;IQRead()performs a blocking one-sampleadc_read();- the Arduino sketch is loaded as an LLEXT into a precompiled Zephyr loader.
I therefore assume that this cannot be implemented by a normal sketch using analogRead(), but should be possible with a custom UNO Q loader.
My questions are:
- Is rebuilding the UNO Q loader the supported way to enable ADC4,
CONFIG_ADC_STM32_DMA, two DMA channels and a timer-triggered capture? - Are TIM1, ADC4 or specific GPDMA channels already reserved by the UNO Q loader, RouterBridge or another board service?
- Can a function implemented in the custom loader, such as
IQCapture(bufferI, bufferQ, 1024, sampleRate), be exported to and called safely from an Arduino LLEXT sketch? - Is there an existing UNO Q branch, example or experimental implementation using ADC DMA or more than one ADC instance?
- Is there a recommended procedure to install and recover a custom loader while keeping the standard Linux/MCU Bridge functions?
I found an earlier discussion where approximately 2 MS/s was requested but polling remained limited to about 160 kS/s: UNO Q: ADC sampling rates > 1MHz
Relevant core files:
- UNO Q overlay: ArduinoCore-zephyr/variants/arduino_uno_q_stm32u585xx/arduino_uno_q_stm32u585xx.overlay at main · arduino/ArduinoCore-zephyr · GitHub
- UNO Q Kconfig: ArduinoCore-zephyr/variants/arduino_uno_q_stm32u585xx/arduino_uno_q_stm32u585xx.conf at main · arduino/ArduinoCore-zephyr · GitHub
analogRead()implementation: ArduinoCore-zephyr/cores/arduino/wiring_analog.cpp at main · arduino/ArduinoCore-zephyr · GitHub
Has anyone already tested ADC1 or ADC4 with DMA on a real UNO Q?

