|
基于正点原子潘多拉STM32L496开发板的ADC DMA采集与USB CDC数据传输示例项目。
项目简介
本项目实现了ADC单通道连续采集,通过DMA双缓冲模式进行数据传输,并使用JustFloat协议通过USB CDC(虚拟串口)将采集的波形数据实时传输到PC端。 主要功能: - ADC定时器触发采集
- DMA双缓冲传输
- USB CDC虚拟串口数据传输
- JustFloat协议数据格式
核心特性
- 定时器触发: TIM1定时器触发ADC采集,采样率稳定
- DMA 双缓冲模式: 自动循环接收数据,无需 CPU 干预
- JustFloat 协议: 标准化的float数据传输格式,便于PC端解析
- USB CDC 虚拟串口: 免驱动的USB通信方式
- 空闲中断: 检测一帧数据结束,实现可变长数据接收
- 批量操作: 中断中批量写入数据到用户队列,主循环中批量读取处理
硬件平台| 项目 | 说明 | | 开发板 | 正点原子潘多拉 STM32L496 开发板 | | MCU | STM32L496VET6 | | 主频 | 80MHz (PLL倍频) |
引脚定义| 功能 | 引脚 | 备注 | | ADC1_IN3 | PC2 | 模拟输入通道3 | | ADC1_IN9 | PA4 | 模拟输入通道9 | | DEBUG | PB11 | 调试指示输出(DMA缓冲区切换) | | USB DM | PA11 | USB数据负 | | USB DP | PA12 | USB数据正 |
技术细节
ADC配置
- 分辨率: 12位 (0-4095)
- 参考电压: 3.3V
- 采样通道: ADC1_IN3 (PC2)、ADC1_IN9 (PA4)
- 触发方式: TIM1_TRGO 上升沿触发
- 采样时间: 2.5个ADC时钟周期
- DMA模式: 循环模式,双缓冲
DMA双缓冲机制
- 半传输中断 (HT): 前半缓冲区填满,处理前256个样本
- 传输完成中断 (TC): 后半缓冲区填满,处理后256个样本
- 缓冲区大小: 总共512个样本 (uint16_t)
JustFloat数据格式
[float电压值(4字节)] [同步字(4字节)]
- float数据: IEEE 754格式的float电压值(单位:V)
- 同步字: 0x00 0x00 0x80 0x7F
- 协议开销: 每个样本点8字节(4字节数据 + 4字节同步字)
传输速率限制
- USB CDC 最大速率: 1 MByte/s
- JustFloat 协议开销: 每包需要4字节的协议同步尾巴
- 基于USB HS CDC单通道最大传输速率: 125 kSa/s = (1MB/s传输速率 / (4字节float + 4字节同步字))
⚠️ 关于ADC参考电压的说明 本示例代码使用固定的 3.3V 作为ADC参考电压进行计算,这是为了保持代码简洁,便于快速理解和演示ADC DMA与USB传输的核心功能。 在实际工程应用中,需要注意: - 电源电压波动:实际系统的3.3V电源会因负载、温度等因素产生波
- 测量误差:使用固定参考电压会导致ADC测量结果出现系统性偏差
- 推荐做法:对于精度要求较高的应用,建议使用STM32内部的 VREFINT(内部参考电压通道)进行实时校准:
- 读取内部VREFINT通道的ADC
- 根据VREFINT的实际值反推出当前的VDDA电
- 使用计算得到的VDDA_actual替换固定的3.3V进行电压转换
这样可以消除电源电压波动带来的测量误差,显著提高ADC测量精度。
使用说明
编译与下载
- 使用VSCODE打开项目
- 使用 Cmake + Gcc 编译项目
- 通过ST-Link连接开发板
- 下载程序到开发板
- 用USB线连接开发板到PC
波形观察
推荐使用 JustFloat Web Oscilloscope 在线示波器工具观察波形: 在线使用: 使用步骤: 项目结构
开发环境
常见问题
Q: 波形显示不正常?
A: 确认模拟信号连接到PC2(ADC1_IN3)引脚,电压范围0-3.3V。 Q: 采样率如何调整?
采样率计算说明: - 触发方式: TIM1定时器每次触发,ADC会对规则组中的所有通道依次完成一次采样转换
- 示例计算:
- 配置了2个规则通道(IN3、IN9)
- 如果定时器触发频率为50kHz
- 那么每个通道的采样率都是50kHz(总采样率为50kHz × 2 = 100kSa/s)
计算公式: 定时器触发频率 = 单通道采样率TIM1_ARR = (TIM1时钟频率 / 预分频系数) / 目标触发频率 - 1
使用步骤:
获取最新源代码:游客,本帖隐藏的内容需要积分高于 1 才可浏览,您当前积分为 0
论坛下载(可能非最新,同时受到论坛上传大小限制,压缩包砍了部分非必要资料):
STM32L496_ADC_DMA_MuChannel_Sample-master.7z
(14.25 MB, 下载次数: 0)
|