STM32的AD采样后通过DMA方式获取发生错位

[复制链接]
 楼主| leewen 发表于 2012-3-23 13:05 | 显示全部楼层 |阅读模式
我的系统在运行时,有时会遇到ADC采样通过DMA方式获取发送错位
比如说现在定义了几个AD口,
ADC_Init(ADC1,&ADC_InitStructure);
ADC_RegularChannelConfig(ADC1,ADC_Channel_2,1,ADC_SampleTime_55Cycles5);
ADC_RegularChannelConfig(ADC1,ADC_Channel_8,2,ADC_SampleTime_55Cycles5);
ADC_RegularChannelConfig(ADC1,ADC_Channel_9,3,ADC_SampleTime_55Cycles5);
...

在DMA配置里设置了ADC采样的传送数组
DMA_InitStructure.DMA_MemorBaseAddr = (u32)&ADC_ConvertedValue;

在AD采样的时候,程序本来要采样的是ADC_Channel_8通道的AD值是传送到ADC_ConvertedValue[1];
但结果却在ADC_ConvertedValue[2]中,其他的AD采样通过DMA传到该数组的值都依次往后推。

请问哪位大侠有遇到此种现象
freefish 发表于 2012-3-23 14:26 | 显示全部楼层
这个问题老早就有了。不止一个人遇到过,基本无法根除。是DMA的原因造成的,通道少于5时建议改成注入方式。多于4时,转换完四个,改通道,再转换四个
 楼主| leewen 发表于 2012-3-23 19:06 | 显示全部楼层
我的系统用的AD通道至少有8个,用的是规则方式,扫描模式的,基本没出现过错位的,最近发现在关闭ADC时钟,关闭ADON,然后重新打开时钟,初始化ADC和DMA后,有些平台会出现错位现象。
airwill 发表于 2012-3-23 20:12 | 显示全部楼层
我也遇到过, 没有办法, 曾经发帖说过这个问题, 怀疑是硬件缺陷.
然而反映给 ST, 人家要确切的发生错误的源代码, 可惜这个缺陷不总是出现的.
我试着获得出现问题的代码, 没有成功.
呵呵, 象楼上的那样, 绕者走吧.
 楼主| leewen 发表于 2012-3-23 20:21 | 显示全部楼层
查了一下,归纳了一些人的方法:
1,对ADC初始化时,先复位一下ADC1设备ADC_DeInit(ADC1);
2.在ADC初始化后,开始软件转换ADC_SoftwareStartConvCmd()后才执行DMA_Cmd(DMA_Channel1,ENABLE);
3.在系统进入休眠模式,停止ADC时,执行ADC1_CR2&=0XFFFFFEFC
暂时这样只有这些,不知道还不会出现问题。
freefish 发表于 2012-3-23 22:09 | 显示全部楼层
强干扰下几率很高!加个4000V脉冲群,一会儿就出现一次。

ADC_DeInit(ADC1);
ADC_DeInit(ADC2);

我的ADC初始化里开始就是这两句。用软件转换通道,不用DMA,就可以绕过去
 楼主| leewen 发表于 2012-3-24 10:14 | 显示全部楼层
也在考虑着不用DMA了,只是每次对某个AC通道转换时,都要重新设置一下这个通道,还没试验。
vrary 发表于 2012-4-10 10:49 | 显示全部楼层
学习
ji7411 发表于 2012-4-10 11:03 | 显示全部楼层
这个问题老早就有了。不止一个人遇到过,基本无法根除。是DMA的原因造成的,通道少于5时建议改成注入方式。多于4时,转换完四个,改通道,再转换四个


原来是这样。
chuckweng 发表于 2012-5-19 14:50 | 显示全部楼层
DMA 模式是循环接受的 还是 普通模式?如果是循环接受是很容易错位。
cool_coder 发表于 2013-11-25 15:59 | 显示全部楼层
我也碰到了,而且很有规律:连接仿真器运行时不错位,脱离仿真器就错位。
有人搞明白了吗?
ZRJ8951 发表于 2014-8-26 10:25 | 显示全部楼层
STM32的AD采样后通过DMA方式获取发生错位
=======================================
标记!
菜鸟同学 发表于 2015-10-7 12:08 | 显示全部楼层
leewen 发表于 2012-3-23 20:21
查了一下,归纳了一些人的方法:
1,对ADC初始化时,先复位一下ADC1设备ADC_DeInit(ADC1);
2.在ADC初始化后 ...

这个有道理1
smile99happytu 发表于 2017-3-6 17:22 | 显示全部楼层
我是外部触发 启动转换的 现在也是会出现通道错位 暂时还没有解决。。。。
smile99happytu 发表于 2017-3-6 17:35 | 显示全部楼层
freefish 发表于 2012-3-23 14:26
这个问题老早就有了。不止一个人遇到过,基本无法根除。是DMA的原因造成的,通道少于5时建议改成注入方式。 ...

转换完通道 怎样改通道再转换啊? 要怎么配置?
sky.sun.zz 发表于 2017-3-6 20:01 | 显示全部楼层
你必须先初始化DMA,然后再初始化ADC.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

45

主题

102

帖子

2

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