STM32G431 ADC2 DMA causes MCU to hang while ADC1 DMA works fine
- March 27, 2026
- 3 replies
- 498 views
Hello everyone,
I am currently working with the STM32G431CBT6 and designing a custom ESC using the DRV8301 gate driver. My application requires a total of 9 ADC channels:
-
ADC1 → 4 channels
-
ADC2 → 5 channels
I configured both ADCs in independent mode with DMA (circular) using STM32CubeMX.

Issue Description
When I start ADC with DMA using the following function:
void ADC_Start_System(void)
{
// 1. Calibration
HAL_ADCEx_Calibration_Start(&hadc1, ADC_SINGLE_ENDED);
HAL_ADCEx_Calibration_Start(&hadc2, ADC_SINGLE_ENDED);
HAL_Delay(10);
// 2. Start ADC1
if (HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc1_buffer, 4) != HAL_OK)
Error_Handler();
// 3. Start ADC2
if (HAL_ADC_Start_DMA(&hadc2, (uint32_t*)adc2_buffer, 5) != HAL_OK)
Error_Handler();
}
Observed Behavior
-
ADC1 + DMA works perfectly
-
MCU gets stuck when calling:
HAL_ADC_Start_DMA(&hadc2, (uint32_t*)adc2_buffer, 5);
- No error returned, but CPU halts inside HAL (likely waiting on a flag)
What I Have Verified
-
Calibration is performed before start
-
DMA is configured in circular mode
-
NVIC interrupts for DMA channels are enabled
-
Separate DMA channels used for ADC1 and ADC2
-
Buffers are correctly sized:
uint16_t adc1_buffer[4]; uint16_t adc2_buffer[5]; - Polling mode works fine for ADC2
-
ADC mode is independent (not dual mode)
Additional Notes
-
MCU: STM32G431CBT6
-
Toolchain: STM32CubeMX + HAL
-
Application: ESC (motor control)
-
No external trigger (software start used)
-
Continuous conversion mode enabled
Question
Why does HAL_ADC_Start_DMA() work for ADC1 but cause the MCU to hang for ADC2?
Is there any known limitation or special requirement for using ADC2 with DMA on STM32G4 (especially when ADC1 is already running with DMA)?
Any help or guidance would be greatly appreciated.
Thanks in advance!
