Adc.c 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /*********************************************************************************************************
  2. * Module : Adc.c
  3. * Abstract : Adc modules,of which be used to gather temprature!
  4. * Version : 1.0.0
  5. * Author : Leopul(COPYRIGHT 2025 - 2027 Leopul. All rights reserved.)
  6. * Complete : 2025-02-28
  7. * Content : None
  8. * Note : None
  9. *********************************************************************************************************/
  10. #include "Adc.h"
  11. #include "gd32e230x_conf.h"
  12. #include "SysTick.h"
  13. void adc_init(void)
  14. {
  15. rcu_periph_clock_enable(RCU_ADC);
  16. rcu_adc_clock_config(RCU_ADCCK_APB2_DIV6);
  17. rcu_periph_clock_enable(RCU_GPIOB);
  18. gpio_mode_set(GPIOB, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO_PIN_0);
  19. adc_deinit();
  20. adc_special_function_config(ADC_CONTINUOUS_MODE, ENABLE);
  21. adc_external_trigger_source_config(ADC_REGULAR_CHANNEL, ADC_EXTTRIG_REGULAR_NONE);
  22. adc_data_alignment_config(ADC_DATAALIGN_RIGHT);
  23. adc_channel_length_config(ADC_REGULAR_CHANNEL, 1U);
  24. adc_regular_channel_config(0U, ADC_CHANNEL_8, ADC_SAMPLETIME_55POINT5);
  25. adc_external_trigger_config(ADC_REGULAR_CHANNEL, ENABLE);
  26. adc_resolution_config(ADC_RESOLUTION_12B);
  27. adc_enable();
  28. DelayNms(1);
  29. adc_calibration_enable();
  30. }
  31. uint16_t get_adc(void)
  32. {
  33. adc_software_trigger_enable(ADC_REGULAR_CHANNEL);
  34. while(!adc_flag_get(ADC_FLAG_EOC));
  35. adc_flag_clear(ADC_FLAG_EOC);
  36. return (adc_regular_data_read());
  37. }