stm32 雙adc 采集問(wèn)題 dma數據有一個(gè)沒(méi)有 adc2為0

- /*RegularChannelÉèÖòɼ¯Ë³ÐòºÍʱ¼ä.ÉèÖóÉË«adcºó,dmaÓÃ32bit´«Êä,µÍ16bitÊÇadc1ͨµÀ,¸ß16bitÊÇadc2ͨµÀ*/
- ADC_RegularChannelConfig(ADC1,CH0_ADL1,1,ADC_SampleTime_13Cycles5);//0
- ADC_RegularChannelConfig(ADC1,CH1_ADL2,2,ADC_SampleTime_13Cycles5);//2
- ADC_RegularChannelConfig(ADC1,CH8_ADR1,3,ADC_SampleTime_13Cycles5);//4
- ADC_RegularChannelConfig(ADC1,CH9_ADR2,4,ADC_SampleTime_13Cycles5);//6
- /*RegularChannel*/
- ADC_RegularChannelConfig(ADC2,CH9_ADR2,1,ADC_SampleTime_13Cycles5);//1
- ADC_RegularChannelConfig(ADC2,CH8_ADR1,2,ADC_SampleTime_13Cycles5);//3
- ADC_RegularChannelConfig(ADC2,CH1_ADL2,3,ADC_SampleTime_13Cycles5);//5
- ADC_RegularChannelConfig(ADC2,CH0_ADL1,4,ADC_SampleTime_13Cycles5);//7
使用的是ac連續采樣,dma連續搬運模式。注意點(diǎn)如下:
1、數組要定義為u32的,例如u32 buf[4],不要定義為u16 buf[8],經(jīng)過(guò)測試,如果使用 u16 buf[8] 最后一個(gè)16bit buf[7]會(huì )為0,不知道為什么。
2、adc2有2種方式可以啟動(dòng),一種是:
ADC_ExternalTrigConvCmd(ADC2,ENABLE); /*adc2¹æÔòͨµÀÍⲿ´¥· */
另一種是:
ADC_SoftwareStartConvCmd(ADC2,ENABLE);
這2種方法會(huì )帶來(lái)一個(gè)不同的結果,細分析如下:
如上所述轉換序列,正常情況是buf32[0] & 0xFFFF與(buf32[3]>>0xFFFF)是同一組數據,拿buf16[8]來(lái)說(shuō)就是buf16[0]、buf[7]是一組數據,可是改變adc2的觸發(fā)方式有什么區別呢?
================使用buf16[8] +ADC_SoftwareStartConvCmd(ADC2,ENABLE);方式===============
此組合可以得到正確的數組對應方式,即dma搬來(lái)的數據與我們預期的是對應的。但是buf16[7]=0
================使用buf16[8] +ADC_ExternalTrigConvCmd(ADC2,ENABLE);方式===============
此組合不可以得到正確的數組對應方式,即dma搬來(lái)的數據與我們預期的是不對應的。而且buf16[7]=0
================使用buf32[4] +ADC_SoftwareStartConvCmd(ADC2,ENABLE);方式===============
此組合不可以得到正確的數組對應方式,即dma搬來(lái)的數據與我們預期的是不對應的。
================使用buf32[4] +ADC_ExternalTrigConvCmd(ADC2,ENABLE);方式===============
此組合可以得到正確的數組對應方式,即dma搬來(lái)的數據與我們預期的是對應的。
好,這就是我的調試心得,大家避免注意下就好了。
這里有一個(gè)單ADC同步規則+同步注入的例子:http://www.csdn123.com/html/itweb/20130801/33722_33714_33696.htm。
貌似單個(gè)ADC好用,兩個(gè)的同步注入有問(wèn)題????
===========繼續補充20160419================
之前的注入通道數據有問(wèn)題,把他的采樣率該慢點(diǎn)就可以了,視自己情況而定,慢慢調試吧!
評論