stm32f407 双定时器 触发adc1 adc2 dma读取数据 遇到的问题

2019-07-20 16:24发布

一个简单的问题  解决了两天

总结来说是因为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); 不要搞混了

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。