中级会员
- 积分
- 235
- 金钱
- 235
- 注册时间
- 2014-11-26
- 在线时间
- 25 小时
|
本帖最后由 1376115749 于 2016-12-16 19:35 编辑
我初始化stm8L的ADC后,每次连续采集的时候第一次值是正确的,但是后面采集的值就变的没了谱,求大神指点
[mw_shl_code=c,true]void ADC1_Init(void)
{
GPIO_Init(GPIOA,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6,GPIO_Mode_In_FL_No_IT);
CLK_PeripheralClockConfig(CLK_Peripheral_ADC1,ENABLE);//开启ADC外设时钟
ADC_DeInit(ADC1);
ADC_Init(ADC1, ADC_ConversionMode_Single,ADC_Resolution_12Bit,ADC_Prescaler_1);
ADC_SamplingTimeConfig(ADC1,ADC_Group_SlowChannels,ADC_SamplingTime_16Cycles);
ADC_SchmittTriggerConfig(ADC1,ADC_Channel_0,DISABLE);
ADC_SchmittTriggerConfig(ADC1,ADC_Channel_1,DISABLE);
ADC_SchmittTriggerConfig(ADC1,ADC_Channel_2,DISABLE);
ADC_DMACmd(ADC1, DISABLE);
ADC_VrefintCmd(ENABLE);
//ADC_Cmd(ADC1,ENABLE);
}
//有三个通道可以采集数据
ADC_Channel_TypeDef ChannelMap[]={ADC_Channel_0,ADC_Channel_1,ADC_Channel_2};
uint16_t ADC1_ReadChannel(uint8_t ADC_Channel)
{
uint16_t TimeOutValue=50;
uint16_t ADCValue=0;
ADC_Cmd(ADC1,ENABLE);
ADC_ChannelCmd(ADC1, ChannelMap[ADC_Channel], ENABLE);
ADC_SoftwareStartConv(ADC1);
while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)==RESET && TimeOutValue-- != 0);
ADCValue = ADC_GetConversionValue(ADC1);
ADC_ChannelCmd(ADC1, ChannelMap[ADC_Channel], DISABLE);
ADC_Cmd(ADC1,DISABLE);
return ADCValue;
}[/mw_shl_code]
下图为调试后的截图:
|
-
|