起因很简单 从事电力电子软件相关工作,相关的物理量、软件中的过程变量变化速度比较快,算法调试也需要经常改参数,也要看看控制性能怎么样,因此对调试工具的要求还比较多。老办法是写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上跑通了,C2000上也验证了基本功能,说明设计是跨平台的。 发帖目的 不是推销,是想看看大家有没有类似的痛点,或者有没有更好的思路。我自己也是边用边改,欢迎大伙儿试用、吐槽、提Issue。 如果你手头有其他板子,想移植试试,可以看仓库里的 docs/porting.md(正在完善),也可以直接在这帖子下问我,我尽量解答。 仓库地址 F407 demo路径:demos/demo-stm32f407-alientek-discovery-baremetal
已经上传Hex 和DCM ,如果您手上有相关板卡,5分钟即可体验“想看什么就看什么”的酣畅淋漓。 最后 做这个的初衷很简单——省掉重复写上位机的时间,把精力留在调算法上。如果你也讨厌每次改个变量就要同步改上位机代码,或许这个思路值得一试。 欢迎拍砖,欢迎PR。
|