本帖最后由 lhg09 于 2026-9-23 16:12 编辑
起因很简单 从事电力电子软件相关工作,相关的物理量、软件中的过程变量变化速度比较快,算法调试也需要经常改参数,也要看看控制性能怎么样,因此对调试工具的要求还比较多。老办法是写QT上位机,或者用VOFA+改下位机打印格式。 写QT:一两天搭界面定协议,换项目又重写,烦。
用VOFA+:得按它格式改下位机代码,固件升级变量多了,格式又得跟着变。 我就想:能不能让上位机“自动认识”下位机有哪些变量? 换项目时,上位机不动,只换个描述文件就行。 于是做了这个叫 Connecting 的小框架,核心思路是“设备自描述”——工程中集成connecting中间库,注册相关驱动,编译后从ELF文件里抽出变量信息,生成一个DCM描述文件,上位机读它就知道所有变量类型、地址,然后就可以自助定义界面,根据需要采集状态和波形。

工具链的基本工作流程
设备的基本信息,包括软件代码库和提交版本号
读取的基本设备信息
实时波形,可以根据需要选择需要观看的变量
实时刷新变量值,并且可以修改
实时状态
显示相关日志
上位机可以执行下位机开放的服务
用探索者F407跑通了一个Demo 手头正好有正点原子探索者F407,就拿它做了第一个裸机示例。工程在仓库的 demos/demo-stm32f407-alientek-discovery-baremetal 下。 跑通流程很简单:
- 把中间件(middleware)加到工程里,初始化几行代码就行。
- 编译,生成ELF文件。
- 用配套的Python工具从ELF里提取变量信息,生成一个 .dcm 文件。
- 打开PC上位机,导入 .dcm,所有变量自动列出来,勾选想看的就能画波形。
固件升级或新增变量怎么办? 重新编译 → 重新提取DCM → 上位机重新导入。上位机代码完全不用动,也不用对着地址表一个个改。 这个框架并不绑定F407,移植到其他MCU很简单 虽然Demo用的是F407,但中间件的设计跟MCU型号无关,它只依赖最底层的串口或UDP发送函数。 只要你用的MCU能跑C语言、有串口或网络,理论上都能用:
- STM32全系列(F1/F4/H7等)
- GD32、APM32等国产M3/M4
- ESP32(乐鑫)
- TI C2000(DSP)
- 甚至其他ARM或RISC-V平台
移植要做什么? 只需要实现几个底层回调函数(比如发送一个字节、发送一个包),中间件自身不关心硬件细节。仓库里已经准备了STM32的参考移植,后续还会加更多。 另外,DCM提取工具支持 ELF/ MAP / DWARF 等多种调试信息格式,不需要为每个平台单独写解析器。 目前的状态和不足 项目还在持续折腾中,肯定有不少坑:
- Python提取工具依赖本地环境,后续考虑做成独立exe。
- 上位机功能还算基础,高级图表和数据分析还在加。
- 文档写得比较糙,移植说明正在补。
但核心链路已经通了:F407上跑通了,如果您手上有探索者F407 的板子可以直接在下面的gitee 地址中下载hex 和dcm 以及上位机 进行体验。 发帖目的 不是推销,是想看看大家有没有类似的痛点,或者有没有更好的思路。我自己也是边用边改,欢迎大伙儿试用、吐槽、提Issue。
当然了。界面还比较丑,拍砖的时候,请轻一点哈。 如果你手头有其他板子,想移植试试,可以看仓库里的 docs/porting.md(正在完善),也可以直接在这帖子下问我,我尽量解答。 仓库地址 最后 做这个的初衷很简单——省掉重复写上位机的时间,把精力留在调算法上。如果你也讨厌每次改个变量就要同步改上位机代码,或许这个思路值得一试。 欢迎拍砖,欢迎PR。
微信关注公众号:connecting开发者,获取最新信息
|