关于ADC——DMA采集数据错位

2019-07-21 07:28发布

在论坛上看到好多人都表示ADC——DMA采集数据回来后数据错位了。

刚才发现,我的代码如果在DMA使能了时钟后面加一个小延时的话,就会发生这样的情况。
然后我把那个小延时去掉后发现数据就正常了,正在纠结的人可以看下自己DMA初始化函数前面是不是有个小延时了。
为什么会这样呢?


PS:我要在DMA初始化函数前加个小延时是因为刚才看到原子哥说库函数某个版本的函数有个小bug,加了小延时可以消除。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
12条回答
sweetstandard
2019-07-22 11:07
本帖最后由 sweetstandard 于 2016-9-10 09:35 编辑

我也遇到了这样的问题,解决方法是:DMA工作在循环模式。具体如下:
======================================
寄存器方式:

void MYDMA_Config(DMA_Channel_TypeDef*DMA_CHx)
{




//DMA_CHx->CCR|=0<<5;  //非循环模式,这种模式下就错位。
   DMA_CHx->CCR|=1<<5;  //循环模式




}
=================================
库函数方式:

void MYDMA_Config(DMA_Channel_TypeDef*DMA_CHx)
{




//DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;  //正常缓存模式,这种模式下就错位。
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;//循环模式。        




}
================================

一周热门 更多>