# dap-flasher **Repository Path**: michaelhyg/dap-flasher ## Basic Information - **Project Name**: dap-flasher - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-22 - **Last Updated**: 2026-06-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DAPLink 下载器 + 串口调试助手 这是一个基于 `Qt Widgets` 的 DAPLink 上位机工程,当前实现的是 `P0` 阶段能力,并为后续 `P1/P2` 扩展预留了分层结构。 ## 当前已实现 - DAPLink 设备自动检测 - 多个 DAPLink/CMSIS-DAP 设备枚举与下拉选择,设备检测优先借用 pyOCD 枚举并提供系统探测兜底 - 设备列表手动刷新,避免后台频繁调用 `pyocd list` 影响串口接收流畅度 - HEX / BIN / ELF 固件文件选择 - 可编辑的 MCU target 输入/下拉框 - BIN 基地址输入 - 调用 `OpenOCD` 的一键下载,默认使用 CMSIS-DAPv2 bulk + SWD - 下载中状态切换与停止 - 日志实时输出 - 下载结果提示 - 基于输出关键字的伪进度显示 - 最近一次固件路径持久化 - 独立“DAP 下载 / 串口调试”页签,下载和串口调试不混在同一个界面 - 串口调试:串口刷新、打开/关闭、波特率/数据位/校验/停止位/流控配置 - 串口调试:文本/HEX 收发、CRLF 追加、接收时间戳、DTR/RTS 控制、RX/TX 计数、接收行数统计 - 串口调试:接收窗口保存支持记住上次保存目录 ## 当前架构 ```text MainWindow ├── DAP 下载页 │ ├── DeviceManager │ └── DownloadManager │ └── IDownloadBackend │ └── OpenOcdBackend └── 串口调试页 └── SerialConsoleWidget └── QSerialPort ``` ## 目录结构 ```text src/ main.cpp MainWindow.* SerialConsoleWidget.* DownloadManager.* DeviceManager.* IDownloadBackend.h OpenOcdBackend.* OpenOcdTool.* PyOcdBackend.* PyOcdTool.* AppState.h DownloadTypes.h docs/ DAPLink_Qt上位机产品规划文档.md ``` ## 构建要求 - Qt 5.12+ 或 Qt 6.x - Qt SerialPort 模块,qmake 工程中已加入 `QT += serialport`,CMake 工程中已链接 `Qt::SerialPort` - CMake 3.16+ - 编译器:MSVC / MinGW / Clang 任一可用 - 运行环境中可执行 `openocd`,或已安装 xPack OpenOCD 的 WinGet 包 - `pyocd` 可选,仅用于辅助枚举 CMSIS-DAP 设备;不可用时会继续尝试盘符、USB、PnP 等系统探测方式 ## 构建示例 ```powershell cmake -S . -B build cmake --build build ``` 当前环境也可直接使用 Qt 自带的 `qmake`: ```powershell powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\build.ps1 -Rebuild ``` `build.ps1` 会重新生成 qmake 工程并检查 `qmake` / `mingw32-make` 的退出码。Windows 图标资源使用手写 `RC_FILE` 和相对路径,避免中文工程路径被 `windres` 解析成 `dap???` 导致资源编译失败。 如果需要把 Qt 运行库部署到输出目录,可执行: ```powershell C:\Qt\Qt5.12.0\5.12.0\mingw73_64\bin\windeployqt.exe --release --no-translations .\release\DapDownloader.exe ``` ## 使用说明 1. 连接 DAPLink 设备。 2. 启动程序,确认界面显示设备已连接。 3. 如果插入多个 DAPLink/CMSIS-DAP,在 `DAPLink 设备` 下拉框中选择要使用的探针;插拔设备后点击旁边的“刷新”重新枚举。 4. 选择 `.hex / .bin / .elf` 固件。 5. 如有需要,填写 OpenOCD target 配置名;留空时默认使用 `target/stm32h7x.cfg`。如果填写 `stm32h7...` 型号,会自动映射到 `target/stm32h7x.cfg`。 6. 如果下载的是 `bin`,填写写入基地址,例如 `0x08000000`。 7. 点击“开始下载”。 8. 通过日志窗口查看详细过程。 9. 切换到“串口调试”页签,可以独立打开串口进行日志查看或命令收发。 10. 在串口调试页保存接收窗口时,程序会记住上次保存目录,便于连续导出日志。 ## OpenOCD 下载参数 - 下载后端使用 `openocd`,默认命令链为 `adapter driver cmsis-dap`、`cmsis-dap backend usb_bulk`、`transport select swd`、`target/stm32h7x.cfg`。 - 默认 SWD 速度为 `1000 kHz`,界面中的 `1M / 2M / 4M` 会自动转换为 OpenOCD 的 kHz 数值;通信不稳定时建议保持 `1M`。 - 可通过环境变量覆盖默认值:`OPENOCD_EXECUTABLE` 指定 OpenOCD 程序路径,`OPENOCD_ADAPTER_SPEED` 指定默认 kHz 速度,`OPENOCD_TARGET_CFG` 指定默认 target cfg。 - BIN 文件会传入界面填写的基地址并按 `bin` 格式写入/校验;HEX / ELF 文件使用文件内置地址信息。 - pyOCD 仍保留为设备枚举来源之一,不参与烧录流程。 ## 已知限制 - 多设备选择在 pyOCD 可用时会使用 `pyocd list -p -H` 返回的探针 UID;pyOCD 不可用时依赖系统探测结果。 - 当前下载固定使用 `OpenOCD` 后端,暂未在 UI 中提供 pyOCD/OpenOCD 后端切换。 - OpenOCD 已执行写入后的 `verify_image` 和下载后的 reset;更细粒度的 verify/reset 开关暂未在 UI 中开放。