国产arm芯片GD32
时间: 2023-12-01 08:43:03 浏览: 151
GD32是一款国产ARM芯片,可替代STM32系列芯片。它具有与STM32相同的外设和功能,并且支持多种编程工具和开发环境。以下是使用GD32F103系列芯片进行ADC采集的示例代码:
```c
#include "gd32f1x0.h"
#include <stdio.h>
#define ADC_GPIO_PORT GPIOA
#define ADC_GPIO_PIN GPIO_PIN_0
#define ADC_GPIO_CLK RCU_GPIOA
#define ADC_CLK RCU_ADC0
#define ADC_CHANNEL ADC_CHANNEL_0
void adc_config(void)
{
/* 使能GPIOA时钟 */
rcu_periph_clock_enable(ADC_GPIO_CLK);
/* 配置PA0为模拟输入 */
gpio_mode_set(ADC_GPIO_PORT, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, ADC_GPIO_PIN);
/* 使能ADC时钟 */
rcu_periph_clock_enable(ADC_CLK);
/* ADC校准 */
adc_calibration_enable(ADC0);
/* 配置ADC模式为单次转换模式 */
adc_mode_config(ADC_MODE_SINGLE, ADC_SCAN_DISABLE, ADC_CONTINUOUS_MODE_DISABLE, ADC_ALIGN_RIGHT);
/* 配置ADC通道 */
adc_channel_length_config(ADC_REGULAR_CHANNEL, 1);
adc_regular_channel_config(0, ADC_CHANNEL, ADC_SAMPLETIME_55POINT5);
/* 使能ADC */
adc_enable(ADC0);
}
uint16_t adc_get_value(void)
{
/* 启动ADC转换 */
adc_software_trigger_enable(ADC0, ADC_REGULAR_CHANNEL);
/* 等待转换完成 */
while(!adc_flag_get(ADC0, ADC_FLAG_EOC));
/* 读取转换结果 */
return adc_regular_data_read(ADC0);
}
int main(void)
{
uint16_t adc_value;
/* 配置ADC */
adc_config();
/* 循环读取ADC值并输出 */
while(1)
{
adc_value = adc_get_value();
printf("ADC value: %d\n", adc_value);
}
}
```
阅读全文