[mw_shl_code=c,true]//获得ADC值
//ch:通道值 0~3
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;[/mw_shl_code]
采集ADC后为什么需要delay_ms(5)延时5毫秒呢?
Get_Adc函数中已经有等待采集结束了,说明函数调用完就已经采集完了啊
[mw_shl_code=c,true]while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束[/mw_shl_code]
[mw_shl_code=c,true]
[mw_shl_code=c,true]但是去掉delay后采集到的数据会偏小[/mw_shl_code]
[/mw_shl_code] |