1. 程式人生 > >stm32 ad轉換

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; 		 //得到小數部分