Adc.c 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  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_enable();
  27. DelayNms(1);
  28. adc_calibration_enable();
  29. }
  30. uint16_t get_adc(void)
  31. {
  32. adc_software_trigger_enable(ADC_REGULAR_CHANNEL);
  33. while(!adc_flag_get(ADC_FLAG_EOC));
  34. adc_flag_clear(ADC_FLAG_EOC);
  35. return (adc_regular_data_read());
  36. }