stm32 ad转换

采集多个数据求平均值

u16 Get_Adc(u8 ch)   
{
  	//设置指定ADC的规则组通道,一个序列,采样时间
	ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );	//ADC1,ADC通道,采样时间为239.5周期	  			    
  
	ADC_SoftwareStartConvCmd(ADC1, ENABLE);		//使能指定的ADC1的软件转换启动功能	
	 
	while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束

	return ADC_GetConversionValue(ADC1);	//返回最近一次ADC1规则组的转换结果
}

u16 Get_Adc_Average(u8 ch,u8 times)
{
	u32 temp_val=0;
	u8 t;
	for(t=0;t<times;t++)
	{
		temp_val+=Get_Adc(ch);
		delay_ms(5);
	}
	return temp_val/times;
} 

采集完后的数据处理

float temp;  //注意是float数据类型
u16 adcx;
adcx=Get_Adc_Average(ADC_Channel_1,10);  //的到一个u16 的值
temp=(float)adcx*(3.3/4096);             //强制转换 并且的实际电压值
adcx=temp;		//得到整数部分

temp-=adcx;
temp*=1000; 		 //得到小数部分



猜你喜欢

转载自blog.csdn.net/shenlong1356/article/details/83929585
今日推荐