/********************************************************************************************************* * Module : Adc.c * Abstract : Adc modules,of which be used to gather temprature! * Version : 1.0.0 * Author : Leopul(COPYRIGHT 2025 - 2027 Leopul. All rights reserved.) * Complete : 2025-02-28 * Content : None * Note : None *********************************************************************************************************/ #include "Adc.h" #include "gd32f30x_libopt.h" #include "SysTick.h" void adc_init(void) { // rcu_periph_clock_enable(RCU_ADC0); // rcu_periph_clock_enable(RCU_GPIOA); // gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_MAX,GPIO_PIN_6); // rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV4); // // adc_special_function_config(ADC0, ADC_SCAN_MODE, ENABLE); // adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE); // adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT); // adc_mode_config(ADC_DAUL_REGULAL_PARALLEL); // adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 2); // adc_regular_channel_config(ADC0, 0, ADC_CHANNEL_6, ADC_SAMPLETIME_55POINT5); // adc_external_trigger_config(ADC0, ADC_REGULAR_CHANNEL, ENABLE); // adc_enable(ADC0); // adc_calibration_enable(ADC0); // delay_1ms(1); #if 1 rcu_periph_clock_enable(RCU_ADC0); rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV6); gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_MAX,GPIO_PIN_6); adc_deinit(ADC0); adc_special_function_config(ADC0,ADC_CONTINUOUS_MODE, ENABLE); adc_external_trigger_source_config(ADC0,ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE); adc_data_alignment_config(ADC0,ADC_DATAALIGN_RIGHT); adc_channel_length_config(ADC0,ADC_REGULAR_CHANNEL, 1U); adc_regular_channel_config(ADC0,0U, ADC_CHANNEL_6, ADC_SAMPLETIME_55POINT5); adc_external_trigger_config(ADC0,ADC_REGULAR_CHANNEL, ENABLE); adc_resolution_config(ADC0,ADC_RESOLUTION_12B); adc_enable(ADC0); DelayNms(1); adc_calibration_enable(ADC0); #endif } uint16_t get_adc(void) { #if 1 adc_software_trigger_enable(ADC0,ADC_REGULAR_CHANNEL); while(!adc_flag_get(ADC0,ADC_FLAG_EOC)); adc_flag_clear(ADC0,ADC_FLAG_EOC); return (adc_regular_data_read(ADC0)); #endif return 0; }