STM8L的ADC采集问题

2019-07-19 21:01发布

本帖最后由 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]
下图为调试后的截图:


0条回答

一周热门 更多>