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); 不要搞混了

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
lycreturn
1楼-- · 2019-07-20 20:28
谢谢分享!
爱奔跑的IT
2楼-- · 2019-07-20 21:13
你好,请教一个问题。我使用双定时器进行PWM DAC输出两路模拟电压,但是只能正常输出一路电压,另外一路不能输出,TIM9输出正常,另外一路TIM12或者TIM14试了都不能输出,可以给点建议吗?感激不尽

一周热门 更多>