求助STM32F051 ADCexcel筛选不出来数据的数据一直为0

21ic官方微信-->
后使用快捷导航没有帐号?
ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU
请完成以下验证码
查看: 202|回复: 3
关于STM32F051
ADC问题的请教
&&未结帖(20)
主题帖子积分
助理工程师, 积分 1185, 距离下一级还需 815 积分
助理工程师, 积分 1185, 距离下一级还需 815 积分
主题帖子积分
专家等级:结帖率:21%
主题帖子积分
助理工程师, 积分 1185, 距离下一级还需 815 积分
助理工程师, 积分 1185, 距离下一级还需 815 积分
STM32F051&&ADC 配置为DAM 采集 ADIN0~ADIN3, 4通道。
ADIN1输入为0 实测单片机管脚也为0,但是AD出来不正常,
采集结果,串口上传如下:
----AD ch1~ch4 ----
CH0 value = 1.532601 V
CH1 value = 1.458608 V
CH2 value = 0.650549 V
CH3 value = 1.468132 V
CH0 value = 1.531868 V
CH1 value = 1.457143 V
CH2 value = 0.650549 V
CH3 value = 1.468132 V
CH0 value = 1.532601 V
CH1 value = 1.458608 V
CH2 value = 0.649817 V
CH3 value = 1.469597 V
CH0 value = 1.532601 V
CH1 value = 1.457143 V
CH2 value = 0.649817 V
CH3 value = 1.468132 V
主题帖子积分
助理工程师, 积分 1185, 距离下一级还需 815 积分
助理工程师, 积分 1185, 距离下一级还需 815 积分
主题帖子积分
专家等级:结帖率:21%
主题帖子积分
助理工程师, 积分 1185, 距离下一级还需 815 积分
助理工程师, 积分 1185, 距离下一级还需 815 积分
继续做实验:
AD采样,采用查询方式AD,并串口打印到PC,分别单独作了两个通道采集。
AN2: (注入0.65V)
CH2 value = 0.650549 V
CH2 value = 0.650549 V
CH2 value = 0.649817 V
CH2 value = 0.650549 V
CH2 value = 0.650549 V
CH2 value = 0.650549 V
CH2 value = 0.650549 V
CH2 value = 0.650549 V
CH2 value = 0.649817 V
CH2 value = 0.650549 V
切换到 AN1:( 注入0V )
CH1 value = 1.588278 V
CH1 value = 1.509158 V
CH1 value = 1.463004 V
CH1 value = 1.585348 V
CH1 value = 1.461538 V
CH1 value = 1.584615 V
CH1 value = 1.462271 V
CH1 value = 1.461538 V
CH1 value = 1.584615 V
CH1 value = 1.463004 V
CH1 value = 1.509890 V
主题帖子积分
助理工程师, 积分 1185, 距离下一级还需 815 积分
助理工程师, 积分 1185, 距离下一级还需 815 积分
主题帖子积分
专家等级:结帖率:21%
主题帖子积分
助理工程师, 积分 1185, 距离下一级还需 815 积分
助理工程师, 积分 1185, 距离下一级还需 815 积分
STM32F051K4芯片,哪位大神知道问题所在?
主题帖子积分
高级技术员, 积分 948, 距离下一级还需 52 积分
高级技术员, 积分 948, 距离下一级还需 52 积分
主题帖子积分
专家等级:结帖率:31%打赏:0.00受赏:2.00
主题帖子积分
高级技术员, 积分 948, 距离下一级还需 52 积分
高级技术员, 积分 948, 距离下一级还需 52 积分
不是采集成内部的了吧
看ADC_CHSELR
社区建设奖章
等级类勋章
涓涓之细流
发帖类勋章
技术高手奖章
人才类勋章
时间类勋章
技术新星奖章
人才类勋章查看: 1853|回复: 3
DMA 传输,数据错位,一个通道采不到值
主题帖子精华
初级会员, 积分 81, 距离下一级还需 119 积分
在线时间19 小时
stm32f051 做AD采集, A0 接电位器& A1 接3.3V& A2& 接GND
通过DMA中断的方式 取值,现在发现 取值结果
ADC_DMA_DAT[0]正常&&
ADC_DMA_DAT[1] 为通道2的结果(0x0000)&&通道2的跑到这里来了
ADC_DMA_DAT[2]无结果,搞了半天也没整出来,请大家帮我看看。
u16 ADC_DMA_DAT[3];
u16 AdcIa = 0;
u16 AdcIb = 0;
u16 AdcRt = 0;
u16 GetAdcState = 0;
u16 sss[3];
//http://blog.csdn.net/xuezhimeng2010/article/details/
static void Adc_Gpio_Init()
&GPIO_InitTypeDef GPIO_InitS
&RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);
&GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
&GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
&GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 ;
&GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
&GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
&GPIO_Init(GPIOA,&GPIO_InitStructure);
static void Adc_Dma_Init()
&DMA_InitTypeDef& DMA_InitS
&NVIC_InitTypeDef NVIC_InitS
&RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
&NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel1_IRQn;
&NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
&NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
&NVIC_Init(&NVIC_InitStructure);
&DMA_InitStructure.DMA_BufferSize = 3;
&DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;//???è×÷????????
&DMA_InitStructure.DMA_M2M = DISABLE; //??????????????
&DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_DMA_DAT[0]; //?????????×???·
&DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfW//?????ó???è????halfword
&DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_E //???????·????
&DMA_InitStructure.DMA_Mode = DMA_Mode_C//DMA?&?·?????????ê???ó????????
&DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&(ADC1-&DR);
&DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfW// ???è?????ó???è????Halfword
&DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_D//???è???·????????
&DMA_InitStructure.DMA_Priority = DMA_Priority_H//DMA???????è??????
&DMA_Init(DMA1_Channel1,&DMA_InitStructure);
&DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE);&&&&&&&&&&&&&&&&&
&DMA_ClearITPendingBit(DMA_IT_TC);&&& //????????DMA????±ê??
& DMA_Cmd(DMA1_Channel1, ENABLE);& //????DMA1
void Adc_Init()
&ADC_InitTypeDef&& ADC_InitS
&Adc_Gpio_Init(); //GPIO Init
&Adc_Dma_Init();
&RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
&ADC_DeInit(ADC1);
&ADC_StructInit(&ADC_InitStructure);
&ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
&ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_R
&ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_TRGO;
&ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
&ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_R
&ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_U
&ADC_Init(ADC1,&ADC_InitStructure);
&ADC_OverrunModeCmd(ADC1,ENABLE); //????????·???????±???×?????????
&ADC_ChannelConfig(ADC1,ADC_Channel_0 | ADC_Channel_1 | ADC_Channel_2 ,
&&&&&&&&&&ADC_SampleTime_28_5Cycles);& //?????¨???? ×????±??
&ADC_GetCalibrationFactor(ADC1);& // ?????°??×?ADC1
&ADC_Cmd(ADC1,ENABLE);
&while(ADC_GetFlagStatus(ADC1,ADC_FLAG_ADEN) == RESET); //wait for adc1 enable
&ADC_DMARequestModeConfig(ADC1,ADC_DMAMode_Circular); //????DMA???ó???????&?·??????
&ADC_StartOfConversion(ADC1); //?????????¨±????&
&ADC_DMACmd(ADC1,ENABLE); //????ADC_DMA
void DMA1_Channel1_IRQHandler()&
&if(DMA_GetITStatus(DMA_IT_TC))&&&&&&&&&&&&&&&&&&&&& //????DMA????????
& {&&&&&&&&
&&if(GetAdcState == 0)&
&&&&AdcIa = ADC_DMA_DAT[0];&
&&&&AdcIb = ADC_DMA_DAT[1];&
&&&&AdcRt = ADC_DMA_DAT[2];
&&//&&GetAdcState = 1;&&&
&&& DMA_ClearITPendingBit(DMA_IT_TC);&& //??DMA????±ê??
看看ADC的初始化有没有放在DMA初始化后面,如果ADC先初始化的话,会出现数据错位的情况
主题帖子精华
初级会员, 积分 128, 距离下一级还需 72 积分
在线时间14 小时
看看ADC的初始化有没有放在DMA初始化后面,如果ADC先初始化的话,会出现数据错位的情况
主题帖子精华
金钱113176
在线时间827 小时
主题帖子精华
新手上路, 积分 20, 距离下一级还需 30 积分
在线时间2 小时
这个帖子里重点讲解了为什么会数据错位,并且怎么处理。亲测有效!
要注意在初始化时将DMA_Cmd(DMA1_Channel1, ENABLE);放置到ADC_SoftwareStartConvCmd(ADC1, ENABLE);前面。
原因是:如果在初始化AD的时候DMA被触发了一次,但是此时并没有采样,但是DMA目的地址已经发生了自加,
当你采样第一路的时候,数据却填充到了第二路。
校准AD的时候会触发DMA导致通道错位,因此校准AD基准前不要启用DMA
Powered by查看: 770|回复: 1
STM32F051的ADC采集
& && && &最近一个项目用到了STM32F051的片子,用到ADC采集的时候卡壳了,我用的是48脚的芯片,用ADC_IN_9,也就是PB1脚来采集电压数据,我没有用到DMA等功能,就是查询的方式采集数据,但是不管怎么样搞,读出的数据都为0,不知道哪里不对!求指点:
& &&&#include &stm32f0xx.h&
void ADC_Configuration(void)
& & & & ADC_InitTypeDef& && && & ADC_InitS
& & & & GPIO_InitTypeDef& && && &GPIO_InitS
& & & & //GPIOC Periph clock enable
& & & & RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
& & & & //ADC1 Periph clock enable
& & & & RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
& & & & //Configure ADC Channel11 as analog input
& & & & GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 ;//PB1口采集数据
& & & & GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
& & & & GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
& & & & GPIO_Init(GPIOB, &GPIO_InitStructure);
& & & & //ADC1 Configuration
& & & & //ADCs DeInit
& & & & ADC_DeInit(ADC1);
& & & & //Configure the ADC1 in continous mode withe a resolutuion equal to 12 bits
& & & & ADC_InitStructure.ADC_Resolution = ADC_Resolution_8b;
& & & & ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
& & & & ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_N& &
& && && && &&&//ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T3_TRGO;
& & & & ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_R
& & & & ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_U
& & & & ADC_Init(ADC1, &ADC_InitStructure);
& & & & //??ADC1??,??????
& & & & ADC_ChannelConfig(ADC1, ADC_Channel_9 , ADC_SampleTime_28_5Cycles);& &
& & & & //ADC Calibration-ADC??
& & & & ADC_GetCalibrationFactor(ADC1);
& & & & //Enable the auto delay feature-????????& &
& & & & ADC_WaitModeCmd(ADC1, ENABLE);
& & & & //??ADC1
& & & & ADC_AutoPowerOffCmd(ADC1, ENABLE);
& & & & //Enable ADCperipheral[PerIdx]-??ADC??[PerIdx]
& & & & ADC_Cmd(ADC1, ENABLE);& &&&
& & & & //Wait the ADCEN falg-??ADC1????
& & & & while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADEN));
& & & & //ADC1 regular Software Start Conv
& & & & ADC_StartOfConversion(ADC1);
unsigned short int&&DataV
unsigned short int GetADCNum(void)
& & & & if(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) != RESET)
& & & & & & & & DataValue=ADC_GetConversionValue(ADC1);
& & & & return DataV
& && && && &
阿莫电子论坛, 原"中国电子开发网"ADC2的问题,求助STM32F302RC_恋爱交友_康美有道生活站
ADC2的问题,求助STM32F302RC
编辑: 康美有道生活站 &&&来源:用户发布&&&发布时间:&&&查看次数:34
ADC2的问题了达,求助STM32F302RC
【探讨解答】
STM32如何采集两路AD信号
我用的是正点的板子,自学了一下,看到ADC这里表示不太明白,我想用ADC1...1. 请参照附件档 (STM32™’s ADC modesand their applications). 2. 请参照以下网址: /view...
新手求助STM32F051ADC出来的数据一直为0
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)AD_V //DMA内存基地址 这句话有问题,你应该把AD-Value的地址赋值过去,而不是把AD_Value的内容赋值过去,改成这样试试 DMA_InitStructure.DMA_MemoryBaseAddr = (&AD_Value);
stm32的adc1和adc2的区别
两个adc模块,可根据用户说明和你的实际电路进行配置 如果觉得答案解决了你的问题,请采纳,有问题可继续追问,如未回答追问,可能是不在哦
stm32中的adc是什么意思
18个通道,其中2个用于测量内部信号,16个可以测量外部信号,是12位的。 在STM32中ADC有些通道是重合的,也就是说ADC1和ADC2的某些通道是重合的,应用时要注意。 PB1含义就是ADC1和ADC2的通道9。又比如PA0分别为ADC1、ADC2和ADC3的通道0。
恋爱交友相关
更多相关内容
本站内容来自网友发布,本站无法保证其部分内容的正确性,请用户一定仔细辨别。
[] &&[联系QQ:885&971&98] &
蜀ICP备号&}

我要回帖

更多关于 分类汇总数据复制出来 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信