ADC stuck at constant code for while ISR shows no error — looking for root cause hints
Setup
- MCU: STM32U595VITxQ (Cortex-M33)
- ADC: ADC4, 57Mhz,12-bit, 7 channels, 6400 Hz sample rate, triggered by TIM1
- Data path: GPDMA1 in linked-list circular mode, double-buffered with half/complete callbacks (128 samples per half-buffer). DMA writes directly into a static INT16U s_adc4_result[256][7] buffer in normal SRAM.
- Signal chain: external current/voltage sensors → signal conditioning board (op-amps, anti-alias filter, DC bias) → ADC4 input pins
- Firmware: FreeRTOS, half-callback copies 128 samples per channel into a ring buffer (PF_TOTAL_WAVE_NUM = 40 slots × 128 samples), pf_task consumes from queue
Symptom
Most of time, everything works fine. But some times something wrong happened,in a log file we captured, channels simultaneously read byte-identical constant values.
Questions:
1. Has anyone seen an STM32U5 ADC report "healthy" (no OVR, no error, ADSTART set) while consistently delivering a constant code per channel? Are there silicon errata I should check?
2. Are there known ADC4 / GPDMA1 quirks on STM32U595 (linked-list circular mode, TIM-triggered regular conversions) that could produce a "freeze the last good sample and keep DMA-cycling it" behavior?
3. Could a VREF+/VDDA glitch cause the ADC to digitize a fixed code without setting any error flag? c
4. Any other diagnostic register / signal I should capture next time it happens to definitively separate "ADC digitizing a clamped analog input" from "ADC/DMA digital block misbehaving"? I can add logging on the next firmware build.

