2026-05-13 10:51 PM - last edited on 2026-05-14 3:29 AM by mƎALLEm
I am experiencing an issue with ADC3 multi-channel scan mode on a custom STM32H745 board (LDO power supply). The same code works perfectly on the Nucleo-H745ZI reference board (SMPS power supply), but fails on my custom design.
Problem Summary:
Expected Behavior: All 6 ADC channels should update continuously via DMA circular buffer.
Actual Behavior:
adcValues[0] = 2604660662 // PF6 (IN8) - CHANGING ✓
adcValues[1] = 1343977801 // PF7 (IN3) - CHANGING ✓
adcValues[2] = 4294918112 // PF8 (IN7) - CHANGING ✓
adcValues[3] = 0 // PF9 (IN2) - STUCK ✗
adcValues[4] = 0 // PF10 (IN6) - STUCK ✗
adcValues[5] = 0 // PC0 (IN10) - STUCK ✗
HARDWARE CONFIGURATION
MCU: STM32H745ZIT6 (Dual-core, Cortex-M7 + M4) Custom Board Power: Internal LDO (PWR_LDO_SUPPLY) Reference Board: Nucleo-H745ZI (SMPS supply) — works fine
Clock Configuration:
PF6 → ADC3_INP8
PF7 → ADC3_INP3
PF8 → ADC3_INP7
PF9 → ADC3_INP2 stops here
PF10 → ADC3_INP6 no data
PC0 → ADC3_INP10 no data
ADC3 Power Supply:
SOFTWARE CONFIGURATION
CubeMX Generated ADC3 Init:
hadc3.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
hadc3.Init.Resolution = ADC_RESOLUTION_16B;
hadc3.Init.ScanConvMode = ADC_SCAN_ENABLE;
hadc3.Init.EOCSelection = ADC_EOC_SEQ_CONV; // EOC at end of sequence
hadc3.Init.ContinuousConvMode = ENABLE; // continuous mode ON
hadc3.Init.NbrOfConversion = 6;
hadc3.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DMA_CIRCULAR;
hadc3.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;DMA: DMA1 Stream 0
Direction: Peripheral to Memory
Mode: Circular
Data Alignment: Half Word, Half Word
Buffer: volatile uint32_t adcValues[6];volatile uint32_t adcValues[6];
int main(void) {
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_ADC3_Init();
HAL_ADCEx_Calibration_Start(&hadc3, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED);
HAL_ADC_Start_DMA(&hadc3, (uint32_t *)adcValues, 6);
while(1) {
// read adcValues[0..5]
HAL_Delay(100);
}
}
What I need help with:
2026-05-14 3:41 AM
Hello @DRIFTYY777
Please refer to the example below: