zhyinch
2020-04-12 d48641460072d9a160ca5f04977269ba0171a9e2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#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;    
}