GD32F303 ADC代码
时间: 2023-11-12 16:59:07 浏览: 91
以下是使用GD32F303芯片的ADC代码示例:
```c
#include "gd32f30x.h"
void ADC_Configuration(void)
{
/* 使能 ADC0 时钟 */
rcu_periph_clock_enable(RCU_ADC0);
/* 配置 ADC0 工作模式为单次转换模式 */
adc_mode_config(ADC_MODE_FREE);
/* 配置 ADC0 外部触发源为软件触发 */
adc_external_trigger_source_config(ADC_INSERTED_CHANNEL, ADC_EXTTRIG_INSERTED_NONE);
/* 配置 ADC0 触发通道为 ADC_CHANNEL_0 */
adc_channel_length_config(ADC_INSERTED_CHANNEL, 1);
adc_inserted_channel_config(0, ADC_CHANNEL_0, ADC_SAMPLETIME_239POINT5);
/* 配置 ADC0 转换个数为1 */
adc_special_function_config(ADC_INSERTED_CHANNEL, ADC_SCAN_MODE, DISABLE);
adc_special_function_config(ADC_INSERTED_CHANNEL, ADC_CONTINUOUS_MODE, DISABLE);
adc_special_function_config(ADC_INSERTED_CHANNEL, ADC_INSERTED_SCAN, DISABLE);
/* 使能 ADC0 */
adc_enable(ADC_INSERTED_CHANNEL);
/* ADC0 开始转换 */
adc_calibration_enable(ADC_INSERTED_CHANNEL);
}
int main(void)
{
/* ADC 配置 */
ADC_Configuration();
while (1) {
/* ADC0 开始转换 */
adc_software_trigger_enable(ADC_INSERTED_CHANNEL);
/* 等待 ADC0 转换完成 */
while (RESET == adc_flag_get(ADC_INSERTED_CHANNEL, ADC_FLAG_EOC));
/* 读取 ADC0 转换结果 */
uint16_t adc_value = adc_injected_data_read(ADC_INSERTED_CHANNEL, 0);
/* 处理 ADC0 转换结果 */
// TODO
}
}
```
此代码使用单次转换模式进行 ADC0 转换,触发通道为 ADC_CHANNEL_0,转换结果存储在插入通道的第一个转换结果中。ADC0 的转换结果可以通过调用 `adc_injected_data_read` 函数来读取。
阅读全文