现在用到STM8L的AD转换输入,输入端为0V,AD转换后都有0.4V多的电压,换算肯定是没问题的,因为读出来的12位分辨率的转换值都是一百多,刚才在百度上搜了相关的帖子,发现坛子里就有个帖子问的就是这个问题,最后他自己解决了,但是没有公布解决的办法,这个帖子的地址是https://bbs.21ic.com/icview-714698-1-1.html,呼叫这个帖子的楼主zhxingyu同学,希望能把最后解决的办法公布下,谢谢,下面是我的AD初始化代码和读AD的代码,我感觉大部分已经没问题了,应该是就差一个简单的配置
void ADC_MyInit(void)
{
CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE);
//ADC_VrefintCmd(DISABLE); //使能内部参考电压
ADC_DeInit(ADC1);
ADC_Init(ADC1,
ADC_ConversionMode_Single,
ADC_Resolution_12Bit,
ADC_Prescaler_2
);
ADC_SchmittTriggerConfig(ADC1, ADC_Channel_9, DISABLE);
ADC_SchmittTriggerConfig(ADC1, ADC_Channel_11, DISABLE);
ADC_Cmd(ADC1, ENABLE);
}
ADC_SoftwareStartConv(ADC1);
//如果AD转换完成
if(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) != 0)
{
//必须软件清除标志
ADC_ClearFlag(ADC1, ADC_FLAG_EOC);
lVoltageBack[uSampleStep/3] += AD_to_mV(ADC_GetConversionValue(ADC1));
uSampleStep++;
} |