求高手:STM8L151K4T6的ADC,转换得到的模拟值抖动厉害

2019-07-19 20:56发布

我在实验STM8L151K4T6的单片机,在调试ADC的时候,碰到示数很飘的问题。使用两个管脚,分别是PB3和PB7,去采集电压值。现在这两个管脚,我都是直接接到GND的,但通过串口打印,得到的数值飘的厉害,如附件的图片所示。
理论上应该都是0,但实际上出现了18的值,非常诡异。不知道有没有高手碰到类似问题,求指教,先谢谢了。
下面是我写的驱动代码:
[mw_shl_code=c,true]void ADC_Begin(void)
{
    CLK_PeripheralClockConfig (CLK_Peripheral_ADC1,ENABLE);//开启ADC1时钟,只有ADC1,没有ADC2
    ADC_DeInit(ADC1);//复位
    ADC_Init(ADC1,ADC_ConversionMode_Single,ADC_Resolution_10Bit,ADC_Prescaler_2);//单次转换,10位,转换时钟2分频
    ADC_SamplingTimeConfig(ADC1, ADC_Group_SlowChannels, ADC_SamplingTime_384Cycles);//设置ADC低速(0~23)通道的采样时间
    ADC_Cmd(ADC1,ENABLE);//ADC使能
}

uint16_t  Analog_Read(ADC_Channel_TypeDef channel)
{
    uint16_t analogValue;
    ADC1->SQR[0] =  ADC_SQR1_RESET_VALUE;//失能所有通道选择
    ADC1->SQR[1] =  ADC_SQR2_RESET_VALUE;
    ADC1->SQR[2] =  ADC_SQR3_RESET_VALUE;
    ADC1->SQR[3] =  ADC_SQR4_RESET_VALUE;
    ADC_DMACmd(ADC1,DISABLE);   //单次转换,需关闭DMA   
    ADC_ChannelCmd (ADC1,channel,ENABLE);//选定通道;单次转换,只能选择一个通道
    ADC_SoftwareStartConv (ADC1);//软件启动转换
    while(ADC_GetFlagStatus (ADC1,ADC_FLAG_EOC) == RESET);//等待转换结束
    analogValue = ADC_GetConversionValue (ADC1);//获取转换值
    ADC_ClearFlag (ADC1,ADC_FLAG_EOC);//清除对应标志
    return analogValue;
}[/mw_shl_code]

QQ截图20161222163111.jpg

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。