Adc.c 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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 "gd32f30x_libopt.h"
  12. #include "SysTick.h"
  13. void adc_init(void)
  14. {
  15. // rcu_periph_clock_enable(RCU_ADC0);
  16. // rcu_periph_clock_enable(RCU_GPIOA);
  17. // gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_MAX,GPIO_PIN_6);
  18. // rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV4);
  19. //
  20. // adc_special_function_config(ADC0, ADC_SCAN_MODE, ENABLE);
  21. // adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE);
  22. // adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT);
  23. // adc_mode_config(ADC_DAUL_REGULAL_PARALLEL);
  24. // adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 2);
  25. // adc_regular_channel_config(ADC0, 0, ADC_CHANNEL_6, ADC_SAMPLETIME_55POINT5);
  26. // adc_external_trigger_config(ADC0, ADC_REGULAR_CHANNEL, ENABLE);
  27. // adc_enable(ADC0);
  28. // adc_calibration_enable(ADC0);
  29. // delay_1ms(1);
  30. #if 1
  31. rcu_periph_clock_enable(RCU_ADC0);
  32. rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV6);
  33. gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_MAX,GPIO_PIN_6);
  34. adc_deinit(ADC0);
  35. adc_special_function_config(ADC0,ADC_CONTINUOUS_MODE, ENABLE);
  36. adc_external_trigger_source_config(ADC0,ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE);
  37. adc_data_alignment_config(ADC0,ADC_DATAALIGN_RIGHT);
  38. adc_channel_length_config(ADC0,ADC_REGULAR_CHANNEL, 1U);
  39. adc_regular_channel_config(ADC0,0U, ADC_CHANNEL_6, ADC_SAMPLETIME_55POINT5);
  40. adc_external_trigger_config(ADC0,ADC_REGULAR_CHANNEL, ENABLE);
  41. adc_resolution_config(ADC0,ADC_RESOLUTION_12B);
  42. adc_enable(ADC0);
  43. DelayNms(1);
  44. adc_calibration_enable(ADC0);
  45. #endif
  46. }
  47. uint16_t get_adc(void)
  48. {
  49. #if 1
  50. adc_software_trigger_enable(ADC0,ADC_REGULAR_CHANNEL);
  51. while(!adc_flag_get(ADC0,ADC_FLAG_EOC));
  52. adc_flag_clear(ADC0,ADC_FLAG_EOC);
  53. return (adc_regular_data_read(ADC0));
  54. #endif
  55. return 0;
  56. }