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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值