stm32 双adc 采集问题 dma数据有一个没有 adc2为0

blog.youkuaiyun.com/lanmanck原创

配置那些就不说了,我这里是同步规则采样,共4通道:

/* Regular ChannelÉèÖòɼ¯Ë³ÐòºÍʱ¼ä.ÉèÖóÉË«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


    /* Regular Channel */
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================

之前的注入通道数据有问题,把他的采样率该慢点就可以了,视自己情况而定,慢慢调试吧!


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值