打印
[STM8]

STM8L致命问题!DMA读取ADC多通道,通道之间互相影响!

[复制链接]
9588|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fyh123|  楼主 | 2011-5-16 00:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
测试过程:AD同时连接了2个通道(ADC_Channel_0+ADC_Channel_Vrefint),分别测量CH0输入和内部Vref。开启DMA,使AD工作模式为ADC_ConversionMode_Continuous,则ADC_SoftwareStartConv后,自动循环依次读取这2个通道。
现象:输入CH0的值变化时,ADC_Channel_Vrefint的值也随之同方向变化---变化很大。
猜想:AD工作在Continuous模式下,内部模拟开关自动循环切换测量不同通道,通道切换后没有延时等待稳定就开始转换?导致读取各通道之间互相影响。---DMA读取AD,通道切换是自动完成,无法控制切换通道后的延时!不知道这个猜想是否正确,如果这样那有什么解决方案?
沙发
fyh123|  楼主 | 2011-5-16 00:45 | 只看该作者
////////////////////////////////////////////////////////////////
///////DMA//////////////////////////////////////////////
  /* Enable DMA1 clock */
  CLK_PeripheralClockConfig(CLK_Peripheral_DMA1, ENABLE);
  /* Connect ADC to DMA channel 0 */
  SYSCFG_REMAPDMAChannelConfig(REMAP_DMA1Channel_ADC1ToChannel0);
  DMA_Init(DMA1_Channel0, BUFFER_ADDRESS,
           ADC1_DR_ADDRESS,
           BUFFER_SIZE,
           DMA_DIR_PeripheralToMemory,
           DMA_Mode_Circular,
           DMA_MemoryIncMode_Inc,
           DMA_Priority_High,
           DMA_MemoryDataSize_HalfWord);
  /* DMA Channel0 enable */
  DMA_Cmd(DMA1_Channel0, ENABLE);
  /* Enable DMA1 channel0 Transfer complete interrupt */
  DMA_ITConfig(DMA1_Channel0, DMA_ITx_TC, ENABLE);
  /* DMA enable */
  DMA_GlobalCmd(ENABLE);

////////////////////////////////////////////////////////////////
///////ADC//////////////////////////////////////////////  
  /* Enable ADC1 clock */
  CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE);
  /* Initialize and configure ADC1 */
  //工作在In continuous conversion mode, the ADC starts another conversion as soon as it finishes one
  ADC_Init(ADC1, ADC_ConversionMode_Continuous, ADC_Resolution_12Bit, ADC_Prescaler_2);
  ADC_SamplingTimeConfig(ADC1, ADC_Group_SlowChannels, ADC_SamplingTime_384Cycles);
  ADC_SamplingTimeConfig(ADC1, ADC_Group_FastChannels, ADC_SamplingTime_384Cycles);
  /* Enable ADC1 */
  ADC_Cmd(ADC1, ENABLE);
  /* Enable ADC1 Channels 4 */
  ADC_ChannelCmd(ADC1, ADC_Channel_4, ENABLE); /* connected to Potentiometer RV */   
  ADC_ChannelCmd(ADC1, ADC_Channel_Vrefint, ENABLE);//测基准电压
  /* Enable ADC1 DMA requests*/
  ADC_DMACmd(ADC1, ENABLE);
  /* Start ADC1 Conversion using TIM1 TRGO*/
  ADC_SoftwareStartConv(ADC1);

使用特权

评论回复
板凳
fyh123|  楼主 | 2011-5-16 12:42 | 只看该作者
别沉了啊,高人们给指点下啊

使用特权

评论回复
地板
fyh123|  楼主 | 2011-5-19 08:44 | 只看该作者
香主,能看看这个问题吗

使用特权

评论回复
5
fyh123|  楼主 | 2011-5-19 09:29 | 只看该作者
解决了...真想说个艹

使用特权

评论回复
6
zhangchn| | 2011-5-20 06:55 | 只看该作者
怎么解决的?能分享一下吗

使用特权

评论回复
7
ycxydhl| | 2011-5-20 07:02 | 只看该作者
谢谢版主

使用特权

评论回复
8
IJK| | 2011-5-20 09:46 | 只看该作者
我猜问题多半在于LZ的代码

使用特权

评论回复
9
shexujia| | 2011-5-22 19:49 | 只看该作者
答案是什么呢  在用32的时候  俺也有这问题

使用特权

评论回复
10
lee1030| | 2013-7-18 16:24 | 只看该作者
亲爱的楼至,你是怎么决绝的,求教育啊

使用特权

评论回复
11
zeluo| | 2013-7-18 19:14 | 只看该作者
有可能是相互冲突   完全有可能  不知道楼主  是怎么解决的   帮你顶一个

使用特权

评论回复
12
y1柯小草| | 2017-4-24 16:37 | 只看该作者
楼主,我也遇到相同的问题,想请教一下您~给分享一下呗~

使用特权

评论回复
13
七颗咖啡豆| | 2017-5-13 17:22 | 只看该作者
都这样问题解决了,就不说了

使用特权

评论回复
14
OO1253414972| | 2019-4-3 15:08 | 只看该作者
想请问楼主是怎么解决这个问题的。

使用特权

评论回复
15
Sunriver_Yao| | 2019-4-26 16:12 | 只看该作者
除了采样时间,还有什么?

使用特权

评论回复
16
llsshh| | 2020-4-7 15:57 | 只看该作者

使用特权

评论回复
17
llsshh| | 2020-4-7 15:58 | 只看该作者

使用特权

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

本版积分规则

0

主题

6

帖子

2

粉丝