#include "ADC.h" void ADC_Configuration(void) { ADC_InitTypeDef ADC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; //GPIO?? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//GPIO?????? GPIO_Init(GPIOA, &GPIO_InitStructure);//?PA0??? ADC_DeInit(ADC1);//?? RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE); ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC1?ADC2????,???? ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//ADC????,???????? ADC_InitStructure.ADC_ScanConvMode = DISABLE; //ADC?????(ENABLE??????) ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//????ADC ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//????? ADC_InitStructure.ADC_NbrOfChannel = 1;//ADC??????,??????ADC,????1 ADC_Init(ADC1,&ADC_InitStructure);//??? ADC_Cmd(ADC1, ENABLE);//?? //ADC?? ADC_ResetCalibration(ADC1);//??ADC??? while(ADC_GetResetCalibrationStatus(ADC1));//?????? ADC_StartCalibration(ADC1);//???? while(ADC_GetCalibrationStatus(ADC1));//?????? ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_239Cycles5); } static u16 Get_ADC_Value() { ADC_SoftwareStartConvCmd(ADC1, ENABLE);//????,ADC???? while(ADC_GetSoftwareStartConvStatus(ADC1));//?????? return ADC_GetConversionValue(ADC1);//?????ADC? } float bat_volt; uint8_t Get_Battary(void) {static float last_value = 100; static u8 first=1; bat_volt = (float)Get_ADC_Value()/621; //(value/4096*3.3*2-3.5)/0.7 if(bat_volt>=3.5) { if(first) { first = 0; last_value =(bat_volt-3.5)*143; } last_value = 0.9*last_value + (bat_volt-3.5)*14.3; if(last_value>100) last_value = 100; if(last_value<0) last_value = 0; } return last_value; }