求高手: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

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
螃蟹爱虫
1楼-- · 2019-07-19 20:57
 精彩回答 2  元偷偷看……
yuyouliang
2楼-- · 2019-07-20 00:57
同样的代码,用在STM8L151G6上面就完全不抖了。也和其他伙伴交流过类似的问题,不得不怀疑是芯片的问题了。
pbxywyq
3楼-- · 2019-07-20 02:39
不一定,你说的两种情况板子相同吗?如果不同应该首先怀疑板子的layout问题。

一周热门 更多>