STM32使用FreeMASTER+J-LINK+.axf文件显示数据波形
软件下载安装
FreeMster可以在NXP的官网直接下载,免费!当然下载前需要登录/注册账号。我现在用的是2.5版本的FreeMASTER,软件大约30M,传送门:FreeMster2.5下载(其他版本自行在官网找)。
KEIL5的安装和J-LINK的安装这里就不展开了,大家网上搜索教程自行安装即可。
cubemax配置测试程序
这里使用cubemax简单配置一个软件工程模板,芯片选择STM32F103C9T6,配置外部高速时钟HSE,使用SW模式,主频选择72MHz:
选择外部高速时钟HSE
接着进行输出配置。自定义输出文件名和路径,这里要注意的是:文件的保存路径/命名不要带有小数点,否则KEIL编译后将无法输出.axf文件,如下图,可以看到在输出文件搜索中是没有显示.axf文件
使用KEIL5作为IDE,选择合适的版本,输出单独的.c和.h文件,最后点击右上角GENERATE CODE生成代码:
选择MDK-ARM作为IDE
代码生成后,在KEIL中打开工程,可以先编译一遍程序,确保无错误无警告:
在对应的文件路径中可以看到.axf文件:
接着写一个简单的测试程序,如题图:定义一个全局变量作为计数值,在while(1)里写一个简陋的for循环让计数值从0开始每秒递增,到达10后再后归0:
uint8_t cnt;
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
for(cnt = 0; cnt < 10; cnt++)
{
if(cnt == 10)
{
cnt = 0;
}
HAL_Delay(1000);
}
}
}
编译程序后,接着点击魔法棒(options for target),在debug窗口de Use中选择J-LINK作为烧录程序方式,然后点击settings,在弹出的界面中把Port口选择SW模式,CLK自定义,最后在Flash Download中把Reset and Run 勾选上,使下载后芯片复位并运行;最后点击确定,完成程序烧录设置;此时可通过J-LINK把程序烧录进单片机中:
FreeMaster设置
程序下载后,接着对FreeMaster进行配置(这时候JLINK和烧录程序的板子不用拔掉,保持连接)。打开软件后,可以先把工程保存,接着点击Project,选择Options,进入工程设置:
在options的页面中可以看到FreeMaster提供RS232和插件两种方式与目标设备进行连接,因为手头上没有RS232转USB的模块,这里选择第二种插件的方式。在Plug-in Module中点击下拉按钮,可以看到插件中有JLINK这一选项,选择该项作为连接方式:
接着在Connect string中点击右侧Configure,进入该界面:
这里可以看到安装的JLINK的DLL路径(忘记是不是要手动添加的了,如果确定能使用KEIL5+JLINK烧录程序,但这里没有显示.dll文件,则手动添加),core type这里可以选择芯片的内核,如F103C8的M3的内核,但是这里没有M3的选项,我们选择默认即可:
点击OK后,可以看到Connect String中有包含JLINK的相关信息:
接着点击AMP Files,导入.axf文件:
点击View,可以查看到程序中定义的全局变量cnt:
接下来创建变量检测窗口。在主界面下方Variable Watch窗口中的空白处单击右键,在弹出的窗口中选择Create New Watched Variable,进入添加变量窗口
在添加变量窗口中进行相关的设置如变量地址、类型、长度、采样周期等,测试程序中定义的全局变量cnt是uint8_t类型,占1个byte,至于采样时间和显示方式自行设置,如下:
接着点击确定,可以看到变量cnt已经成功添加进监视窗口了:
然后在左侧的Project tree下右键单击new project,选择Create Oscilloscope,创建示波器,如上图绿色框。
进入后,可以看到有Main 和Setup两个界面,Main界面是设置示波器的显示窗口大小、坐标等内容,根据需求设置即可;进入Setup窗口,添加变量cnt,把Graph vars中cnt前面的方框勾选,最后点击确定,完成示波器设置:
输出显示
下图是完成上述设置后的界面:
点击左上角Go!按钮,如果出现下图提示则是因为前面步骤中配置core type时没有对应M3选项的原因,我们点击OK,进入里面选择M3即可,最后点击OK:
可以看到输出波形如下,可以看到波形从0到9循环递增,下方cnt也会输出当前值:
这几天在调试PID,看到正点原子刚好出了个电机的教程,本想着移植他家的上位机程序到程序里调试参数,然后突然想起了以前用过的FreeMaster,看了一下教程果然有相关功能(如果你不想移植别的调参上位机程序或者频繁download,可以试一下这个方法);这里把方法记录一下。
先修改测试程序,给它加一个限幅,即把(cnt == 10)改为(cnt >= max_lim),这里的max_lim是一个全局变量,其值设置为20,编译后更新.axf文件到FreeMaster,效果如下图:
现在我想修改max_lim的值,可以通过以下步骤实现:
右键点击主界面下方的variable watch区域,点击watch properties:
在弹出的界面按顺序执行1、2、3操作:
在弹出的界面执行以下操作:
设置完成,然后试着把max_lim的值改成50,然后按下键盘的Enter键:
可以看到max_lim变成了50(要注意的是,Freemaster中改变的变量值是修改了程序的.axf中对应的值,程序不同步修改的)。