#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; void HAL_AdcInit(void) { RCC_PeriphCLKInitTypeDef ADC_CLKInit; ADC_CLKInit.PeriphClockSelection = RCC_PERIPHCLK_ADC; ADC_CLKInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; HAL_RCCEx_PeriphCLKConfig(&ADC_CLKInit); 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; ADC1_Handler.Init.DiscontinuousConvMode = DISABLE; ADC1_Handler.Init.NbrOfDiscConversion = 0; ADC1_Handler.Init.ExternalTrigConv = ADC_SOFTWARE_START; HAL_ADC_Init(&ADC1_Handler); HAL_ADCEx_Calibration_Start(&ADC1_Handler); } void HAL_ADC_MspInit(ADC_HandleTypeDef *hadc) { GPIO_InitTypeDef GPIO_Initure; __HAL_RCC_ADC1_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_Initure.Pin = ADC_PIN; GPIO_Initure.Mode = GPIO_MODE_ANALOG; GPIO_Initure.Pull = GPIO_NOPULL; HAL_GPIO_Init(ADC_GPIO, &GPIO_Initure); } static uint16_t Get_Adc(uint32_t ch) { ADC_ChannelConfTypeDef ADC1_ChanConf; ADC1_ChanConf.Channel = ch; ADC1_ChanConf.Rank = 1; ADC1_ChanConf.SamplingTime = ADC_SAMPLETIME_239CYCLES_5; HAL_ADC_ConfigChannel(&ADC1_Handler, &ADC1_ChanConf); HAL_ADC_Start(&ADC1_Handler); HAL_ADC_PollForConversion(&ADC1_Handler, 10); return (uint16_t)HAL_ADC_GetValue(&ADC1_Handler); } 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); }