芯片型号STM8L151C8T6
使用ADC,内部1.225V参考电压采样,计算
电源电压。采样50次,发现数据没有规律的乱变,网上能找到的例子都试过了,甚至库函数中使用到的寄存器也都查看过了,找不到问题原因。
void ADC_Config_VCC(void)
{
CLK_PeripheralClockConfig(CLK_Peripheral_ADC1,ENABLE); //开启ADC1时钟
ADC_VrefintCmd(ENABLE); //使能内部参考电压
ADC_Init(ADC1,ADC_ConversionMode_Single,ADC_Resolu
tion_12Bit,ADC_Prescaler_1); //连续转换,12位,转换时钟1分频
ADC_ChannelCmd(ADC1,ADC_Channel_Vrefint,ENABLE); //使能内部参考电压通道
ADC_Cmd(ADC1,ENABLE);//ADC使能
}
void ADC_dispose(void)
{
uint8_t temp_i;
uint16_t adc_data1[50];
ADC_Config_VCC();//ADC初始化,采样1.225V的参考电压,来反推出电源电压
adc_data =0;
for(temp_i=0;temp_i<50;temp_i++)
{
ADC_SoftwareStartConv(ADC1); //开启软件转换
while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)); //等待转换结束
ADC_ClearFlag(ADC1,ADC_FLAG_EOC); //清除对应标志
adc_data1[temp_i]=ADC_GetConversionValue(ADC1); //获取转换值
}
}
这是采集到的数据