跨平台 MCU 烧录图形化工具,基于 pyOCD + Flet
Project description
MCU Cube Programmer
一个
pip install,任意 Cortex-M 芯片,三种桌面系统 — 开源跨平台 MCU 烧录 GUI
当前版本:v0.1.0
什么时候需要它?
- 固件验证 — 手上有
.hex/.bin文件,想快速烧进去看效果,不想装 1GB 的 STM32CubeProgrammer - 多厂商切换 — 项目同时用 STM32 和 GD32,需要一个工具同时支持两种芯片
- 创客/教育 — 不想配 PlatformIO 项目,想开了就能用,换个芯片也不用换工具
竞品对比
| MCU Cube Programmer | STM32CubeProgrammer | OpenOCD | pyOCD CLI | Flash Magic | |
|---|---|---|---|---|---|
| GUI | 现代 Flet/Flutter | 传统 Qt | 无 | 无 | 传统 Win32 |
| 许可证 | Apache 2.0 (开源) | Freeware | GPLv2 | Apache 2.0 | 免费/付费 |
| 平台 | Win/Mac/Linux | Win/Mac/Linux | Win/Mac/Linux | Win/Mac/Linux | Windows 独占 |
| 芯片支持 | 任意 Cortex-M | STM32 独占 | ARM/RISC-V/MIPS | 任意 Cortex-M | NXP 独占 |
| 探针 | ST-Link/J-Link/DAPLink | ST-Link/J-Link | 50+ 种 | ST-Link/J-Link/DAPLink | NXP 桥接器 |
| 安装大小 | ~300 KB | ~1 GB | ~50 MB | ~10 MB | ~30 MB |
| 调试 | SWO 输出 | 寄存器/SWV | 完整 GDB | 完整 GDB | 无 |
| 上手难度 | 低 | 中 | 高 | 中 | 低 |
核心差异: MCU Cube Programmer 是唯一的同时满足「现代 GUI + 开源 + 多厂商 + 跨平台」的 MCU 烧录工具。
项目数据
特性
- 跨平台 — Windows / macOS / Linux 桌面应用 + Web 模式(浏览器访问)
- 多探针 — ST-Link (v2/v3)、CMSIS-DAP / DAPLink、J-Link
- 多芯片 — STM32 全系列、GD32、NXP、Nordic、Raspberry Pi 等 600+ 款
- SWO 串行调试输出 — ITM/SWO 实时日志捕获
- CMSIS-Pack 扩展 — 安装官方 Pack 支持更多芯片(如 GD32)
- 精密仪器主题 — PCB 绿 + 铜箔走线配色,深色终端风格
- 配置持久化 — 自动记住上次的探针/芯片/固件选择
💡 演示截图录屏尚未收录。如需查看界面布局,见下方的 ASCII 界面示意图。
界面
┌───────────────────────────────────────────────────────────┐
│ [Flash] [探针] [SWO] [日志] [设置] │
├───────────────────────────────────────────────────────────┤
│ 探针 [ST-Link/V2 ▼] [刷新] │
│ 厂商 [ST ▼] 芯片 [输入芯片名搜索... ▼] [安装 Pack] │
│ 固件 [选择固件] path/to/firmware.hex │
│ [全片擦除] [开始烧录] [取消] │
│ ██████████████░░░░░░░░ 65% │
├───────────────────────────────────────────────────────────┤
│ [12:34:56] INFO 固件: 13,312 字节, 地址 0x08000000 │
│ [12:34:56] INFO Flash: 1024 KB, 扇区 16 KB │
│ [12:34:56] INFO 擦除扇区 0-0 (1个) │
│ [12:34:58] DONE 烧录完成: 扇区 0-0 (1.8s) │
└───────────────────────────────────────────────────────────┘
安装
环境要求
- Python 3.10+
安装步骤
git clone <repo-url>
cd mcu-cube-programmer
pip install -r requirements.txt
硬件驱动
| 平台 | 说明 |
|---|---|
| Windows | 用 Zadig 给 DAPLink/ST-Link 安装 WinUSB 驱动 |
| Linux | 安装 udev rules:wget https://github.com/pyocd/pyOCD/raw/main/udev/50-pyocd.rules -O /etc/udev/rules.d/50-pyocd.rules |
| macOS | brew install libusb |
| J-Link | 安装 SEGGER J-Link 驱动 |
使用
桌面模式
python src/main.py
Web 模式
python src/main.py --web
# 浏览器访问 http://localhost:8550
其他参数
python src/main.py --web -p 9000 # Web 模式指定端口
工作流程
- 选择探针 — 启动后自动扫描,点击刷新可重新扫描
- 选择芯片 — 先选厂家(ST/GD/NXP…),再输入芯片名搜索
- 选择固件 — 支持
.bin/.hex/.elf/.axf - 开始烧录 — 扇区擦除 + 烧录 + 验证 + 复位
- 查看 SWO — 在 SWO 选项卡中打开串行调试输出
日志示例
════════════════════════════════════════
MCU Cube Programmer v0.0.1 已启动
平台: windows | pyOCD: 可用
检测到 1 个调试探针
已选择探针: STM32 STLink
内置目标: 643 个
已选择芯片: stm32f407zgtx
已选择固件: firmware.hex
════════════════════════════════════════
固件: 13,312 字节 (13.0 KB), 地址 0x08000000-0x08003400
Flash: 1024 KB (Internal Flash), 扇区 16 KB
擦除扇区 0-0 (1个, 各16KB)
烧录完成: 扇区 0-0
验证通过,芯片已复位 (1.8s)
项目结构
src/
├── main.py # 应用入口
├── app.py # App 主类(集成+生命周期)
├── backend/
│ ├── interface.py # BackendABC 抽象接口
│ ├── pyocd_backend.py # pyOCD 后端实现
│ └── error_codes.py # 统一错误码
├── logic/
│ ├── probe_manager.py # 探针扫描/选择
│ ├── target_manager.py # 芯片列表/Pack 管理
│ └── flash_controller.py # 烧录流程编排
├── ui/
│ ├── theme.py # PCB精密仪器配色
│ ├── state.py # AppState 状态机
│ ├── components/ # 可复用 UI 组件
│ │ ├── probe_selector.py
│ │ ├── target_selector.py
│ │ ├── file_picker.py
│ │ ├── flash_panel.py
│ │ └── log_view.py
│ └── tabs/ # 标签页
│ ├── flash_tab.py
│ ├── probe_tab.py
│ ├── swo_tab.py
│ ├── log_tab.py
│ └── settings_tab.py
└── utils/
├── logger.py # 全局日志单例(线程安全)
└── config.py # 配置持久化
tests/
├── conftest.py # pytest 共享 fixtures
├── test_pyocd_backend.py # 后端测试(26 项)
├── test_flash_controller.py # 烧录流程测试(13 项)
├── test_probe_manager.py # 探针管理测试(8 项)
├── test_target_manager.py # 芯片管理测试(14 项)
└── test_logger.py # 日志单例测试(11 项)
技术栈
| 层级 | 技术 | 许可 |
|---|---|---|
| UI 框架 | Flet (Flutter/Material 3) | Apache 2.0 |
| 后端引擎 | pyOCD 0.44+ | Apache 2.0 |
| 语言 | Python 3.9+ | — |
| 打包 | flet build |
BSD-3 |
| 测试 | pytest + pytest-asyncio | MIT |
开发者
运行测试
pip install -e ".[dev]"
pytest tests/ -v
当前测试覆盖:77 项全部通过,覆盖:
PyOCDBackend— 连接、烧录、验证、断开 (26 项)FlashController— 完整流程、进度回调、取消操作 (13 项)ProbeManager— 扫描、选择、刷新 (8 项)TargetManager— 芯片列表、Pack 安装、搜索 (14 项)Logger— 线程安全、缓冲裁剪、回调 (11 项)FlashTask+ProbeSelector等辅助类 (5 项)
设计文档
| Phase | 内容 |
|---|---|
| 0 | 项目骨架、窗口、主题 |
| 1 | 后端封装(ErrorCode + BackendABC + PyOCDBackend) |
| 2 | 逻辑层(ProbeManager + TargetManager + FlashController) |
| 3 | UI 组件(PCB精密仪器风格) |
| 4 | 集成与最终组装 |
License
Apache 2.0
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
mcu_cube_programmer-0.0.1.tar.gz
(49.9 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcu_cube_programmer-0.0.1.tar.gz.
File metadata
- Download URL: mcu_cube_programmer-0.0.1.tar.gz
- Upload date:
- Size: 49.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ef9d4b25bf1125bad51e95029ea138d5624ead8d40b665386fb96f74c5c8d7c2
|
|
| MD5 |
03cf9b5f71a4e53ad1cada92da7dd366
|
|
| BLAKE2b-256 |
4286664bc1b31a18d36386e35f8bb795d61ab1c744bf73616f4a9a819217ac87
|
File details
Details for the file mcu_cube_programmer-0.0.1-py3-none-any.whl.
File metadata
- Download URL: mcu_cube_programmer-0.0.1-py3-none-any.whl
- Upload date:
- Size: 58.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7c9743dfe908d52086852f945658404759b3f147d2315255bac8e9e0d6e71ba9
|
|
| MD5 |
94c0cd5d702294fd5123190de329b579
|
|
| BLAKE2b-256 |
767cf904a482051620ed6f429e1749e4b6f0abaf60aa37bf3f1cb9b503df0ca8
|