You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#include "adc.h"
static float prv_adc_get_value(); // uint16_t meanvalue;
static void prv_adc_pa2_init() { ADC_InitStruType x; GPIO_InitSettingType y; y.Signal = GPIO_Pin_Signal_Analog; //�
y.Dir = GPIO_Direction_Input; //����
y.Func = GPIO_Reuse_Func0; // x.CHS����adc�ɼ���ͨ��ÿ�����Ŷ�Ӧһ��ͨ��
GPIO_Init(GPIO_Pin_A2, &y);
//������Ƶ�Ժ�Tadclk=1/(PCLK/4)Լ����0.083us
x.CLKS = ADC_CLKS_PCLK; x.CLKDIV = ADC_CLKDIV_1_32; /* ADCʱ��ԴԤ��Ƶ */
//�ɼ�����ģ����*3.3/4096=���ڵĵ�ѹ
x.VREF_SEL = ADC_VREF_SEL_0; /* �ڲ��ο���ѹ2.048v,�������ڲ��ο���ѹΪ���� */ x.VREFP = ADC_VREFP_VDD; /* ѡ��оƬ�Ĺ�����ѹVDD������������adc������Ҫ�ĸ���ѹ�����ο�adc�IJο���ѹΪ���� */ x.VREFN = ADC_VREFN_VSS; /* �����ο���ѹѡ�� */ x.CHS = ADC_CHS_AIN8; x.SMPS = ADC_SMPS_SOFT; /* AD����ģʽΪ�������� */ //����ʱ��st*2+1(��Tadclk)=1.743us
x.ST = 10; /* ADӲ������ʱ��ѡ�� */ x.BITSEL = ADC_BITSEL_12; /* AD�ֱ���12λ */ ADC_Init(&x); prv_adc_get_value(); } static void prv_adc_pb8_init() { ADC_InitStruType x; GPIO_InitSettingType y; y.Signal = GPIO_Pin_Signal_Analog; //ģ��
y.Dir = GPIO_Direction_Input; //����
y.Func = GPIO_Reuse_Func0; // x.CHS����adc�ɼ���ͨ��ÿ�����Ŷ�Ӧһ��ͨ��
GPIO_Init(GPIO_Pin_B8, &y);
//������Ƶ�Ժ�Tadclk=1/(PCLK/4)Լ����0.083us
x.CLKS = ADC_CLKS_PCLK; x.CLKDIV = ADC_CLKDIV_1_32; /* ADCʱ��ԴԤ��Ƶ */
//�ɼ�����ģ����*3.3/4096=���ڵĵ�ѹ
x.VREF_SEL = ADC_VREF_SEL_0; /* �ڲ��ο���ѹ2.048v,�������ڲ��ο���ѹΪ���� */ x.VREFP = ADC_VREFP_VDD; /* ѡ��оƬ�Ĺ�����ѹVDD������������adc������Ҫ�ĸ���ѹ�����ο�adc�IJο���ѹΪ���� */ x.VREFN = ADC_VREFN_VSS; /* �����ο���ѹѡ�� */ x.CHS = ADC_CHS_AIN3; x.SMPS = ADC_SMPS_SOFT; /* AD����ģʽΪ�������� */ //����ʱ��st*2+1(��Tadclk)=1.743us
x.ST = 10; /* ADӲ������ʱ��ѡ�� */ x.BITSEL = ADC_BITSEL_12; /* AD�ֱ���12λ */ ADC_Init(&x); prv_adc_get_value(); }
static void prv_adc_pb9_init() { ADC_InitStruType x; GPIO_InitSettingType y; y.Signal = GPIO_Pin_Signal_Analog; //�
y.Dir = GPIO_Direction_Input; //����
y.Func = GPIO_Reuse_Func0; // x.CHS����adc�ɼ���ͨ��ÿ�����Ŷ�Ӧһ��ͨ��
GPIO_Init(GPIO_Pin_B9, &y);
//������Ƶ�Ժ�Tadclk=1/(PCLK/32)
x.CLKS = ADC_CLKS_PCLK; x.CLKDIV = ADC_CLKDIV_1_32; /* ADCʱ��ԴԤ��Ƶ */
//�ɼ�����ģ����*3.3/4096=���ڵĵ�ѹ
x.VREF_SEL = ADC_VREF_SEL_0; /* �ڲ��ο���ѹ2.048v,�������ڲ��ο���ѹΪ���� */ x.VREFP = ADC_VREFP_VDD; /* ѡ��оƬ�Ĺ�����ѹVDD������������adc������Ҫ�ĸ���ѹ�����ο�adc�IJο���ѹΪ���� */ x.VREFN = ADC_VREFN_VSS; /* �����ο���ѹѡ�� */ x.CHS = ADC_CHS_AIN4; // x.CHS = ADC_CHS_AIN8;
x.SMPS = ADC_SMPS_SOFT; /* AD����ģʽΪ�������� */ //����ʱ��st*2+1(��Tadclk)=1.743us
x.ST = 10; /* ADӲ������ʱ��ѡ�� */ x.BITSEL = ADC_BITSEL_12; /* AD�ֱ���12λ */ ADC_Init(&x); prv_adc_get_value(); }
static float prv_adc_get_value() { ADC_SoftStart(); while (ADC_GetConvStatus() != RESET) ; uint16_t adcv = ADC_GetConvValue(); ADC_SoftStop(); printf("%d\r\n", adcv); return adcv * 3.3 / 4096; }
static float prv_adc_get_value_average(int average) { if (average == 0) { average = 1; } float value = 0; for (size_t i = 0; i < average; i++) { value += prv_adc_get_value(); } return value / average; }
float adc_get_value_pa2(void) { prv_adc_pa2_init(); return prv_adc_get_value_average(AVERAGE_TABLE_SIZE); } float adc_get_value_pb8(void) { prv_adc_pb8_init(); return prv_adc_get_value_average(AVERAGE_TABLE_SIZE); } float adc_get_value_pb9(void) { prv_adc_pb9_init(); return prv_adc_get_value_average(AVERAGE_TABLE_SIZE); }
|