#include "hal_adc.h" #include "sys_log.h" #include "sys_timer.h" #include "delay.h" #include "board.h" #define GET_ADC_CNT 3 ADC_HandleTypeDef ADC1_Handler; //ADC��� //��ʼ��ADC //ch: ADC_channels //ͨ��ֵ 0~16ȡֵ��ΧΪ��ADC_CHANNEL_0~ADC_CHANNEL_16 void HAL_AdcInit(void) { RCC_PeriphCLKInitTypeDef ADC_CLKInit; ADC_CLKInit.PeriphClockSelection = RCC_PERIPHCLK_ADC; //ADC����ʱ�� ADC_CLKInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; //��Ƶ����6ʱ��Ϊ72M/6=12MHz HAL_RCCEx_PeriphCLKConfig(&ADC_CLKInit); //����ADCʱ�� ADC1_Handler.Instance = ADC1; ADC1_Handler.Init.DataAlign = ADC_DATAALIGN_RIGHT; //�Ҷ��� ADC1_Handler.Init.ScanConvMode = DISABLE; //��ɨ��ģʽ ADC1_Handler.Init.ContinuousConvMode = DISABLE; //�ر�����ת�� ADC1_Handler.Init.NbrOfConversion = 1; //1��ת���ڹ��������� Ҳ����ֻת����������1 ADC1_Handler.Init.DiscontinuousConvMode = DISABLE; //��ֹ����������ģʽ ADC1_Handler.Init.NbrOfDiscConversion = 0; //����������ͨ����Ϊ0 ADC1_Handler.Init.ExternalTrigConv = ADC_SOFTWARE_START; //�������� HAL_ADC_Init(&ADC1_Handler); //��ʼ�� HAL_ADCEx_Calibration_Start(&ADC1_Handler); //У׼ADC } //ADC�ײ��������������ã�ʱ��ʹ�� //�˺����ᱻHAL_ADC_Init()���� //hadc:ADC��� void HAL_ADC_MspInit(ADC_HandleTypeDef *hadc) { GPIO_InitTypeDef GPIO_Initure; __HAL_RCC_ADC1_CLK_ENABLE(); //ʹ��ADC1ʱ�� __HAL_RCC_GPIOA_CLK_ENABLE(); //����GPIOAʱ�� GPIO_Initure.Pin = ADC_PIN; //PA1 GPIO_Initure.Mode = GPIO_MODE_ANALOG; //ģ�� GPIO_Initure.Pull = GPIO_NOPULL; //���������� HAL_GPIO_Init(ADC_GPIO, &GPIO_Initure); } /* ͨ���� ���� ͨ���� ���� ͨ��0 PA0 ͨ��8 PB0 ͨ��1 PA1 ͨ��9 PB1 ͨ��2 PA2 ͨ��10 PC0 ͨ��3 PA3 ͨ��11 PC1 ͨ��4 PA4 ͨ��12 PC2 ͨ��5 PA5 ͨ��13 PC3 ͨ��6 PA6 ͨ��14 PC4 ͨ��7 PA7 ͨ��15 PC5 */ //���ADCֵ //ch: ͨ��ֵ 0~16��ȡֵ��ΧΪ��ADC_CHANNEL_0~ADC_CHANNEL_16 //����ֵ:ת����� static uint16_t Get_Adc(uint32_t ch) { ADC_ChannelConfTypeDef ADC1_ChanConf; ADC1_ChanConf.Channel = ch; //ͨ�� ADC1_ChanConf.Rank = 1; //��1�����У�����1 ADC1_ChanConf.SamplingTime = ADC_SAMPLETIME_239CYCLES_5; //����ʱ�� HAL_ADC_ConfigChannel(&ADC1_Handler, &ADC1_ChanConf); //ͨ������ HAL_ADC_Start(&ADC1_Handler); //����ADC HAL_ADC_PollForConversion(&ADC1_Handler, 10); //��ѯת�� return (uint16_t)HAL_ADC_GetValue(&ADC1_Handler); //�������һ��ADC1�������ת����� } //��ȡָ��ͨ����ת��ֵ��ȡtimes��,Ȼ��ƽ�� uint16_t HAL_AdcGetVal(void) { u32 temp_val = 0; u8 t; for (t = 0; t < GET_ADC_CNT; t++) { temp_val += Get_Adc(ADC_CHANNEL_1); delay_ms(3); } return temp_val / GET_ADC_CNT; } void get_adv_val_timer_callback(void) { int mv; uint16_t val = HAL_AdcGetVal(); mv = val*(3.3/4096)*1000; DLOG_I("adv_val:%d,mv:%d",val,mv); } void HAL_AdcGetValTimerInit(void) { HAL_TimerRegister(get_adv_val_timer_callback, 1000); }