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

[复制链接]
11179|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 | 显示全部楼层
香主,能看看这个问题吗
 楼主| fyh123 发表于 2011-5-19 09:29 | 显示全部楼层
解决了...真想说个艹
zhangchn 发表于 2011-5-20 06:55 | 显示全部楼层
怎么解决的?能分享一下吗
ycxydhl 发表于 2011-5-20 07:02 | 显示全部楼层
谢谢版主
IJK 发表于 2011-5-20 09:46 | 显示全部楼层
我猜问题多半在于LZ的代码
shexujia 发表于 2011-5-22 19:49 | 显示全部楼层
答案是什么呢  在用32的时候  俺也有这问题
lee1030 发表于 2013-7-18 16:24 | 显示全部楼层
亲爱的楼至,你是怎么决绝的,求教育啊
zeluo 发表于 2013-7-18 19:14 | 显示全部楼层
有可能是相互冲突   完全有可能  不知道楼主  是怎么解决的   帮你顶一个
y1柯小草 发表于 2017-4-24 16:37 | 显示全部楼层
楼主,我也遇到相同的问题,想请教一下您~给分享一下呗~
七颗咖啡豆 发表于 2017-5-13 17:22 | 显示全部楼层
都这样问题解决了,就不说了
OO1253414972 发表于 2019-4-3 15:08 | 显示全部楼层
想请问楼主是怎么解决这个问题的。
Sunriver_Yao 发表于 2019-4-26 16:12 | 显示全部楼层
除了采样时间,还有什么?
llsshh 发表于 2020-4-7 15:57 | 显示全部楼层
llsshh 发表于 2020-4-7 15:58 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

6

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部