11.4 ADC项目:单通道电压采样
# 11.4 ADC项目:单通道电压采样
本实验通过STM32的ADC模块实现单通道电压采集,结合OLED实时显示电压值,覆盖独立模式与连续模式两种采样方式。核心功能:
- 独立模式:手动触发单次采样,适用于低功耗或精准触发场景。
- 连续模式:自动循环采样,适合实时监测动态信号。
# 11.4.1 硬件电路设计
# 电位器连接与ADC通道
- 电位器电路:开发板集成滑动变阻器,动触点连接至ADC1通道6(PA6),输出0~3.3V模拟电压。
- 电压转换公式

# 11.4.2 STM32CubeMX配置
# 1. 基础配置
- 工程设置:芯片型号
STM32F103C8T6
,主频72MHz,调试接口SWD。 - ADC1配置:
- 通道:PA6(ADC1_IN6)
- 分辨率:12位
- 采样时间:239.5 Cycles

# 2. I²C配置(OLED驱动)
- 模式:Speed Mode
- 引脚:PB6(SCL)/PB7(SDA)
# 11.4.3 软件设计
# 独立单通道模式
# 1. ADC初始化(代码清单11-3)
static void MX_ADC1_Init(void) {
hadc1.Instance = ADC1;
hadc1.Init.Resolution = ADC_RESOLUTION_12B; // 12位分辨率
hadc1.Init.ScanConvMode = DISABLE; // 禁用扫描模式
hadc1.Init.ContinuousConvMode = DISABLE; // 单次转换模式
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; // 软件触发
// ...其他参数保持默认
if (HAL_ADC_Init(&hadc1) != HAL_OK) {
Error_Handler();
}
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 2. 主循环采样与显示(代码清单11-4)
while (1) {
HAL_ADC_Start(&hadc1); // 启动转换
HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY); // 阻塞等待
uint32_t value = HAL_ADC_GetValue(&hadc1); // 读取原始值
float voltage = (value / 4095.0) * 3.3; // 计算电压
sprintf(Message, "ADC: %d %.2fV", value, voltage);
OLED_NewFrame();
OLED_PrintString(0, 0, Message, &font16x16, OLED_COLOR_NORMAL);
OLED_ShowFrame();
HAL_Delay(500); // 延时500ms
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 连续单通道模式
# 1. 配置差异
- CubeMX设置:启用
Continuous Conversion Mode
。<img src="/images/11/media/image5.png" alt="使能连续转换模式" style="width: 75%; height: auto; display: block; margin: 0 auto;"/>
# 2. 主循环逻辑(代码清单11-6)
while (1) {
uint32_t value = HAL_ADC_GetValue(&hadc1); // 直接读取数据
float voltage = (value / 4095.0) * 3.3; // 计算电压
sprintf(Message, "ADC: %d %.2fV", value, voltage);
OLED_NewFrame();
OLED_PrintString(0, 0, Message, &font16x16, OLED_COLOR_NORMAL);
OLED_ShowFrame();
HAL_Delay(500); // 刷新间隔
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 11.4.4 下载验证
# 步骤与现象
- 硬件连接:
- 确保电位器正确接入PA6,OLED通过I²C连接。
- 烧录程序:
- 独立模式:需手动触发采样(调用
HAL_ADC_Start
)。 - 连续模式:上电后自动开始采样。
- 独立模式:需手动触发采样(调用
- 功能验证:
- 旋转电位器,OLED实时显示ADC原始值及电压(如
ADC: 1899 1.53V
)。
- 旋转电位器,OLED实时显示ADC原始值及电压(如

关键说明:
- ADC参考电压需与实际供电电压一致(默认3.3V)。
- 浮点运算需启用FPU支持(CubeMX中配置)。
- 连续模式无需频繁触发,适合实时监测场景。