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

STM32F030的ADC多通道DAM方式采样

[复制链接]
wendaofeng 提问时间:2014-7-14 17:44 /
 问题描述:
1、用ADC1的CH0、CH3、CH5共3个通道单次转换后通过DMA将数据寄存器中的转换后的值放在一个16位的数组中adc_convert_tbl[3]
转换方向是:upwoard
结果:adc_convert_tbl[0]中是ch0的数据、adc_convert_tbl[1]中是ch5中的数据、adc_convert_tbl[2]中是ch3的数据。即通道数据窜位。
将ADC_DMACmd(ADC1,ENABLE)放在ADCStartConversion()之后是正常的顺序即
adc_convert_tbl[0]中是ch0的数据、adc_convert_tbl[1]中是ch3的数据。
问:如何理解将ADC_DMACmd()放后面顺序就正确了?为什么会产生通道数据窜位?
2、在ADC的序列转换完成中断中或者DMA序列传输完成终断中改变选择的通道序列,即将原来的CH0、CH3、CH5改成CH1、CH3、CH5后,通道数据窜位,CH5跑到了adc_convert_tbl[1]中,CH3在adc_convert_tbl[2]中、而adc_convert_tbl[0]中的数据出错,正常转换后的值在20以内,但是出现了1480左右的数值。在改变通道前ADC_DMACmd(DISABLE)在改变通道后ADC_DMACmd(ENABLE)结果一样。
问:为什么会出现这种情况?是不是选定了一个转换序列后就不可以在改变转换序列?为什么转换序列的第一个数据会错误?如何解决这种问题?
 
静待高人指点!!
收藏 1 评论12 发布时间:2014-7-14 17:44

举报

12个回答
有缘于你 回答时间:2014-7-15 20:11:46

RE:STM32F030的ADC多通道DAM方式采样

这个没见过,你可以单独转化每个通道,就不会错位
巅峰残狼 回答时间:2014-7-16 19:47:14

RE:STM32F030的ADC多通道DAM方式采样

先使能DMA,再使能ADC就没有问题.错位的原因是ADC开启后,没有及时使能DMA,到DMA使能时ADC已经转换过若干个值,与设计产生偏差.
相思谷 回答时间:2014-7-17 12:20:50

RE:STM32F030的ADC多通道DAM方式采样

新手,向大家学习
aaa999kk 回答时间:2014-7-17 16:48:22

RE:STM32F030的ADC多通道DAM方式采样

在设计的时候产生的错位, 引起的数值不对
feixiang20 回答时间:2014-7-23 02:24:41

RE:STM32F030的ADC多通道DAM方式采样

序列确定后一般不要动了
powder-320203 回答时间:2015-4-29 02:22:06
曾经在stm32f10x,做过多个通道的adc,都是顺利的。今天也遇到这样的问题,即使关掉dma,并将单独转化每个通道,还是会错位?单独只用一个通道都是正确的。也加了不少延时。问题没有解决。
powder-320203 回答时间:2015-4-29 15:17:49
我的问题已解决。
//  ADCx->CHSELR |= (uint32_t)ADC_Channel;
  ADCx->CHSELR = (uint32_t)ADC_Channel;        //change by dupg 150429
alisa123 回答时间:2015-7-24 11:13:36
谢谢楼主分享,今天调试stm32f030的也遇到了,现已经解决。
alisa123 回答时间:2015-7-24 11:33:00
发现先开ADC_DMACmd(ADC1,ENABLE),再设置AD采样通道
        ADC_ChannelConfig(ADC1, ADC_Channel_0 , ADC_SampleTime_28_5Cycles);
        ADC_ChannelConfig(ADC1, ADC_Channel_1 , ADC_SampleTime_28_5Cycles);
        ADC_ChannelConfig(ADC1, ADC_Channel_2 , ADC_SampleTime_28_5Cycles);
        ADC_ChannelConfig(ADC1, ADC_Channel_3 , ADC_SampleTime_28_5Cycles);
        ADC_ChannelConfig(ADC1, ADC_Channel_4 , ADC_SampleTime_28_5Cycles);
        ADC_ChannelConfig(ADC1, ADC_Channel_5 , ADC_SampleTime_28_5Cycles);       
最后开ADC_Cmd(ADC1, ENABLE);就会出现错一位;如果把ADC_DMACmd(ADC1,ENABLE),放到设置AD采样通道后面就会正常。
无帝老三 回答时间:2015-9-1 16:50:48
楼主程序方便发一份吗?让菜鸟学习下,812967575@qq.com
无帝老三 回答时间:2015-9-2 16:50:07
有缘于你 发表于 2014-7-15 20:11
这个没见过,你可以单独转化每个通道,就不会错位

大神,问个问题
如果用PA1口作为AD输入,
那么ADC转换通道怎么选择??随意选择一个通道吗?
这两个应该没有什么关系吧??
请赐教菜鸟
wenyangzeng 回答时间:2015-9-4 21:58:00
GPIO_Config();
ADC_Config();                                //ADC-DMA-TIM1配置顺序勿改变,避免ADC数据错位
DMA_Config();
初始化时这个顺序很重要哦!!
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版