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

2019-07-21 07:28发布

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

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


PS:我要在DMA初始化函数前加个小延时是因为刚才看到原子哥说库函数某个版本的函数有个小bug,加了小延时可以消除。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
12条回答
flyinggirlxhx
2019-07-22 07:41
http://blog.sina.com.cn/s/blog_542bad910101h5jy.html
这个帖子里重点讲解了为什么会数据错位,并且怎么处理。亲测有效!

要注意在初始化时将DMA_Cmd(DMA1_Channel1, ENABLE);放置到ADC_SoftwareStartConvCmd(ADC1, ENABLE);前面。

原因是:如果在初始化AD的时候DMA被触发了一次,但是此时并没有采样,但是DMA目的地址已经发生了自加,
当你采样第一路的时候,数据却填充到了第二路。

校准AD的时候会触发DMA导致通道错位,因此校准AD基准前不要启用DMA

一周热门 更多>