dsh-plugin-stm32-workbench:在 DSH 会话里做 STM32 编译、烧录与调试

前言

在 DSH 里做 STM32 开发,常见做法是:智能体靠 shell 或手写 HTTP 去调 Keil、OpenOCD、串口工具,界面和 agent 各走一条路,状态容易对不上。dsh-plugin-stm32-workbench 把「单片机工作台」做成 DSH 插件:选工作区、进入「单片机模式」会话后,工作台挂在会话视图里,编译、烧录、引脚与串口与 mcu 工具共用同一套后端 API。下面介绍它是什么、能做什么、如何安装与使用。

这是什么

dsh-plugin-stm32-workbench(仓库 Airls-bubble/dsh-plugin-stm32-workbench)由维护者 Airls-bubble 发布,在 SkillHub 目录中归类为工作流。当前插件版本 0.4.0,README 写明适配 DSH 0.2.1-rc.2(2026-10-19/20)。

定位一句话:DSH 内建的 STM32 工作台——Keil AC5 编译、ST-Link/OpenOCD 烧录、引脚规划、串口与功能契约,面向在 Harness 里写固件、又要让 agent 直接调用同一套能力的场景。

在 DSH 里怎么挂载

第一版把面板注册进 conversation.input.dock,会导致每个对话下面都出现工作台;当前实现参考 dsh-openwrite 的模式:

  1. 侧栏底部入口「STM32 工作台」(插槽 id stm32.launch)。
  2. 点击后选工程目录 → 建工作区与会话,并通过 agentPresets 选中预设 id mcu(「单片机模式」由插件 ctx.agentPresets.register() 注册,不依赖手写 profile 补丁)。
  3. 工作台注册为 conversation.view,由 watchScope 门控:仅当主视图会话的 projectionValues.agentPreset 为 mcu 时才挂载。

半边职责划分如下:

半边 文件 职责
宿主 index.js 注册「单片机模式」预设;拉起/停止 MCU 后端;注册 /mcu/state、/mcu/start、/mcu/stop 及 /mcu/api/* 代理
客户端 client.js 侧栏入口、选工作区对话框;门控下的工作台(引脚图、构建台、串口、计算器等)
后端 backend/ Keil AC5 编译、OpenOCD + ST-Link 烧录、串口桥;自带测试固件与 BSP;便携 OpenOCD 由脚本按需下载

会话一旦处于单片机模式,agent 可通过宿主注册的 mcu 工具(README 记载 18 个 action)直接编译、烧录与读串口,与界面共用 /mcu 下的路由。

核心功能

构建与烧录

  • 后端使用 Keil AC5 工具链(armcc → armasm → armlink → fromelf),并支持打开用户自己的 .uvprojx 工程;README 记载产物可与 Keil UV4 逐字节一致(含真实毕设工程验证示例)。
  • 烧录路径为 OpenOCD + ST-Link;便携 OpenOCD 不随仓库分发,需本地准备。
  • 仓库自带 firmware/projects 等测试工程,也可只编插件包内工程做冒烟。

Keil 工程接入(HTTP API)

用户工程接入后,后端提供例如(路径经 /mcu 代理到后端 /api):

  • POST /api/keil/open — 打开工程并在进程内保持状态
  • GET /api/keil/state — 当前工程摘要
  • GET /api/keil/pins — 静态解析引脚配置
  • POST /api/keil/registers — 寄存器与「源码分析 vs 芯片实际」对照
  • POST /api/keil/build — 按工程编译,NDJSON 流式日志

配套模块包括 uvprojx.js(解析工程)、keil-build.js(驱动工具链)、pinmap.js(引脚静态分析)、regread.js(SWD 读寄存器)等。

智能体工具 mcu

宿主在 index.js 注册一个工具、多个 action,README 列出的能力包括:status、open、scan、files、read、write、build、flash、size、pins、regs、chip、reset、spec、symbols、readmem、gfx、watch 等。0.3.0 起增加 symbols / readmem / gfx;0.4.0 增加 watch 并面向「AI 省 token」收紧输出形态(如 status 一次拿全貌、gfx 基线差异等)。

界面与 agent 统一走同一套 API,避免「面板数字与脚本结果不一致」的双轨问题。

工作台 UI

客户端提供引脚图、构建台、串口等面板;设计约束包括:禁止 iframe、须用 DSH 主题令牌、禁止 import Harness 客户端 primitives 包,资源注册需用 effect 管理生命周期(详见仓库 README)。

安装与启用

插件本体约 1.8 MB 代码(不含便携 OpenOCD)。从 GitHub 取得源码后,先准备 OpenOCD(仓库不提交约 7.6 MB 的第三方二进制):

powershell -ExecutionPolicy Bypass -File backend\scripts\fetch-openocd.ps1

脚本从官方 xPack release 下载并校验 sha256,一般只需执行一次。

安装到 DSH 使用插件管理器命令(路径换成你本机放置插件的绝对路径):

plugin_manager: install_bundle target=<你放本插件的绝对路径>

README 强调:改动插件代码后必须重启 DSH;装载器不会热替换已装载包代代,客户端资源也可能需要刷新页面。

生效后预期现象:

  • 侧栏底部出现「STM32 工作台」;
  • 模式选择器中出现「单片机模式」(由插件注册)。

环境要求:package.json 中 engines.node 为 >=22。换机安装、前置条件与数据目录说明见仓库 PORTING.md。

禁用/回滚:

plugin_manager: set_bundle enabled=false target=dsh-plugin-stm32-workbench

典型用法

从入口进入单片机会话

  1. 点击侧栏底部「STM32 工作台」。
  2. 选择 Keil 工程所在目录(或插件自带测试工程目录)作为工作区。
  3. 进入新会话后确认 agent 预设为「单片机模式」(mcu)。
  4. 在会话视图中的工作台进行构建、烧录、串口观测;或在对话中让 agent 调用 mcu 工具的 build、flash、status 等 action。

验证 Keil 构建一致性(仓库给出的可复现思路)

README 建议用 Keil UV4 在临时副本上做参照构建,再与插件产出比对 hex:仅 Keil 有 / 仅插件有 / 公共地址字节差异均为 0 即表示内容一致。差异定位可借助仓库内 scripts/keil-param-experiment.js、scripts/keil-symdiff.js。

数据落在哪里

运行期数据不写入插件安装目录(设计目标:拷走插件目录应为干净副本):

  • 工程相关:<Keil 工程目录>/.dsh-mcu/(构建缓存、日志、备份等;工程只读时会退到 ~/.dsh/mcu/projects/<路径哈希>/)。
  • 跨工程记忆:~/.dsh/mcu/recent.json(默认 DSH_HOME 为 ~/.dsh)。

适用场景与注意

适合谁:已在用 DSH 做嵌入式或课程/毕设类 STM32(README 以 STM32F103 生态为主)开发,希望工作台、串口与 agent 工具链合一,且愿意在本机安装 Keil AC5、ST-Link 与按需下载的 OpenOCD。

权限与安全:插件以当前 DSH 进程权限运行后端(编译、写工程旁路目录、访问调试器)。安装前应阅读仓库源码、MIT 许可证 与 THIRD_PARTY_NOTICES.md(含 CMSIS、ST 标准外设库、GPLv2 的 xPack OpenOCD 等)。

实测限制(README「待验证」如实记录):无 ST-Link 时界面会显示未检测到设备;烧录与串口需实物验证。若侧栏无入口或工作台未挂载,可查浏览器控制台是否有 conversation.view 插槽崩溃或 [stm32-workbench] 警告。

生态说明:DSH 社区插件目录在 SkillHub,与 DeepSeek / 幻方无官方从属关系;本文事实以仓库 README 与 package.json 为准。

结尾

dsh-plugin-stm32-workbench 把 STM32 的编译、烧录、引脚与串口收进 DSH 会话与 mcu 工具,减少「界面一套、agent 另一套」的割裂。目录页:SkillHub - dsh-plugin-stm32-workbench;源码与完整说明:GitHub - Airls-bubble/dsh-plugin-stm32-workbench。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye