你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm8l152 DMA读Ad的问题

[复制链接]
winterflower 提问时间:2015-9-22 09:44 /
我要用stm8l152读6路AD值,所以用DMA方式,用的是例程,但发现有移位现象,就是第一个AD值会到第二 第三 第四个的现象,代码如下,求大家帮我看看什么原因
  /* Enable ADC1 clock */
  CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE);

        /* Enable DMA1 clock */
  CLK_PeripheralClockConfig(CLK_Peripheral_DMA1, ENABLE);
       
        ADC_DeInit(ADC1);
//  DMA_GlobalDeInit();
//        DMA_DeInit(DMA1_Channel0);

  ADC_Init(ADC1, ADC_ConversionMode_Continuous, ADC_Resolution_10Bit, ADC_Prescaler_1);
  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 3 */
  ADC_ChannelCmd(ADC1, ADC_Channel_3, ENABLE); /* 大电流1 */
  /* Enable ADC1 Channels 4 */
  ADC_ChannelCmd(ADC1, ADC_Channel_4, ENABLE); /* 大电流2 */
         /* Enable ADC1 Channels 5 */
  ADC_ChannelCmd(ADC1, ADC_Channel_5, ENABLE); /* 2灯电流 */
  /* Enable ADC1 Channels 11 */
  ADC_ChannelCmd(ADC1, ADC_Channel_11, ENABLE); /* 1灯电流 */
         /* Enable ADC1 Channels 12 */
  ADC_ChannelCmd(ADC1, ADC_Channel_12, ENABLE); /* USB电流 */
  /* Enable ADC1 Channels 13 */
  ADC_ChannelCmd(ADC1, ADC_Channel_13, ENABLE); /* 电池电压 */

  /* Connect ADC to DMA channel 0 */
  SYSCFG_REMAPDMAChannelConfig(REMAP_DMA1Channel_ADC1ToChannel0);

  DMA_Init(DMA1_Channel0, AD_BUFFER_ADDRESS,
           ADC1_DR_ADDRESS,
           AD_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);

  /* Enable ADC1 DMA requests*/
  ADC_DMACmd(ADC1, ENABLE);

  /* Start ADC1 Conversion using TIM1 TRGO*/
  ADC_SoftwareStartConv(ADC1);


收藏 1 评论2 发布时间:2015-9-22 09:44

举报

2个回答
seeker2010 回答时间:2016-3-14 20:40:37
我也遇到同样的问题,有人来解释下吗
xmshao 回答时间:2016-3-15 11:31:42
本帖最后由 xmshao 于 2016-3-15 11:43 编辑

   /* DMA enable */
   DMA_GlobalCmd(ENABLE);
   /* Enable ADC1 DMA requests*/
   ADC_DMACmd(ADC1, ENABLE);
===>二者换个顺序看看
  /* Enable ADC1 DMA requests*/
   ADC_DMACmd(ADC1, ENABLE);
  /* DMA enable */
   DMA_GlobalCmd(ENABLE);


所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版