硬汉嵌入式论坛

 找回密码
 立即注册
查看: 324|回复: 6
收起左侧

[其它] freemaster的COM模式移植到STM32H743/750芯片

[复制链接]

10

主题

46

回帖

76

积分

初级会员

积分
76
发表于 2025-7-31 01:09:34 | 显示全部楼层 |阅读模式
为什么要使用freemaster?
        硬汉哥在专题教程里面对常用的调试工具如J-Scope、RTT进行了对比总结,并且出了专题教程.但是这两者更适合于在前期开发低压产品时,直接使用仿真器进行调试.但如果产品已经在现场使用,不方便拆开接仿真器,只有一路串口或者CAN可以使用怎么办?  或者像变频器或者逆变器这种前期开发直接使用仿真器就有风险,不知道多少人在调试时忘乎所以,断点都忘记取消了,在DEBUG后直通炸管的.或者没用隔离的仿真器,把电脑都烧掉的.再者是大功率机器满载运行时,根本不敢使用仿真器,担心炸鸡放烟花的.
        这个时候就可以考虑使用freemaster了,freemaster是NXP开发的一个时调试监测器和数据可视化工具,适用于广泛的汽车和工业应用.可以认为是包含J-Scope和RTT的功能,而且在应用场景和功能上更加强大.在调试方面和J-Scope、RTT各有千秋.freemaster的介绍很多,可以直接去搜一下.
NXP官网上的链接:
FreeMASTER Run-Time Debugging Tool | NXP 半导体

        对于现场没办法拆开机壳使用仿真器的情况,可以使用freemaster通过串口或者CAN进行调试,对于变频器和逆变器这种大功率设备,调试时更适合使用freemaster,不但可以查看波形,而且可以直接修改全局变量参数进行调试.下图是freemaster支持的模式截图,常用的COM和CAN的的模式需要移植代码.也可以使用DSP和J LINK模式,这种不需要移植代码.


freemaster支持查看全局变量并且可以把变量的波形显示出来,受限于总线实时性,波形精度不高.但是Recorder功能可以缓存数据后再显示出来,需要申请一块RAM缓存,但是能够显示更高精度的波形.
      

对比下来

                                        1.无需修改代码  2.需要使用仿真器  3.支持波形变量显示  4.支持波形数据导出  5.类似printf输出功能  6.修改全局变量

J-Scope                              1.不需要            2.需要                 3.支持                     4.支持                     5.不支持                   6.不支持
RTT                                   1.需要               2.需要                 3.不支持                  4.不支持                  5.支持                      6.不支持(好像不支持,硬汉哥的教程没看到)
freemaster的DAP/J LINK      1.不需要            2.需要                 3.支持                     4.不支持                  5.不支持                   6.支持
freemaster的COM/CAN        1.需要               2.不需要              3.支持                     4.支持                     5.不支持                   6.支持


代码移植参考了其他论坛的移植经验
基于stm32与串口通信的freeMaster使用-CSDN博客(主要参考这个)
Free Master 串口驱动代码移植到GD32F303_freemaster移植-CSDN博客(这个博主上传的代码有几个文件乱码,但是博文可以参考)

注意事项,只有freemaster_S32xx.h和freemaster_cfg.h需要修改,FMSTR_Init();  FMSTR_Poll();  FMSTR_Recorder();  FMSTR_Isr();参考上面的帖子放到合适位置即可
freemaster_S32xx.h的#define FMSTR_SCIDR_OFFSET 7  需要拆分为#define FMSTR_SCIRDR_OFFSET 0x24 和 #define FMSTR_SCITDR_OFFSET 0x28
因为S32xx的串口发送接收寄存器在一块,32的是分开的
下面代码里的寄存器也要分为两个
#define FMSTR_SCI_PUTCHAR(ch) FMSTR_SETREG32(FMSTR_SCI_BASE, FMSTR_SCITDR_OFFSET, ch)
#define FMSTR_SCI_GETCHAR() FMSTR_GETREG32(FMSTR_SCI_BASE, FMSTR_SCIRDR_OFFSET)



freemaster_cfg.h中的#define FMSTR_USE_TSA          0    /* Enable TSA functionality */修改为0,解决一个莫名的编译错误

新增
#define FMSTR_USE_SCI                       1    /* To select SCI(USART) communication interface */
#define FMSTR_SCI_BASE         0x40004800 /* USART3 base on STM32H750 */

附件为移植好的代码
1.基础代码使用安富莱例程: SPI Flash的读写例程(中断方式)
2.在此基础上适配weact的stm32h750(open mv)开发板,主要是完成lcd液晶屏的移植.注意:由于weact板子上flash型号和安富莱例程支持型号不同,所以flash相关移植未完成.
3.移植V7-083_Modbus RTU从站例程例程,usart3支持modbus
4.移植freemaster2.5版本代码,usart3支持freemaster
5.modbus和freemaster不能同时使用,修改freeMasterEnable后编译烧录切换,不支持运行时切换
6.Tool文件夹下包括mthings上位机配置文件,用来使用modbus功能.freemaster工程文件,用来使用freemaster功能.GBK转UTF8文件用来转换编码.

        工作中发现freemaster在变频器和逆变器产品的调试中确实很好用,过去用过某龙头企业变频器的后台软件,只能说越用越倒退了,还没老产品的后台软件好用,花时间移植了下并写篇文章记录一下分享给大家.
一般产品只预留一路485/CAN,正常模式走modbus或者can open,需要调试的时候修改参数,打开freemaster使能.移植的这个代码不支持手动切换,只能烧录代码的时候选择freemaster或者modbus.
最近忙着其他事情,本来还打算移植一下freemaster的can 模式,手里用的weact的H7板子没有CAN接口,也没有can卡.去搜了下发现can还只支持特定型号,支持的ZLG的CAN II和CAN-2E-U价格都不便宜,
只能等有空再说了.

How to use FreeMASTER with CAN - NXP Community


手抖没写完就发帖了,发现帖子图片好像没了.每日上次附件大小还有限制,今天不能上传附件了,后面开个帖子上次附件后贴在下面吧.






回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2025-7-31 08:47:48 | 显示全部楼层
谢谢楼主分享。
1、论坛图片不支持复制粘贴,要单独上传。
2、如果超过20M,推荐直接百度云。
回复

使用道具 举报

25

主题

232

回帖

307

积分

高级会员

积分
307
QQ
发表于 2025-8-1 16:39:22 | 显示全部楼层
还可以再深入了解一下 freemaster_lpuart.c 的函数绑定,fm 的原生示例是接管 arm 的寄存器控制和中断的,应用比较狭窄,换个芯片架构或者一路串口多种协议就搞不定了。

换一下函数绑定可以结合自有 buffer 做任意通信接口的 fm 支持,我甚至在 windows 程序上也在用这个调试,随意读写内存太爽了。
回复

使用道具 举报

10

主题

46

回帖

76

积分

初级会员

积分
76
 楼主| 发表于 2025-8-1 19:04:46 | 显示全部楼层
回复

使用道具 举报

0

主题

49

回帖

49

积分

初级会员

积分
49
发表于 2025-8-1 21:59:34 | 显示全部楼层
我的板子安装了外壳,对外只有一个 485 串口,它本身运行了一个用户协议 cdbus,然后还要同时运行 freemaster 协议,这样就太乱了
我直接使用同一个协议把 波形数据 简单输出到 PC 不就行了(譬如使用 cdbus_gui 工具),为何要用 freemaster?
回复

使用道具 举报

10

主题

46

回帖

76

积分

初级会员

积分
76
 楼主| 发表于 2025-8-1 22:31:51 | 显示全部楼层
yono 发表于 2025-8-1 16:39
还可以再深入了解一下 freemaster_lpuart.c 的函数绑定,fm 的原生示例是接管 arm 的寄存器控制和中断的, ...

哈哈,我们产品就是这样的.freemaster做到了DSP和32都支持,串口分时复用为modbus或者freemaster.我自己简单修改代码试过其实可以同时使用的,因为我们modbus就是用03或06指令,和freemaster的命令很好区分.只是为了产品稳定性不建议同时用,担心出现什么bug把机器搞坏了
回复

使用道具 举报

10

主题

46

回帖

76

积分

初级会员

积分
76
 楼主| 发表于 2025-8-1 22:35:34 | 显示全部楼层
dukelec 发表于 2025-8-1 21:59
我的板子安装了外壳,对外只有一个 485 串口,它本身运行了一个用户协议 cdbus,然后还要同时运行 freemast ...

优点是能够任意读写全局变量进行调试,也能抓取全局变量的波形.如果只是显示波形和后台软件比优势不大,但是后台软件一般只能显示预设好的变量波形,排查问题时不想升级代码破坏现场又想抓取某几个全局变量可以考虑freemaster.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-11 23:51 , Processed in 0.600686 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表