hal_adc.c 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #include "hal_adc.h"
  2. #include "sys_log.h"
  3. #include "sys_timer.h"
  4. #include "delay.h"
  5. #include "board.h"
  6. #define GET_ADC_CNT 3
  7. ADC_HandleTypeDef ADC1_Handler;
  8. void HAL_AdcInit(void)
  9. {
  10. RCC_PeriphCLKInitTypeDef ADC_CLKInit;
  11. ADC_CLKInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;
  12. ADC_CLKInit.AdcClockSelection = RCC_ADCPCLK2_DIV6;
  13. HAL_RCCEx_PeriphCLKConfig(&ADC_CLKInit);
  14. ADC1_Handler.Instance = ADC1;
  15. ADC1_Handler.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  16. ADC1_Handler.Init.ScanConvMode = DISABLE;
  17. ADC1_Handler.Init.ContinuousConvMode = DISABLE;
  18. ADC1_Handler.Init.NbrOfConversion = 1;
  19. ADC1_Handler.Init.DiscontinuousConvMode = DISABLE;
  20. ADC1_Handler.Init.NbrOfDiscConversion = 0;
  21. ADC1_Handler.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  22. HAL_ADC_Init(&ADC1_Handler);
  23. HAL_ADCEx_Calibration_Start(&ADC1_Handler);
  24. }
  25. void HAL_ADC_MspInit(ADC_HandleTypeDef *hadc)
  26. {
  27. GPIO_InitTypeDef GPIO_Initure;
  28. __HAL_RCC_ADC1_CLK_ENABLE();
  29. __HAL_RCC_GPIOA_CLK_ENABLE();
  30. GPIO_Initure.Pin = ADC_PIN;
  31. GPIO_Initure.Mode = GPIO_MODE_ANALOG;
  32. GPIO_Initure.Pull = GPIO_NOPULL;
  33. HAL_GPIO_Init(ADC_GPIO, &GPIO_Initure);
  34. }
  35. static uint16_t Get_Adc(uint32_t ch)
  36. {
  37. ADC_ChannelConfTypeDef ADC1_ChanConf;
  38. ADC1_ChanConf.Channel = ch;
  39. ADC1_ChanConf.Rank = 1;
  40. ADC1_ChanConf.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
  41. HAL_ADC_ConfigChannel(&ADC1_Handler, &ADC1_ChanConf);
  42. HAL_ADC_Start(&ADC1_Handler);
  43. HAL_ADC_PollForConversion(&ADC1_Handler, 10);
  44. return (uint16_t)HAL_ADC_GetValue(&ADC1_Handler);
  45. }
  46. uint16_t HAL_AdcGetVal(void)
  47. {
  48. u32 temp_val = 0;
  49. u8 t;
  50. for (t = 0; t < GET_ADC_CNT; t++)
  51. {
  52. temp_val += Get_Adc(ADC_CHANNEL_1);
  53. delay_ms(3);
  54. }
  55. return temp_val / GET_ADC_CNT;
  56. }
  57. void get_adv_val_timer_callback(void)
  58. {
  59. int mv;
  60. uint16_t val = HAL_AdcGetVal();
  61. mv = val*(3.3/4096)*1000;
  62. DLOG_I("adv_val:%d,mv:%d",val,mv);
  63. }
  64. void HAL_AdcGetValTimerInit(void)
  65. {
  66. HAL_TimerRegister(get_adv_val_timer_callback, 1000);
  67. }