一个简单的问题 解决了两天
总结来说是因为adc分为三个独立的adc :adc1,adc2,adc3,
但是有四个寄存器 adc1,adc2,adc3,adc公用 adc_c。
ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent; //独立模式
ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; //两个采样阶段之间的延迟5个时钟
ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; //关闭DMA
ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4; //预分频4分频。ADCCLK=PCLK2/4=84/4=21Mhz,ADC时钟最好不要超过36Mhz
ADC_CommonInit(&ADC_CommonInitStructure); //初始化
当两路或者两路以上的adc同时使用时,
只是把adc设置成独立模式是不够的,
还需要关闭adc公用里面的dma,
因为如果开着这个寄存器的话,
dma会响应所有的adc请求,
而不会分清是adc1,还是adc2,从而出现混乱。
但是只是用一个adc通道时,不会出现此问题,这就是我关了adc1,或者adc2时,剩下的通道都可以完美工作的原因,让我找了两天
而开单独adc通道的dma是这条语句 ADC_DMACmd(ADC2, ENABLE); 不要搞混了 |