#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_1Cycles5);
|
|
}
|
u16 Get_ADC_Value(void)
|
{
|
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;
|
}
|