1. 项目概述
在嵌入式系统开发中,模拟信号采集是最基础也是最重要的功能之一。STM32系列MCU内置的高精度ADC模块为开发者提供了便捷的模拟信号采集解决方案。本实验基于STM32F4系列芯片,通过独立ADC模式配合中断服务机制,实现了对板载电位器电压的精确采集与实时显示。
这个实验的核心价值在于:
- 掌握STM32 ADC模块的基本配置方法
- 理解中断机制在数据采集中的应用
- 构建完整的信号采集-处理-显示链路
- 为后续更复杂的多通道采集、DMA传输等高级应用打下基础
实验最终实现的效果是:旋转开发板上的电位器旋钮时,系统能实时采集电压变化,并通过串口将原始ADC值和换算后的实际电压值输出到PC端串口调试助手。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件设计解析
2.1 电位器电路原理
开发板上采用的贴片滑动变阻器(电位器)是一种典型的分压电路。其工作原理如下:
code复制3.3V ---[固定电阻]---[滑动触点]---GND
|___________|
输出
当旋转旋钮时,滑动触点的位置改变,导致输出端对地的电阻值发生变化。根据欧姆定律Vout = Vin × (R2/(R1+R2)),输出电压会在0-3.3V之间线性变化。
2.2 STM32F4 ADC接口特性
STM32F4的ADC模块具有以下关键特性:
- 12位分辨率(4096个量化等级)
- 0-3.3V输入电压范围
- 最大2.4MSPS的采样率(在快速模式下)
- 多达19个复用通道(包括内部温度传感器)
在本实验中,我们使用ADC1的通道8(对应GPIO PB0引脚)作为信号输入。硬件连接上需要注意:
- 确保跳帽正确连接电位器输出到PB0
- 避免在ADC输入引脚上使用上拉/下拉电阻
- 保证电源稳定,建议在VREF+引脚添加0.1μF去耦电容
3. 软件架构设计
3.1 整体程序流程图
plaintext复制开始
├─ 初始化系统时钟
├─ 初始化调试串口
├─ 初始化ADC GPIO
├─ 配置ADC工作模式
├─ 配置ADC中断
└─ 进入主循环
├─ 等待ADC中断
├─ 中断服务程序读取ADC值
└─ 主循环计算并输出电压值
3.2 关键功能模块划分
-
硬件抽象层:
- GPIO配置(模拟输入模式)
- ADC时钟使能
- 中断控制器配置
-
驱动层:
- ADC工作模式配置
- 中断服务程序
- 数据读取接口
-
应用层:
- 电压值计算
- 串口输出格式化
- 用户交互逻辑
4. 核心代码实现
4.1 ADC初始化详解
4.1.1 GPIO配置
c复制static void Rheostat_ADC_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
// 使能GPIOB时钟
RCC_AHB1PeriphClockCmd(RHEOSTAT_ADC_GPIO_CLK, ENABLE);
// 配置PB0为模拟输入
GPIO_InitStructure.GPIO_Pin = RHEOSTAT_ADC_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(RHEOSTAT_ADC_GPIO_PORT, &GPIO_InitStructure);
}
关键点说明:
- 必须将引脚配置为模拟输入模式(GPIO_Mode_AIN)
- 不需要上拉/下拉电阻(GPIO_PuPd_NOPULL)
- 需要先使能对应GPIO端
