打印

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

[复制链接]
229|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
稻花香1号|  楼主 | 2018-7-27 08:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一个简单的问题  解决了两天

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

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

381

主题

382

帖子

1

粉丝