STM32 + ADC Dual regular simultaneous mode and DMA : need to call HAL_DMA_Init
Hello,
i want to use 3 ADC :
-ADC1 et ADC2 in Dual regular simultaneous mode + trigger on timer +DMA
-ADC3 on its own in continuous mode + DMA.
According to reference manuel,for DMA :
-ADC1 can use channel0 + stream0
-ADC2 can use channel1 + stream2
-ADC3 can use channel2 + stream1
Is it mandatory to program explicitely the DMA ? (cubemx doesn't call HAL_DMA_Init function)
Do i need to do the following initialization :
g_DmaHandleADC1.Instance = DMA2_Stream0;
g_DmaHandleADC1.Init.Channel = DMA_CHANNEL_0;
g_DmaHandleADC1.Init.Direction = DMA_PERIPH_TO_MEMORY;
g_DmaHandleADC1.Init.PeriphInc = DMA_PINC_DISABLE;
g_DmaHandleADC1.Init.MemInc = DMA_MINC_ENABLE;
g_DmaHandleADC1.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
g_DmaHandleADC1.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
g_DmaHandleADC1.Init.Mode = DMA_NORMAL; //DMA_CIRCULAR;
g_DmaHandleADC1.Init.Priority = DMA_PRIORITY_HIGH;
g_DmaHandleADC1.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
g_DmaHandleADC1.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_HALFFULL;
g_DmaHandleADC1.Init.MemBurst = DMA_MBURST_SINGLE;
g_DmaHandleADC1.Init.PeriphBurst = DMA_PBURST_SINGLE;
HAL_DMA_Init(&g_DmaHandleADC1);
__HAL_LINKDMA(&hadc1, DMA_Handle, g_DmaHandleADC1);
g_DmaHandleADC2.Instance = DMA2_Stream0;
g_DmaHandleADC2.Init.Channel = DMA_CHANNEL_2;
g_DmaHandleADC2.Init.Direction = DMA_PERIPH_TO_MEMORY;
g_DmaHandleADC2.Init.PeriphInc = DMA_PINC_DISABLE;
g_DmaHandleADC2.Init.MemInc = DMA_MINC_ENABLE;
g_DmaHandleADC2.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
g_DmaHandleADC2.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
g_DmaHandleADC2.Init.Mode =DMA_NORMAL; //DMA_CIRCULAR;
g_DmaHandleADC2.Init.Priority = DMA_PRIORITY_HIGH;
g_DmaHandleADC2.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
g_DmaHandleADC2.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_HALFFULL;
g_DmaHandleADC2.Init.MemBurst = DMA_MBURST_SINGLE;
g_DmaHandleADC2.Init.PeriphBurst = DMA_PBURST_SINGLE;
HAL_DMA_Init(&g_DmaHandleADC2);
__HAL_LINKDMA(&hadc2, DMA_Handle, g_DmaHandleADC2);
g_DmaHandleADC3.Instance = DMA2_Stream0;
g_DmaHandleADC3.Init.Channel = DMA_CHANNEL_1;
g_DmaHandleADC3.Init.Direction = DMA_PERIPH_TO_MEMORY;
g_DmaHandleADC3.Init.PeriphInc = DMA_PINC_DISABLE;
g_DmaHandleADC3.Init.MemInc = DMA_MINC_ENABLE;
g_DmaHandleADC3.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
g_DmaHandleADC3.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
g_DmaHandleADC3.Init.Mode = DMA_NORMAL; //DMA_CIRCULAR;
g_DmaHandleADC3.Init.Priority = DMA_PRIORITY_HIGH;
g_DmaHandleADC3.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
g_DmaHandleADC3.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_HALFFULL;
g_DmaHandleADC3.Init.MemBurst = DMA_MBURST_SINGLE;
g_DmaHandleADC3.Init.PeriphBurst = DMA_PBURST_SINGLE;
HAL_DMA_Init(&g_DmaHandleADC3);
__HAL_LINKDMA(&hadc3, DMA_Handle, g_DmaHandleADC3);
best regards
thanks