FreeMASTER快速入门
1.FreeMASTER介绍
如果有使用过NXP的MCU开发电机控制器的客户,一定用过或者听过MCAT,如下图所示,准确来说,MCAT就是FreeMASTER的一个图形插件,即control page窗口,整体界面就是FreeMASTER。MCAT是对FreeMASTER的高阶应用,这里不做详细描述,有兴趣的可以去NXP官网下载应用笔记AN4642进行研究。 ![0](https://img-blog.csdnimg.cn/b7e2e0f4c8044f4a9cfae8370e121250.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
下面摘取了两段NXP官网对FreeMater的介绍:
- FreeMASTER是一种用户友好的实时调试监视器和数据可视化工具,可用于运行时配置和调试嵌入式软件应用。
- FreeMASTER支持对正在运行的系统上的变量进行非侵入式监视,并且可以在示波器式显示器上以标准小部件(仪表、滑块等)或文本形式的数据形式显示多个变量,从而提供易于使用的数据记录器。
2.FreeMASTER获取
打开NXP官网,搜索栏输入“freemaster”,第一个链接点进去就到了FreeMASTER主界面,切换到DWONLOADS窗口,会看到有两个系列的FreeMASTER:
- FreeMASTER tool 3.x,除了传统的FreeMASTER上位机之外,还有一个FreeMaster Lite,可以借助web远程通信,同时还支持第三方使用JSON-RPC的应用。
- FreeMaster tool 2.x,传统的FreeMASTER上位机,官网上有2.5和2.0两个版本。
![1](https://img-blog.csdnimg.cn/586cbcaec8c44b81a0c1a023b56d9c59.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
特别说明:FreeMASTER是向后兼容的,使用2.x版本生成的pmp文件可以用3.x版本打开使用,但是在使用3.x版本打开之后,再使用2.x版本有几率会出现无法打开的情况。
3.FreeMASTER用法
由于FreeMASTER 3.x版本的安装包比较大,而且很多功能我用不到,所以我这里选择的FreeMASTER 2.5版本(FreeMASTER 2.0版本的工具栏中的开始/暂停功能使用的同一个按钮,不容易判断判断FreeMASTER的状态,推荐使用2.5版本)
3.1 准备工作
在使用FreeMASTER之前,需要准备以下工具:
- S32K144EVB-Q100
- 一根MicroUSB线
- S32 Design Studio for ARM 2.2
- FreeMASTER 2.5
3.2 通信方式介绍
FreeMASTER 2.5支持两种连接方式:
- RS232模式,用于使用USB转UART工具连接电脑上的FreeMASTER和MCU
- Plug-in Module模式:
- 用于使用调试器连接电脑上的FreeMASTER和MCU,目前常见的调试接口都支持,如JTAG,SWD,BDM,CMSIS DAP等。
- 用于使用USB转CAN工具(USB转LIN工具)连接电脑上的FreeMASTER和MCU,主流的CAN卡供应商都支持,如Vector,KVASER,ZLG等。
FreeMASTER 3.0支持的连接方式差不多,详细情况如下图: ![2](https://img-blog.csdnimg.cn/7bb2a8fcca4a49d1848a24eb00150308.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
3.3 FreeMASTER简单使用
3.3.1 基于OpenSDA调试器使用FreeMASTER
接下来先介绍基于调试器的方式使用FreeMASTER监控变量,使用调试器的好处在于不需要在MCU的代码中添加FreeMASTER的驱动,只需要配置FreeMASTER上位机工程即可,缺点是会占用调试器资源。
3.3.1.1 准备可执行文件
使用FreeMASTER之前准备好可执行文件,S32DS生成的ELF文件,KEIL生成的AXF文件和IAR生成的OUT文件的都可以,同时需要和MCU烧录的文件保持一致。
-
本文选择S32DS 2.2 自带的PWM例程,如下图所示,并将其命名为ftm_pwm_s32k144_freemaster ![3](https://img-blog.csdnimg.cn/0dd99944544841d5a8b99ed2e55ab015.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center) -
工程ftm_pwm_s32k144_freemaster生成之后,将mian函数内部的局部变量变成全局变量,因为FreeMASTER只能观察全局变量,如下图所示: ![4](https://img-blog.csdnimg.cn/0d493b9ba9ad4c7687f93bb0ae832bb5.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_13,color_FFFFFF,t_70,g_se,x_16#pic_center) -
保存改动之后,编译生成ELF文件,如下图,同时将elf烧入开发板的MCU中。 ![5](https://img-blog.csdnimg.cn/b9e74e8a99ed4cdea3080b84aa3f526f.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_17,color_FFFFFF,t_70,g_se,x_16#pic_center) -
同时,预先记住需要观察的全局变量,在制作FreeMASTER工程时会用到,这里选择全局变量increaseDutyCycle 和dutyCycle ,在代码中的变化规律如下图: ![6](https://img-blog.csdnimg.cn/35e0c41d70a04200ac0aebb6ffa2cee0.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
3.3.1.2 创建FreeMASTER工程
-
打开FreeMASTER,点击菜单栏的Project,选择Options,如下图所示: ![7](https://img-blog.csdnimg.cn/9a7fd99716b647479d5c7a655140f7a0.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_10,color_FFFFFF,t_70,g_se,x_16#pic_center) -
Options选型卡界面比较多,这次主要用到的是Comm和MAP Files这两个界面。Comm界面主要用来选择通讯方式,MAP Files界面用来选择相应的可执行文件。Options选型卡界面如下图所示: ![8](https://img-blog.csdnimg.cn/e8d416a694514a0ba70a1b2225e95a12.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_14,color_FFFFFF,t_70,g_se,x_16#pic_center) -
首先配置Comm界面,通讯方式选择Plug-in module,点开下拉,如下图所示。因为我这里使用的调试器是板载的OpenSDA,选择第二个即可。如果使用Jlink,选择倒数第三个即可。 ![9](https://img-blog.csdnimg.cn/b1be0001d1cc432d8284b75689d3ae80.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_14,color_FFFFFF,t_70,g_se,x_16#pic_center) -
接着配置connect string选项,如下图所示,选择相应的驱动和型号,点击OK。 ![10](https://img-blog.csdnimg.cn/f1e3788c713a443b90943dd1413f9ab4.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center) -
然后配置MAP Files界面,点击下图的红框处,选择之前生成的elf文件,点击打开即可。 ![11](https://img-blog.csdnimg.cn/acaeb7aeff1f41c9b404c087b07df10f.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_15,color_FFFFFF,t_70,g_se,x_16#pic_center) -
打开菜单栏Project的Variables选项,会进入变量列表,如下图所示。 ![12](https://img-blog.csdnimg.cn/3a1d3fc887a1453d9de6f3117f390e7d.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_15,color_FFFFFF,t_70,g_se,x_16#pic_center) -
点击New,如下图所示,选择需要用到的向量increaseDutyCycle 和dutyCycle ,并进行相关的配置,如下图所示。如果想要在变量显示时可以手动修改变量时,可以点击Modifying,选择变量修改的方式,范围内任意值或者下拉列表选择。 ![13](https://img-blog.csdnimg.cn/c745f33af4274a029c811c0e11a5c44c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_18,color_FFFFFF,t_70,g_se,x_16#pic_center) -
右击工程名,选择属性,在Main界面修改工程名,如下图所示。 ![14](https://img-blog.csdnimg.cn/2aca1ea09b7744dfa5354aced01a1a73.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center) -
切换到Watch界面,将变量添加到观察窗口,完成之后,变量会显示在下方的Variable Watch窗口。同时也可以在Watch界面增加新的变量 ![15](https://img-blog.csdnimg.cn/646224c727e44a7988ebf5f1a96c7d29.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_16,color_FFFFFF,t_70,g_se,x_16#pic_center) -
为了更直观的感受变量的变化趋势,需要增加波形显示。右击工程名,选择创建示波器,在Main界面修改波形名称,如下图所示: ![16](https://img-blog.csdnimg.cn/0bf005128d4748969486f339ba5bf11a.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center) -
切换Setup界面,选择需要显示的变量,如下图所示: ![17](https://img-blog.csdnimg.cn/12222f91a09f4bdebf90aeaa3008634e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_18,color_FFFFFF,t_70,g_se,x_16#pic_center) -
配置完成后将工程保存到例程的文件夹中。
3.3.1.3 测试效果
-
将开发板连接上电脑,打开刚才的FreeMASTER工程,打开之前的Connect String配置界面,点击一下Rescan BDM,直到能看到Device Name,保证连接正常如下图所示: ![18](https://img-blog.csdnimg.cn/cace2770af3c4523bc859d486b6e4ba3.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_8,color_FFFFFF,t_70,g_se,x_16#pic_center) -
点击Go按钮,显示波形如下图: ![19](https://img-blog.csdnimg.cn/c290eac48bed44839a5076d17f8c2775.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center) -
建议将波形的采集周期和变量的采集周期设置一致,如下图: ![20](https://img-blog.csdnimg.cn/a5aeb80482f0437e8af6aefa2d5cc15a.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_16,color_FFFFFF,t_70,g_se,x_16#pic_center) -
按上述方法修改后的显示波形如下图,效果会好一些。 ![21](https://img-blog.csdnimg.cn/0df9f7cb95974b45b9fe01bc943d7f34.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
3.3.2 基于USB转UART工具使用FreeMASTER
在实际场景中,基于USB转UART工具的方式使用FreeMASTER监控变量的方式更为常见,这种方式需要占用一个串口,同时代码还需要增加UART和FreeMASTER的驱动。
3.3.2.1 准备可执行文件
基于3.3.1.1章节的程序,还需要添加的功能如下图: ![22](https://img-blog.csdnimg.cn/b683053d8d474057b32f4da38ededecf.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_18,color_FFFFFF,t_70,g_se,x_16#pic_center)
3.3.2.1.1 增加UART组件
-
在元器件库筛选出lpuart组件,双击添加到本工程中,如下图所示: ![23](https://img-blog.csdnimg.cn/9af3623a6168412788794aeea0e3e5c6.png#pic_center) -
配置lpuart1的初始化参数,如下图所示: ![24](https://img-blog.csdnimg.cn/9fd0e9245c2e4bb1bcf5c7512c568a3e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center) -
配置lpuart1的引脚,如下图所示: ![25](https://img-blog.csdnimg.cn/f8f5c471c4df43d4a962a33d2439505e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center) -
点击按钮生成配置代码,如下图所示: ![26](https://img-blog.csdnimg.cn/4ac4e8a18aab4df388747fa6bd9fe249.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_8,color_FFFFFF,t_70,g_se,x_16#pic_center) -
添加头文件"lpuart1.h"包含以及添加串口初始化代码,如下图所示:
#include "lpuart1.h"
![27](https://img-blog.csdnimg.cn/62f7617194024991a2c4dd2c9f2757e0.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_15,color_FFFFFF,t_70,g_se,x_16#pic_center)
3.3.2.1.2 增加FreeMASTER驱动
-
右击工程名,点击属性(Properties),点击SDKs,如下图: ![28](https://img-blog.csdnimg.cn/ec8ec8a0219844c988d4585e597f4b8b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center) -
选择FreeMaster_S32xx,然后点击Attach/Detach按钮,如下图: ![29](https://img-blog.csdnimg.cn/bfb39202d59e4c5da1e99f2b1d096a35.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center) -
选择Select All,如下图,然后点击OK返回。 ![30](https://img-blog.csdnimg.cn/2cca471065974337ad031a7d0ff39276.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_14,color_FFFFFF,t_70,g_se,x_16#pic_center) -
此时工程会多两个文件夹,如下图所示。其中FreeMaster_S32xx文件夹存放驱动,include文件夹存放配置文件。 ![31](https://img-blog.csdnimg.cn/b4e9cab53f6e44aea7501d81b3bcebf3.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_8,color_FFFFFF,t_70,g_se,x_16#pic_center) -
驱动文件夹不需要改动,freemaster_cfg.h需要按照实际使用情况进行修改,如下图所示。其中0x4006B000UL是LPUART1的基地址,原本的配置文件写错了,这里只有修改下注释名即可 ![32](https://img-blog.csdnimg.cn/2a519709a83b4d7da68076382fe9d2c8.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
![33](https://img-blog.csdnimg.cn/6bee61bc49f54e4687d64ba00cf9c255.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_17,color_FFFFFF,t_70,g_se,x_16#pic_center)
特别说明:关于freemaster_cfg.h中每个宏定义的详细说明,请参考FreeMaster的使用手册FMSTRSCIDRVUG.pdf的2.4.3章节,其位于S32DS2.2安装目录下,具体地址如下:S32DS_ARM_v2.2\S32DS\software\FreeMASTER_Serial_Communication_Driver_V2_0\doc\UserGuide 6. 如下图所示:
- 添加头文件"freemaster.h"包含,
- 串口中断函数不使用SDK自带的,改用FMSTR_Isr(),
- 添加FMSTR_Init()函数以及在死循环中添加FMSTR_Poll()函数
#include "freemaster.h"
![34](https://img-blog.csdnimg.cn/bbe35400c93648bc93e82b22d23fe360.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_17,color_FFFFFF,t_70,g_se,x_16#pic_center)
![35](https://img-blog.csdnimg.cn/c5ded285d05f4e3c83bed76d03371bca.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_14,color_FFFFFF,t_70,g_se,x_16#pic_center)
3.3.2.2 修改FreeMASTER工程
- 打开之前创建的工程,修改下通信方式以及加载新的elf文件即可,如下图所示:
![36](https://img-blog.csdnimg.cn/de196dae68d54cdc90df424e35f3d7e9.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_15,color_FFFFFF,t_70,g_se,x_16#pic_center)
![37](https://img-blog.csdnimg.cn/a1f793de03774f08a0a72cfa62bae965.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_14,color_FFFFFF,t_70,g_se,x_16#pic_center)
3.3.2.3 测试效果
这里测试使用的是OpenSDA自带的USB转UART的功能,使用其他串口工具效果一样。测试波形如下图: ![38](https://img-blog.csdnimg.cn/7eea8191ae0548e18983515982362dbb.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
3.3 FreeMASTER其他功能
- 感兴趣的读者可以试一试FreeMASTER的Command功能,S32DS自带的FreeMASTER例程(如下图)有使用该功能。不过个人觉得该功能和使能写功能之后的变量窗口有些重复,一般用的不多。
![在这里插入图片描述](https://img-blog.csdnimg.cn/85315ee671a74c05ad3578097cc17c64.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5YyX5p6B54aK55qE6ISW5a2Q,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
|