原理图所示:

BAT_DET 接到PB0 引脚,VSYS 是直流3.7V的电压。再来看下103的adc转换和引脚GPIO的关系

我们直接选用ADC1 根据上表格只能使用通道8
下面给我常用的ADC1寄存器配置和使用实验

1 #include "ADC.h"
2
3
4 void ADCInit(void)
5 {
6
7 ADC_InitTypeDef ADC_InitStructure;
8 GPIO_InitTypeDef GPIO_InitStructure;
9
10 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |RCC_APB2Periph_ADC1, ENABLE ); //ʹÄÜADC1ͨµÀʱÖÓ
11
12 RCC_ADCCLKConfig(RCC_PCLK2_Div6); //ÉèÖÃADC·ÖƵÒò×Ó6 72M/6=12,ADC×î´óʱ¼ä²»Äܳ¬¹ý14M
13
14 //PB0 ×÷ΪģÄâͨµÀÊäÈëÒý½Å
15
16 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
17 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //Ä£ÄâÊäÈëÒý½Å
18 GPIO_Init(GPIOB, &GPIO_InitStructure);
19
20 ADC_DeInit(ADC1); //¸´Î»ADC1,½«ÍâÉè ADC1 µÄÈ«²¿¼Ä´æÆ÷ÖØÉèΪȱʡֵ
21
22 ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC¹¤×÷ģʽ:ADC1ºÍADC2¹¤×÷ÔÚ¶ÀÁ¢Ä£Ê½
23 ADC_InitStructure.ADC_ScanConvMode = DISABLE; //Ä£Êýת»»¹¤×÷ÔÚµ¥Í¨µÀģʽ
24 ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //Ä£Êýת»»¹¤×÷ÔÚµ¥´Îת»»Ä£Ê½
25 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //ת»»ÓÉÈí¼þ¶ø²»ÊÇÍⲿ´¥·¢Æô¶¯
26 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADCÊý¾ÝÓÒ¶ÔÆë
27 ADC_InitStructure.ADC_NbrOfChannel = 1; //˳Ðò½øÐйæÔòת»»µÄADCͨµÀµÄÊýÄ¿
28 ADC_Init(ADC1, &ADC_InitStructure); //¸ù¾ÝADC_InitStructÖÐÖ¸¶¨µÄ²ÎÊý³õʼ»¯ÍâÉèADCxµÄ¼Ä´æÆ÷
29
30 ADC_Cmd(ADC1, ENABLE); //ʹÄÜÖ¸¶¨µÄADC1
31
32 ADC_ResetCalibration(ADC1); //ʹÄܸ´Î»Ð£×¼
33
34 while(ADC_GetResetCalibrationStatus(ADC1)); //µÈ´ý¸´Î»Ð£×¼½áÊø
35
36 ADC_StartCalibration(ADC1); //¿ªÆôADУ׼
37
38 while(ADC_GetCalibrationStatus(ADC1)); //µÈ´ýУ׼½áÊø
39
40 }
41
42 u16 GetADCValue(u8 chose)
43 {
44 ADC_RegularChannelConfig(ADC1, chose, 1, ADC_SampleTime_239Cycles5 ); //ADC1,ADCͨµÀ,²ÉÑùʱ¼äΪ239.5ÖÜÆÚ
45
46 ADC_SoftwareStartConvCmd(ADC1, ENABLE); //ʹÄÜÖ¸¶¨µÄADC1µÄÈí¼þת»»Æô¶¯¹¦ÄÜ
47
48 while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//µÈ´ýת»»½áÊø
49
50 return ADC_GetConversionValue(ADC1); //·µ»Ø×î½üÒ»´ÎADC1¹æÔò×éµÄת»»½á¹û
51
52 }

1 #ifndef __ADC_H 2 #define __ADC_H 3 4 #include "sys.h" 5 void ADCInit(void); 6 u16 GetADCValue(u8 chose); 7 8 #endif

1 #include "sys.h"
2 #include "usart.h"
3 #include "delay.h"
4 #include "ADC.h"
5
6 #define LED0 PAout(8)// DS0
7 #define LED1 PBout(1)// DS1
8 #define LED2 PBout(3)// DS1
9 #define LED3 PAout(11)// DS1
10
11
12
13 int main(void)
14 {
15
16 u16 WADC;
17 float fadc;
18 Stm32_Clock_Init(9);
19 delay_init(72);
20 uart_init();
21 ADCInit();
22 while(1)
23 {
24 WADC = GetADCValue(ADC_Channel_8);
25 fadc =(float)WADC*(3.3/4096);
26 printf("V1-2 adc : %f \r\n",fadc);
27 delay_ms(1000);
28 }
29 return 0;
30
31 }
32
33
34
35
