使用DMA获取多路ADC多路转换结果的过程中出现结果顺序错乱的问题。代码如下
void Adc_Init()
{
//先初始化IO口
RCC->APB2ENR |= 1<<4; //使能PORTC口时钟
GPIOC->CRL &= 0xFFFF000F;//PC1,PC2设置为模拟输入工作模式
RCC->APB2ENR |= 1<<9; //ADC1时钟使能
RCC->APB2RSTR |= 1<<9; //ADC1复位
RCC->APB2RSTR &= ~(1<<9);//复位结束
RCC->CFGR &= ~(3<<14); //分频因子清零
RCC->CFGR |= 2<<14; //分频因子设置,对应为6分频
//PCLK2/DIV6=12M ADC时钟设置为12M,ADC最大时钟不能超过14M!否则将导致ADC准确度下降!
ADC1->CR1 &= 0xF0FFFF; //工作模式清零,
ADC1->CR1 |= 0<<16; //独立工作模式
ADC1->CR1 |= 1<<8; //扫描模式
ADC1->CR2 |= 1<<1; //连续转换模式
ADC1->CR2 |= 1<<8; //启用DMA模式
ADC1->CR2 &= ~(7<<17); //清除外部事件触发
ADC1->CR2 |= 7<<17; //使用软件控制转换
ADC1->CR2 |= 1<<20; //使用用外部触发(SWSTART)!!!必须使用一