
STM32H723 Waveforms 上位机
基于 PyQt6 的 STM32H723 多功能波形发生器上位机,集成波形时序编辑、ADC 多通道采集、SPI 寄存器配置与 DAC 电压控制,支持串口通信与 Excel 数据导入导出。
- STM32H723ZGT6
- 串口转 USB 模块
- Python 3.10+
- PyQt6
- pyserial
- pyqtgraph
- openpyxl
- PyInstaller
项目概述
本项目是一款为 STM32H723ZGT6 微控制器配套开发的多功能上位机软件,基于 PyQt6 构建图形界面,通过串口与下位机进行自定义二进制帧协议通信。应用集成了波形时序编辑器、ADC 多通道采集、SPI 寄存器批量写入、DAC 电压输出控制与快照采集五大功能模块,覆盖了嵌入式开发调试中常见的外设测试需求。
核心特性:
| 模块 | 功能 | |------|------| | 波形发生器 | 5 通道时序规则编辑,实时预览,单周期/连续播放 | | ADC 采集 | 3 通道同步采集,支持连续与单次 Burst 模式 | | SPI 面板 | 寄存器批量写入,多预设管理,Excel 导入导出 | | DAC 控制 | 12-bit 精度电压输出,滑块 + 输入框双模式 | | 快照采集 | PA6/PA7 模拟 + CLK/XYNC 数字同步采集,含像素映射导出 |
系统架构
┌─────────────────────────────────────────────────────┐
│ PyQt6 主窗口 │
│ ┌───────────┐ ┌───────────┐ ┌───────────────────┐ │
│ │ 波形面板 │ │ SPI 面板 │ │ ADC 面板 │ │
│ │ WavePanel │ │ SpiPanel │ │ AdcPanel │ │
│ └─────┬─────┘ └─────┬─────┘ └────────┬──────────┘ │
│ │ │ │ │
│ ┌─────┴─────────────┴────────────────┴──────────┐ │
│ │ SerialLink (串口通信层) │ │
│ │ Reader Thread → Frame Queue → Processor │ │
│ └─────────────────────┬─────────────────────────┘ │
│ │ │
└────────────────────────┼────────────────────────────┘
│ USB-Serial
▼
┌─────────────────────┐
│ STM32H723ZGT6 MCU │
│ 自定义二进制帧协议 │
└─────────────────────┘
通信协议设计
采用自定义二进制帧协议,帧结构如下:
┌──────┬──────┬────────┬─────────┬──────┬──────┐
│ SOF │ CMD │ Length │ Payload │ CRC8 │ EOF │
│ 2B │ 1B │ 2B │ N bytes │ 1B │ 1B │
│ 0xA5 │ │ LE │ │ │ 0x0A │
│ 0x5A │ │ │ │ │ │
└──────┴──────┴────────┴─────────┴──────┴──────┘
主要命令字:
| 命令码 | 方向 | 功能 | |--------|------|------| | 0x01 | Host→MCU | 波形配置(采样率、点数、通道掩码) | | 0x02 | Host→MCU | 波形数据(BSRR 位掩码数组) | | 0x03 | Host→MCU | 波形控制(开始/停止/单次触发) | | 0x10 | Host→MCU | ADC 配置 | | 0x12 | MCU→Host | ADC 采集数据 | | 0x20 | Host→MCU | SPI 配置 | | 0x21 | Host→MCU | SPI 寄存器写入 | | 0x30 | Host→MCU | DAC 输出值 |
通信层采用双线程架构:Reader 线程只负责从串口读取字节并解析帧,解析后的帧推入线程安全队列;Processor 线程从队列消费帧并触发回调。这种设计避免了 UI 线程阻塞导致串口缓冲区溢出的问题。
功能模块详解
波形时序编辑器
支持 5 个 GPIO 通道(XYNC / SCLK / SH_R / SH_S / RST)的时序规则编辑:
- 图形化规则编辑:指定触发边沿序号、新电平状态、脉宽(CLK 周期数)
- 实时波形预览:基于 pyqtgraph 的多通道波形显示,支持缩放与平移
- 模式编辑器:所有通道可在表格中直接编辑,所见即所得
- 模板系统:常用时序配置可保存/加载为模板
- Excel 导入导出:时序规则支持与 Excel 互转,方便跨团队协作
ADC 多通道采集
- 3 通道同步采集(PA6 / PA7 / PC4),独立 Y 轴显示
- 支持连续采集与单次 Burst 模式
- 采集数据自动换算为电压值(12-bit, 3.3V 参考)
- 配置持久化至 JSON 文件,兼容源码运行与 PyInstaller 打包两种场景
SPI 寄存器面板
- 可配置 CPOL / CPHA / 波特率分频 / 帧位宽
- 支持 8-bit 与 16-bit 寄存器数据宽度
- 多预设管理:创建、切换、保存命名预设
- 批量写入选中的寄存器,带应答校验
DAC 电压控制
- 12-bit 精度(0~4095),对应 0~3.3V 输出
- 滑块 + 数值输入框双模式控制
- 实时显示当前 DAC 值与对应电压
技术亮点
- 线程安全的串口通信:Reader/Processor 双线程 + 帧队列解耦,队列满时丢弃旧帧而非阻塞读取
- CRC8 校验:每帧附带 CRC8 校验,保证数据完整性
- PyInstaller 兼容:配置文件路径自动适配源码运行与 EXE 打包两种场景
- 实时波形预览:基于 pyqtgraph 的高性能波形渲染,支持 Ctrl+滚轮缩放
- 模板系统:波形时序配置可序列化为 JSON 模板,方便复用与分享