ADC采样,同一个通道,同一个基准,就是
什么都没有改变但是采集的数值不一样
下图为实验数据
第一次采集的会比后面几次采集的数据略大一点
主函数代码:- while(1)
- {
- ad=0;
- for(i=0;i<50;i++)
- {
- ad+=Get_adc();
- }
- ad=ad/50;
- printf("----第1次=%d",ad);
-
- ad=0;
- for(i=0;i<50;i++)
- {
- ad+=Get_adc();
- }
- ad=ad/50;
- printf("----第2次=%d",ad);
-
- ad=0;
- for(i=0;i<50;i++)
- {
- ad+=Get_adc();
- }
- ad=ad/50;
- printf("----第3次=%d
",ad);
- Delay_ms(3000);
- }
复制代码初始化代码:- void ADC_Configarition(void)
- {
- ADC_InitTypeDef ADC_Inttstructure;
-
- ADC_Inttstructure.ADC_Mode=ADC_Mode_Independent;//独立模式
- ADC_Inttstructure.ADC_ScanConvMode =DISABLE;
- ADC_Inttstructure.ADC_ContinuousConvMode=DISABLE;//采集模式单次
- ADC_Inttstructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;
- ADC_Inttstructure.ADC_DataAlign=ADC_DataAlign_Right;//右对齐
- ADC_Inttstructure.ADC_NbrOfChannel=1;//转换通道数目
-
- ADC_Init(ADC1,&ADC_Inttstructure);//初始化
-
- ADC_RegularChannelConfig(ADC1,ADC_Channel_10,1,ADC_SampleTime_239Cycles5);//规则组
- ADC_Cmd(ADC1,ENABLE);//使能
-
- //校准
- ADC_ResetCalibration(ADC1);//复位
- while(ADC_GetResetCalibrationStatus(ADC1));//是否完成
- ADC_StartCalibration(ADC1);//校准
- while(ADC_GetCalibrationStatus(ADC1));
- ADC_SoftwareStartConvCmd(ADC1,ENABLE);//开始转换
- }
- u16 Get_adc(void)
- {
- ADC_SoftwareStartConvCmd(ADC1,ENABLE);//开始转换
- while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));
- return ADC_GetConversionValue(ADC1);
- }
复制代码求大神
此帖出自
小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>