装备那些就不说了,我这里是同步规矩采样,共4通道:
- /*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接连转移形式。留意点如下:
1、数组要界说为u32的,例如u32 buf[4],不要界说为u16 buf[8],通过测验,假如运用 u16 buf[8] 最终一个16bit buf[7]会为0,不知道为什么。
2、adc2有2种方法能够发动,一种是:
ADC_ExternalTrigConvCmd(ADC2,ENABLE); /*adc2¹æÔòͨµÀÍⲿ´¥· */
另一种是:
ADC_SoftwareStartConvCmd(ADC2,ENABLE);
这2种方法会带来一个不同的成果,细剖析如下:
如上所述转化序列,正常状况是buf32[0] & 0xFFFF与(buf32[3]>>0xFFFF)是同一组数据,拿buf16[8]来说便是buf16[0]、buf[7]是一组数据,可是改动adc2的触发方法有什么区别呢?
================运用buf16[8] +ADC_SoftwareStartConvCmd(ADC2,ENABLE);方法===============
此组合能够得到正确的数组对应方法,即dma搬来的数据与咱们预期的是对应的。可是buf16[7]=0
================运用buf16[8] +ADC_ExternalTrigConvCmd(ADC2,ENABLE);方法===============
此组合不能够得到正确的数组对应方法,即dma搬来的数据与咱们预期的是不对应的。并且buf16[7]=0
================运用buf32[4] +ADC_SoftwareStartConvCmd(ADC2,ENABLE);方法===============
此组合不能够得到正确的数组对应方法,即dma搬来的数据与咱们预期的是不对应的。
================运用buf32[4] +ADC_ExternalTrigConvCmd(ADC2,ENABLE);方法===============
此组合能够得到正确的数组对应方法,即dma搬来的数据与咱们预期的是对应的。
好,这便是我的调试心得,我们防止留意下就好了。
这里有一个单ADC同步规矩+同步注入的比如:http://www.csdn123.com/html/itweb/20130801/33722_33714_33696.htm。
形似单个ADC好用,两个的同步注入有问题????
===========持续弥补20160419================
之前的注入通道数据有问题,把他的采样率该慢点就能够了,视自己状况而定,渐渐调试吧!