GD32F103实战:用ADC+DMA构建一个简易多路电压监测仪(OLED显示)
在嵌入式开发中,实时监测多路电压信号是一个常见需求。本文将带你从零开始,基于GD32F103系列单片机,利用其内置的ADC和DMA功能,构建一个实用的多路电压监测系统,并通过OLED显示屏直观展示测量结果。
1. 项目需求分析与硬件设计
电压监测仪的核心功能是实时采集多路模拟电压信号,并将其转换为数字值进行处理和显示。我们选择GD32F103RCT6作为主控芯片,主要基于以下考虑:
- 内置3个12位ADC,支持多通道扫描模式
- 具备DMA控制器,可减轻CPU负担
- 性价比高,开发资源丰富
硬件连接方案:
code复制电位器1 → PA4 (ADC0_CH4)
电位器2 → PA5 (ADC0_CH5)
电位器3 → PA6 (ADC0_CH6)
OLED显示屏 → I2C接口(PB8/PB9)
提示:实际应用中,ADC输入引脚可连接各种传感器输出,如温度传感器、光照传感器等,只需输出在0-3.3V范围内即可。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 关键外设配置与原理
2.1 ADC模块配置要点
GD32F103的ADC主要参数:
| 参数 | 规格 |
|---|---|
| 分辨率 | 12位 |
| 转换时间 | 1μs @ 14MHz |
| 输入电压范围 | 0-3.3V |
| 通道数 | 16个外部通道 |
配置ADC时需特别注意时钟设置:
c复制rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV6); // ADC时钟=APB2/6=12MHz
adc_special_function_config(ADC0, ADC_SCAN_MODE, ENABLE);
adc_special_function_config(ADC0, ADC_CONTINUOUS_MODE, ENABLE);
2.2 DMA传输机制
DMA配置的核心参数:
- 传输方向:外设→内存
- 数据宽度:32位
- 循环模式:使能
- 优先级:中等
典型配置代码:
c复制dma_init_ADC0.direction = DMA_PERIPHERAL_TO_MEMORY;
dma_ini
