GD32F303 读取ADC软件触发
前言
ADC为模拟数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。各种通道的 A/D 转换可以配置成单次、连续、扫描或间断转换模式。
这里使用GD32F303 PC2 为例,使用单次,软件触发ADC,获取ADC值。
一、ADC初始化
1、时钟初始化
ADC时钟为120Mhz 6分频,为20Mhz。
rcu_periph_clock_enable(RCU_GPIOC);
rcu_periph_clock_enable(RCU_ADC0);
rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV6);
ADC总转换时间:
采样时间 + 12.5个ADC周期
2、GPIO模式配置
PC2配置为模拟输入
gpio_init(GPIOC, GPIO_MODE_AIN, GPIO_OSPEED_10MHZ, GPIO_PIN_2);
3、根据用户手册配置ADC外设寄存器
配置完,延时1ms,进行adc校准。
/*设置独立模式*/
adc_mode_config(ADC_MODE_FREE);
/*设置单次模式*/
adc_special_function_config(ADC0, ADC_CONTINUOUS_MODE, DISABLE);
/*设置数据右对齐*/
adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT);
/* 设置转换通道数量*/
adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 1);
/* 设置转换哪个通道以及所处序列位置*/
adc_regular_channel_config(ADC0, 0, ADC_CHANNEL_12, ADC_SAMPLETIME_239POINT5);
/* 设置软件触发*/
adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE);
/* 使能外部触发*/
adc_external_trigger_config(ADC0, ADC_REGULAR_CHANNEL, ENABLE);
/* 使能ADC*/
adc_enable(ADC0);
/* 延时1ms*/
delay_1ms(1U);
/*校准*/
adc_calibration_enable(ADC0);
二、获取ADC值
这里需要传入 ADC_CHANNEL_12
可以优化,在while等待那里加个超时判断。
uint16_t adc_channel_sample(uint8_t channel)
{
/* ADC转换通道设置 */
adc_regular_channel_config(ADC0, 0U, channel, ADC_SAMPLETIME_7POINT5);
/* 软件触发ADC采样 */
adc_software_trigger_enable(ADC0, ADC_REGULAR_CHANNEL);
/* 等待EOC标志位 */
while(!adc_flag_get(ADC0, ADC_FLAG_EOC));
/* 清楚标志位 */
adc_flag_clear(ADC0, ADC_FLAG_EOC);
return (adc_regular_data_read(ADC0));
}
内容若有错误,敬请留言 ,指正!
三、附录
参考资料:
1、https://www.gd32mcu.com/data/documents/errataSheet/Device_limitations_of_GD32F30x_Rev1.0.pdf
2、https://www.gd32mcu.com/data/documents/userManual/GD32F30x_User_Manual_Rev2.9_CN.pdf