我在实验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]
一周热门 更多>