Jlink下载与调试的MDK设置

JLINK V8支持JTAG和SWD,同时STM32也支持JTAG和SWD。所以,我们有2种方式可以用来调试,JTAG调试的时候,占用的IO线比较多,而SWD调试的时候占用的IO线很少,只需要两根即可。打开工程,打开Options for Target项卡,在Debug栏选择仿真工具为J-LINK/J-TRACE Cortex。上图中我们还勾选了Run to main(),该选项选中后,只要点击仿真就会直接运行到main函数,如果没选择这个选项,则会先执行startup_stm32f40_41xxx.s文件的Reset_Handler,再跳到main函数。

然后我们点击Settings,设置J-LINK的一些参数,如图

使用J-LINK V8的SW模式调试,因为JTAG需要占用比SW模式多很多的IO口,而在ALIENTEK STM32开发板上这些IO口可能被其他外设用到,可能造成部分外设无法使用。所以,建议在调试的时候,一定要选择SW模式。Max Clock,可以点击Auto Clk来自动设置,图中设置SWD的调试速度为10MHz或者5MHz,这里,如果你的USB数据线比较差,那么可能会出问题,此时,你可以通过降低这里的速率来试试。

单击OK,完成此部分设置,接下来还需要在Utilities选项卡里面设置下载时的目标编程器

直接勾选Use Debug Driver,即和调试一样,选择JLINK来给目标器件的FLASH编程,然后点击Settings,设置如图

这里MDK5会根据新建工程时选择的目标器件,自动设置flash算法。我们使用的是STM32F407ZGT6,FLASH容量为1M字节,所以Programming Algorithm里面默认会有1M型号的STM32F4xx FLASH算法。特别提醒:这里的1M flash算法,不仅仅针对1M容量的STM32F4,对于小于1M FLASH的型号,也是采用这个flash算法的。最后,选中Reset and Run选项,以实现在编程后自动运行,其他默认设置即可。在设置完之后,点击OK,然后再点击OK,回到IDE界面,编译一下工程。接下来我们就可以通过JLINK下载代码和调试代码。
配置好JLINK之后,使用JLINK下载代码就非常简单,大家只需要点击LOAD按钮就可以进行程序下载。

 

接下来我们看看用JLINK进行程序仿真。点击d,开始仿真(如果开发板的代码没被更新过,则会先更新代码,再仿真,你也可以通过按load,只下载代码,而不进入仿真。特别注意:开发板上的B0和B1都要设置到GND,否则代码下载后不会自动运行的!)。因为我们之前勾选了Run to main()选项,所以,程序直接就运行到了main函数的入口处,在某处设置了一个断点,点击(向下箭头),程序将会快速执行到该处。

此时MDK多出了一个工具条,这就是Debug工具条,这个工具条在我们仿真的时候是非常有用的,下面简单介绍一下Debug工具条相关按钮的功能。Debug工具条部分按钮的功能

复位:其功能等同于硬件上按复位按钮。相当于实现了一次硬复位。按下该按钮之后,代码会重新从头开始执行。
执行到断点处:该按钮用来快速执行到断点处,有时候你并不需要观看每步是怎么执行的,而是想快速的执行到程序的某个地方看结果,这个按钮就可以实现这样的功能,前提是你在查看的地方设置了断点。
停止运行:此按钮在程序一直执行的时候会变为有效,通过按该按钮,就可以使程序停止下来,进入到单步调试状态。
执行进去:该按钮用来实现执行到某个函数里面去的功能,在没有函数的情况下,是等同于执行过去按钮的。
执行过去:在碰到有函数的地方,通过该按钮就可以单步执行过这个函数,而不进入这个函数单步执行。
执行出去:该按钮是在进入了函数单步调试的时候,有时候你可能不必再执行该函数的剩余部分了,通过该按钮就直接一步执行完函数余下的部分,并跳出函数,回到函数被调用的位置。
执行到光标处:该按钮可以迅速的使程序运行到光标处,其实是挺像执行到断点处按钮功能,但是两者是有区别的,断点可以有多个,但是光标所在处只有一个。
汇编窗口:通过该按钮,就可以查看汇编代码,这对分析程序很有用。
堆栈局部变量窗口:通过该按钮,显示Call Stack+Locals窗口,显示当前函数的局部变量及其值,方便查看。
观察窗口:MDK5提供2个观察窗口(下拉选择),该按钮按下,会弹出一个显示变量的窗口,输入你所想要观察的变量/表达式,即可查看其值,是很常用的一个调试窗口。

内存查看窗口:MDK5提供4个内存查看窗口(下拉选择),该按钮按下,会弹出一个内存查看窗口,可以在里面输入你要查看的内存地址,然后观察这一片内存的变化情况。是很常用的一个调试窗口
串口打印窗口:MDK5提供4个串口打印窗口(下拉选择),该按钮按下,会弹出一个类似串口调试助手界面的窗口,用来显示从串口打印出来的内容。

逻辑分析窗口:该图标下面有3个选项(下拉选择),我们一般用第一个,也就是逻辑分析窗口(Logic Analyzer),点击即可调出该窗口,通过SETUP按钮新建一些IO口,就可以观察这些IO口的电平变化情况,以多种形式显示出来,比较直观。
系统查看窗口:该按钮可以提供各种外设寄存器的查看窗口(通过下拉选择),选择对应外设,即可调出该外设的相关寄存器表,并显示这些寄存器的值,方便查看设置的是否正确。

特别注意:串口打印窗口和逻辑分析窗口仅在软件仿真的时候可用,而MDK5对STM32F4的软件仿真,基本上不支持(故本教程直接没有对软件仿真进行介绍了),所以,基本上这两个窗口用不着。但是对STM32F1的软件仿真,MDK5是支持的,在F1开发的时候,可以用到。

 

点击菜单栏的PeripheralsSystem ViewerUSARTUSART1。可以看到,有很多外设可以查看,这里我们查看的是串口1的情况。如图

单击USART1后会在IDE右侧出现一个如图所示的界面。图是STM32的串口1的默认设置状态,从中可以看到所有与串口相关的寄存器全部在这上面表示出来了。我们接着单击一下,执行完串口初始化函数,得到了如图(b)所示的串口信息。大家可以对比一下这两个图的区别,就知道在uart_init(115200);这个函数里面大概执行了哪些操作。
通过图(b),我们可以查看串口1的各个寄存器设置状态,从而判断我们写的代码是否有问题,只有这里的设置正确了之后,才有可能在硬件上正确的执行。同样这样的方法也可以适用于很多其他外设,这个读者慢慢体会吧!这一方法不论是在排错还是在编写代码的时候,都是非常有用的。

 

posted on 2017-06-07 15:10  别和我重名好嘛  阅读(1659)  评论(0编辑  收藏  举报