使用LiteFwLib原创固件库从零开始建工程
——基于Keil5和FRDM-KL25板
suyong_yq@126.com
2015年1月
前文提要:
原创飞思卡尔KL25
单片机固件库软件——基于FRDM-KL25
开发板 将FRDM-KL25的OpenSDA变身JLink
前文为大家带来了LiteFwLib固件库,可用于快速开始FRDM-KL25开发板的应用开发。在LiteFwLib固件库的开发包中,包含了一些example样例工程,让大家能够简单了解一下固件库里的驱动是怎么用的。然而,对于实际的应用来讲,工程师总会创建自己的应用工程。最快速创建工程的方法就是——“改”,根据实际应用的需要,找一个功能最接近的样例工程作为基础进行修改(别忘记备份原工程呦),这样最安全,而且见效快,省掉同编写程序不相干的步骤。然而,对于刚接触单片机开发的人来说,了解从零开始创建工程的全部过程是非常有必要的,知道如何配置工程和组织代码,才能随心所欲地于扩展程序的规模。
这里,我就跟大家描述一下基于Keil集成开发环境从零开始创建一个适用于FRDM-KL25板的工程。我们的起点是保证电脑上已经安装好了工具软件:
• 安装好Keil5的主程序及支持KL25芯片的插件包
• 安装好JLink的驱动程序(或者OpenSDA的驱动程序)
• 电脑上有一个串口终端软件,Putty或者Tera Term之类的软件,Windows自带的“超级终端”程序也可以,但是我不会用,呵呵。
我们的终点是让串口终端输出欢迎信息,然后回显在串口终端输入的任何字符。
需要预先准备的一些文件:
• CMSIS标准头文件
• 启动文件和典型的时钟配置文件
• 驱动固件库(可选)
实际上这些文件都可以用现成的,不用我们自己编写,变化最大的就是固件库,可是我也帮大家写好啦。至于链接命名文件和flash映像文件啥的先不去管它们,用Keil默认的就OK。但若是深度定制的应用,以后就需要手动更改了。不过即使需要手动改,变化也不大,框子都是一样的。那这些文件从哪里可以找到呢?
Keil软件真是一个藏宝箱,不仅提供了开发单片机所需要的所有工具,也为大家提供了创建基本工程所需要的全部文件。在Keil的安装目录下,就可以找到我们需要的大部分文件。
现在切换到目录“C:Keil_v5
ARMPackARMCMSIS4.2.0CMSISInclude”,这里假设你的Keil安装在C盘的根目录。
对于内核为ARM Cortex-M0+的KL25芯片来说,我们需要的只是其中的core_m0plus.h、core_cmFunc.h和core_cmInstr.h,这些头文件中包含了对ARM Cortex-M0+处理器内核中寄存器的定义及操作的函数。在LiteFwLib固件库中,这些文件已经被复制到“fsl_frdm_kl25include”目录下啦。
切换到目录“C:Keil_v5ARMPackKeilKine
tis_KLxx_DFP1.4.0DeviceInclude”,这里可以找到KL25芯片的头文件及CMSIS规范的系统启动头文件。
我们需要的是其中的MKL25Z4.h和system_MKL25Z4.h。这两个文件也已经被复制到LiteFwLib固件库的“fsl_frdm_kl25board”目录下啦。
再切换目录“C:Keil_v5ARMPackKeilKinetis_KLxx_DFP1.4.0DeviceSource”下,找到system_MKL25Z4.c文件和“ARM”子目录下的system_MKL25Z4.s文件,它们分别是启动系统时钟配置文件及适用于ARM编译器的启动汇编文件。同样,这两个文件也已经被复制到LiteFwLib固件库的“fsl_frdm_kl25board”目录下啦。
固件库软件使用LiteFwLib中的代码就好了,位于“fsl_frdm_kl25driver”目录下。
为了说明问题,这里我暂时不使用LiteFwLib中的“二段编译”,而是创建全部由源码文件构成的工程。
在“fsl_frdm_kl25example”目录下新建一个“MyFirstProject”的目录,再创建“build”和“application”两个子目录,分别存放我们新建的工程文件和本工程的应用程序源文件。为了节约大家从头开始敲代码的时间,我们直接从01_uart_hello工程中复制“application”目录下的源代码到新建工程的“application”中。这里的文件组织是按照LiteFwLib的统一风格设计的,大家也可以按照自己喜欢的目录结构进行组织。
启动Keil软件,创建一个空的工程。工程文件就存放在我们刚刚新建的“fsl_frdm_kl25exampleMyFirstProjectbuild”目录下。
在芯片类型选择对话框中选择“MKL25Z128xxx4”。这个是FRMD-KL25板子上的主控MCU。
后面出现的那个“Manage Run-Time Environment”的对话框,我也没用过,“确定”、“取消”或是右上角的小叉叉,随便戳一下把它赶跑就好。然后就是空白的工程。
用鼠标左键戳一下“Target 1”选中后按键盘上的“F2”键,开始改名字为“MyFirstProject”。然后在刚改好的工程名字上面用鼠标右键戳一下,在弹出菜单中选中“Manage Project Items ...”,出现“Manage Project Items”对话框,一眼就可以看出这是要在工程中创建目录和添加文件了。此处省略若干字,添加好工程后的工程组织结构如下:
这个时候编译肯定是不行的,会报错说是找不到某些文件。我们还需要配置一下头文件的搜索路径。用鼠标左键戳一下工具栏上的魔法棒(见上图红圈),就弹出一个工程选项的对话框,这个对话框我们在配置工程时会经常用到。
在“Target”标签页下,选中“Use MicroLib”,这是因为我们要使用Keil自带的标准输入输出组件stdio实现串口打印,用了这个,就可以在程序中使用printf和scanf啦,这么好的工具,LiteFwLib怎么能错过呢。
在”Output”标签页中,设定生成的obj文件存放在工程目录“build”中新建的子目录“output”下,把这些细碎的文件都整理到这个目录下,工程目录里会干净不少。当然,最后生成的可执行文件也在这里。“Creat HEX File”的功能我就不多说的,大家根据需要选择。
同样在“Listing”标签页下,设定生成的lst文件也存放在“output”目录下。
“C/C++”标签页下才是重点,在这里添加头文件的搜索路径。
Keil对路径管理还是相当智能的,在选择路径时,会自动将选中的绝对路径转换成相对路径,这样整个开发包就可以不依赖在电脑中的存放位置了。这里需要加的目录主要有本工程的“application”目录及LiteFwLib开发包提供的“include”、“driver”和“board”目录。
最后一步需要做的配置就是关于调试工具的。切换到“Debug”标签页下,选择使用JLink(这里已经将OpenSDA变身为JLink了,参见坛子里我的另一篇帖子),或者使用OpenSDA也是类似的。
到此为止,第一个工程就创建好啦。我们可以试着编译一下这个工程。
OK,无错无警告,Bingo!
确保把FRDM-KL25板子连接到电脑上,就可以下载运行了。
A oHo,可能会提示下载失败,这是因为刚接上的JLink可能默认识别使用“JTag”调试协议,我们需要把它改为“SWD”协议,OpenSDA变身的Jlink使用串行的调试
通信协议,更轻量级。在工程选项对话框中,“Debug”标签页下,我们刚才选择使用JLink的那个下拉菜单右边,有个“Settings”的按钮,戳它一下。
若是在使用JTag协议的情况下,是识别不出来与之对接的目标设备的。切换到“SW”,立马就有内核识别出来了。
使用OpenSDA变身的JLink,在每天第一次启动时都会出现一个提示对话框,“Accept”就OK。
最后,显示下载成功。
此时,打开串口终端软件,设定串口通信波特率为115200,8位有效数据,无校验,1位停止位。
然后幸福地戳一下FRDM-KL25板子上的复位按键,见证奇迹的时刻到啦。
终端上还打印出了这个工程在编译时电脑上的时间。后面的“bbs.elecfans.com”当然是我自己用键盘在终端里输入的啦。
大功告成!