与单通道采集,主要区别就是设置转换通道个数、开启扫描模式、每个ADC通道和相应的GPIO都要进行配置
cpp
void adc_dma_init(uint32_t DstAddress)
{
ADC_ChannelConfTypeDef adc_channel_config_struct;
dma_for_adc_init();
g_adc_handle_struct.Instance = ADC1; /*是指ADC模块基地址为ADC1*/
g_adc_handle_struct.Init.DataAlign = ADC_DATAALIGN_RIGHT; /*选择数据右对齐*/
g_adc_handle_struct.Init.ScanConvMode = ADC_SCAN_ENABLE; /*开启扫描模式*/
g_adc_handle_struct.Init.ContinuousConvMode = ENABLE; /*开启连续模式*/
g_adc_handle_struct.Init.NbrOfConversion = 6; /*设置转换通道的数目为1*/
g_adc_handle_struct.Init.DiscontinuousConvMode = DISABLE; /*不开启间断模式*/
g_adc_handle_struct.Init.NbrOfDiscConversion = 0; /*配置间断模式的规则通道数目为0*/
g_adc_handle_struct.Init.ExternalTrigConv = ADC_SOFTWARE_START; /*选择软件触发转换*/
HAL_ADC_Init(&g_adc_handle_struct); /*初始化ADC*/
HAL_ADCEx_Calibration_Start(&g_adc_handle_struct); /*校准ADC*/
adc_channel_config_struct.Channel = ADC_CHANNEL_0; /*设置ADC通道为通道0*/
adc_channel_config_struct.Rank = ADC_REGULAR_RANK_1; /*设置为第一个转换顺序*/
adc_channel_config_struct.SamplingTime = ADC_SAMPLETIME_239CYCLES_5; /*设置采样周期为239.5个ADC时钟周期*/
HAL_ADC_ConfigChannel(&g_adc_handle_struct,&adc_channel_config_struct); /*配置ADC通道*/
adc_channel_config_struct.Channel = ADC_CHANNEL_1; /*设置ADC通道为通道1*/
adc_channel_config_struct.Rank = ADC_REGULAR_RANK_2; /*设置为第二个转换顺序*/
adc_channel_config_struct.SamplingTime = ADC_SAMPLETIME_239CYCLES_5; /*设置采样周期为239.5个ADC时钟周期*/
HAL_ADC_ConfigChannel(&g_adc_handle_struct,&adc_channel_config_struct); /*配置ADC通道*/
adc_channel_config_struct.Channel = ADC_CHANNEL_2; /*设置ADC通道为通道2*/
adc_channel_config_struct.Rank = ADC_REGULAR_RANK_3; /*设置为第三个转换顺序*/
adc_channel_config_struct.SamplingTime = ADC_SAMPLETIME_239CYCLES_5; /*设置采样周期为239.5个ADC时钟周期*/
HAL_ADC_ConfigChannel(&g_adc_handle_struct,&adc_channel_config_struct); /*配置ADC通道*/
adc_channel_config_struct.Channel = ADC_CHANNEL_3; /*设置ADC通道为通道3*/
adc_channel_config_struct.Rank = ADC_REGULAR_RANK_4; /*设置为第四个转换顺序*/
adc_channel_config_struct.SamplingTime = ADC_SAMPLETIME_239CYCLES_5; /*设置采样周期为239.5个ADC时钟周期*/
HAL_ADC_ConfigChannel(&g_adc_handle_struct,&adc_channel_config_struct); /*配置ADC通道*/
adc_channel_config_struct.Channel = ADC_CHANNEL_4; /*设置ADC通道为通道4*/
adc_channel_config_struct.Rank = ADC_REGULAR_RANK_5; /*设置为第五个转换顺序*/
adc_channel_config_struct.SamplingTime = ADC_SAMPLETIME_239CYCLES_5; /*设置采样周期为239.5个ADC时钟周期*/
HAL_ADC_ConfigChannel(&g_adc_handle_struct,&adc_channel_config_struct); /*配置ADC通道*/
adc_channel_config_struct.Channel = ADC_CHANNEL_5; /*设置ADC通道为通道5*/
adc_channel_config_struct.Rank = ADC_REGULAR_RANK_6; /*设置为第六个转换顺序*/
adc_channel_config_struct.SamplingTime = ADC_SAMPLETIME_239CYCLES_5; /*设置采样周期为239.5个ADC时钟周期*/
HAL_ADC_ConfigChannel(&g_adc_handle_struct,&adc_channel_config_struct); /*配置ADC通道*/
HAL_NVIC_SetPriority(DMA1_Channel1_IRQn,2,2);
HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
HAL_DMA_Start_IT(&g_dma_handle_for_adc_struct,(uint32_t)&ADC1->DR,DstAddress,0);
HAL_ADC_Start_DMA(&g_adc_handle_struct,&DstAddress,0);
}