程序的编译和下载
在前面时钟输出实例中给出了不少程序代码,要让这些程序代码生效,必须把它们进行编译链接并生成下载文件,然后再通过特定方法把文件下载到LPC824芯片中,最后在目标板上观察运行效果。
一般来说,下载文件有两种格式:一种是基于二进制代码的目标文件,其文件的扩展名一般为“.bin”;另一种是基于十六进制代码的目标文件,其文件的扩展名一般为“.hex”。对于这些文件的内部结构,有兴趣的读者可自行研究,这里只讨论如何通过开发环境来生成它们。
在MDK-ARM开发环境中,单击菜单Project->Options for Target(或直接按Alt+F7),会打开一个选项对话框。单击“Output”标签页切换到输出选项卡,如下图所示。
从上图中可以看到,在默认设置下MDK-ARM是不会生成任何下载文件的。若要生成十六进制的下载文件,需要勾选“Create HEX File”一项;若要生成二进制的下载文件,需要勾选“Create Batch File”一项。生成文件的名称一般默认为工程名称,生成文件的路径为工程文件所在的文件夹,当然也可以在该选项卡中对它们进行修改。这里只勾选“Create HEX File”一项,点“OK”按钮退出。点击工具条上的“Rebuild”按钮对工程进行重新编译链接,完成后就可在工程所在的文件夹中找到生成的下载文件(如test.hex)。
生成HEX文件后,接着就要把它下载(烧写)到LPC824中去运行。要把目标文件下载到芯片内的FlashROM中,可有多种方式选择。最早的方法是使用编程器直接对芯片进行烧写,现在这种方式基本不用了。目前大部分的单片机都带有程序下载接口,常见的可使用串口方式来下载(如SPI、UART等),在下载软件的配合下,可很轻松的把目标文件下到单片机中。
NXP公司专门为其生产的芯片开发了一款下载工具软件FlashMagic,LPC824配合它只需使用串口就可进行下载,无须仿真器支持,使用非常方便。下面就来讨论一下如何通过FlashMagic把编译好的HEX文件下载到LPC824中去。
先把LPC824的串口0(USART0)连接到电脑串口上去,连接时要注意几点:1、LPC824只有USART0才具有下载程序的功能;2、虽然在LPC824中USART的收发功能可通过开关矩阵分配到任意引脚上去,但在ISP模式下USART0的引脚被固定在了PIO0_0(U0_RXD)和PIO0_4(U0_TXD);3、要进行下载,在LPC824复位前其ISP(PIO0_12)引脚必须接地,否则进入不了ISP模式;4、在电脑端如果使用TTL电平的串口,可直接与LPC824的USART0引脚进行交叉连接,如果是RS232电平则需要先进行电平转换再交叉连接。在上述4点准备好后,运行FlashMagic软件,会得到如下图所示的界面。
首先看Step1中的选项,点击“Select Device”按钮进行器件选择,这里选LPC824M201JHI33。然后选择串口的端口号,这要根据自己电脑上所使用的串口来选择,若用的是USB转串口的线,要在设备管理器中核实具体使用的端口号。
接下来选择波特率,一般选择115200,以提高通信速度,若有问题可根据实际情况适当进行降低。接口选择“None(ISP)”方式。振荡频率就选择LPC824的晶振频率,一般为12MHz。
接下来看Step2中的选项,勾选下边的“Erase blocks used by Hex File”一项,以根据编译生成的Hex文件来进行块擦除。
再下来看Step3中的选项,单击“Browse”按钮来定位需要下载的Hex文件。然后在Step4选项中,勾选“Verify after programming”一项,以在下载完成后进行校验。
最后在Step5选项中点击“Start”按钮进行下载,下载时会在对话框底部显示进度。下载前一定要确保LPC824处于ISP模式下(即PIO0_12引脚接地),下载完毕后断开PIO0_12与接地的连接,然后再复位一下LPC824,程序就可正常运行了。
一般按上面的配置就可以正常下载了,如果还是下载不了,可单击菜单Options->Advanced Options,会弹出一个对话框,在对话框中的“Hardware Config”标签面进行如下图所示的设置,其余的不变。完成后点击“OK”按钮退出,然后再进行下载就应该可以了。
LPC824还带有一个JTAG调试接口,除了标准JTAG边界扫描,还支持串行线SWD调试功能,可以通过通用ARM仿真器来进行程序下载和硬件仿真。目前通用的ARM仿真器有ULINK和JLINK两种类型,其中ULINK是MDK-ARM开发环境默认的仿真器,环境自带了驱动程序,插上就可使用,两者配合兼容性是最好的。JLINK是SEGGER后来推出来的ARM仿真器,其速度比ULINK快,适用于多个平台的开发环境,也可用在MDK-ARM开发环境下。下面就讨论结合ULINK2仿真器在MDK-ARM开发环境中如何实现程序的下载与调试,用JLINK的也可参考使用(其实两者配置差不多)。
ULINK2仿真器的外形如下图所示。
从外形中可以看出,ULINK2仿真器有两个端口,一端是USB口,接到电脑上的USB端口,如果电脑使用的是MDK-ARM开发环境并且在安装阶段就默认安装了ULINK驱动的话,插上USB口电脑就可以识别出ULINK2仿真器。另一端是标准的20针JTAG插头,可直接插在LPC824的目标板上(如果目标板上是10针的简易接口需要转换一下)。
插好ULINK2后,给目标板上电并启动MDK-ARM开发环境,点击菜单Project->Options for Target’Target 1’,会弹出目标选项配置的对话框,然后点击Debug标签页,环境默认使用的是虚拟仿真调试方式(Use Simulator),这里需要把它转换成使用外置仿真器调试,点击右上角的Use选项,并在下拉列表中选择ULINK2/ME Cortex Debugger(若用的是JLINK此处选Cortex-M/R J-LINK/J-Trace),如下图所示。
接下来点击旁边的“Settings”按钮,会弹出一个ULINK的设置对话框,如果ULINK安装正确的话,会显示如下图所示的信息。
在上图中,由于LPC824只支持SW方式下载,因此在对话框的Port选项中下拉选择SW方式,其他配置可参照图中所示进行。需要说明一点,ULINK的串号(Serial No)可能会与图中的不一样,这涉及到具体使用的仿真器,每个仿真器都拥有自己独立的串号。另外,可能SW Device中显示的信息也会不一样,这与具体的目标板有关(如果此处显示SWD Communication Failure是因为目标板没上电)。点击“OK”按钮返回。
接下来点击Utilities标签页,再选择Use Target Driver for Flash Programming一项,并勾选Use Debug Driver和Update Target before Debugging两项,具体如下图所示。
然后点击“Settings”按钮,会弹出一个设置对话框,按下图所示对其进行设置。
在上图中,Programming Algorithm中的器件可通过点击“Add”按钮选择添加的。设置完成后连续点击“OK”按钮退出,返回到开发环境。
若一切正常的话,在开发环境中对程序进行编译链接后,直接点击工具条上的下载按钮Download(或按F8)就可以把前面编译生成的目标文件直接下载到LPC824中去了。下载完成后点击工具条上的仿真按钮Start/Stop Debug Session(或按Ctrl+F5)就可以进行硬件调试仿真。