STM32U545 ADC Non-linear Problem
- July 27, 2026
- 13 replies
- 200 views
Hi ST,
I found a problem of fixed-range local ADC non-linearity from 170mV to 480mV on STM32U545 after full hardware linear calibration.
1. Test Environment
HW: NUCLEO-U545RE-Q board (MB1841D),
Firmware package: STM32CubeU5 FW V1.8.0.
Test instruments: Precision DC power supply, function signal generator, digital oscilloscope (used to verify the actual voltage at ADC input pins).
Working Mode: Button→ LPTimer→ ADC→ DMA→ UART
MX: See attachment
Main code: See attachment
2. Two types of input tests (static DC + dynamic triangle wave, identical distortion observed)
(1) Static DC step voltage test
We applied stepped DC voltage from 81mV to 850mV via precision power supply and resistor voltage divider. The real voltage on ADC1 input pins was measured and recorded with an oscilloscope for every step, ruling out inaccuracies from signal sources or resistor division. Test results: ADC1 conversion curve is perfectly linear below 170mV and above 480mV. A consistent concave distortion only exists within 170mV ~ 480mV. This error occurs on both ADC1 and ADC4 (maybe not same error range in ADC4), under single-ended and differential input modes.

(2) Dynamic triangle wave test
Slow triangle wave generated by function generator was fed into ADC for continuous sampling. In ADC1, The same concave distortion appears whenever the waveform sweeps across 170mV~480mV. The shape and position of non-linearity are exactly the same as DC measurement results. This confirms the error originates from the ADC internal core itself, not input signal dynamic characteristics. for ADC4, there is still a non-linear with different shape.


3. Interference factors all verified and excluded
- I used HAL_ADCEx_Calibration_Start(&hADC, ADC_CALIB_OFFSET_LINEARITY, ADC_SINGLE_ENDED); to calibrate, but with no effect.
- ADC sampling time was adjusted from 5 cycles up to 36 cycles; no change to the non-linear curve.
- We tested with only ADC1 enabled (ADC4 clock and peripherals fully disabled), so crosstalk between two ADC modules is not the root cause.
- Control test on STM32H750 with identical circuit and ADC configuration, delivers excellent linearity across the full 0~3.3V range without such local distortion.
