the DMA automatically interleaves the ADC values.
It will fill (as a circular buffer if configured that way ) the array you pass as an argument, no matter the length untill you stop it.
uint32_t ADCReadings[1024];
//DMA will take hadc1 readings(interleaving channels) and store them inside ADCReadings array, the circular buffer created has legth 1024
HAL_ADC_Start_DMA(&hadc1, (uint32_t*) ADCReadings, 1024);
DMA will fill ADCReadings as follows: (if 4 channels from adc are activated)
- ADCReadings[0]= value from 1st channel
- ADCReadings[1]= value from 2nd channel
- ADCReadings[2]= value from 3rd channel
- ADCReadings[3]= value from 4rd channel
- ADCReadings[4]= value from 1st channel
- ADCReadings[5]= value from 2nd channel
- ADCReadings[6]= value from 3rd channel
- ADCReadings[7]= value from 4rd channel
.............
1024.ADCReadings[1023]= value from 4rd channel