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

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采样通道后面就会正常。
12下一页

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版