NXP MCU 技术论坛
直播中

suyong_yq

12年用户 105经验值
擅长:电源/新能源 嵌入式技术 控制/MCU
私信 关注
[资料]

【KL25】使用LiteFwLib原创固件库从零开始建工程-基于Keil5和KL25

使用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_v5ARMPackARMCMSIS4.2.0CMSISInclude”,这里假设你的Keil安装在C盘的根目录。
keil_cmsis.png
图1
    对于内核为ARM Cortex-M0+的KL25芯片来说,我们需要的只是其中的core_m0plus.h、core_cmFunc.h和core_cmInstr.h,这些头文件中包含了对ARM Cortex-M0+处理器内核中寄存器的定义及操作的函数。在LiteFwLib固件库中,这些文件已经被复制到“fsl_frdm_kl25include”目录下啦。
    切换到目录“C:Keil_v5ARMPackKeilKinetis_KLxx_DFP1.4.0DeviceInclude”,这里可以找到KL25芯片的头文件及CMSIS规范的系统启动头文件。
keil_include.png
图2
    我们需要的是其中的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”目录下。
new_project_01.png
图3
在芯片类型选择对话框中选择“MKL25Z128xxx4”。这个是FRMD-KL25板子上的主控MCU。
new_project_02.png
图4
    后面出现的那个“Manage Run-Time Environment”的对话框,我也没用过,“确定”、“取消”或是右上角的小叉叉,随便戳一下把它赶跑就好。然后就是空白的工程。
new_project_03.png
图5
    用鼠标左键戳一下“Target 1”选中后按键盘上的“F2”键,开始改名字为“MyFirstProject”。然后在刚改好的工程名字上面用鼠标右键戳一下,在弹出菜单中选中“Manage Project Items ...”,出现“Manage Project Items”对话框,一眼就可以看出这是要在工程中创建目录和添加文件了。此处省略若干字,添加好工程后的工程组织结构如下:
new_project_04.png
图6
    这个时候编译肯定是不行的,会报错说是找不到某些文件。我们还需要配置一下头文件的搜索路径。用鼠标左键戳一下工具栏上的魔法棒(见上图红圈),就弹出一个工程选项的对话框,这个对话框我们在配置工程时会经常用到。
    在“Target”标签页下,选中“Use MicroLib”,这是因为我们要使用Keil自带的标准输入输出组件stdio实现串口打印,用了这个,就可以在程序中使用printf和scanf啦,这么好的工具,LiteFwLib怎么能错过呢。
new_project_05.png
图7
    在”Output”标签页中,设定生成的obj文件存放在工程目录“build”中新建的子目录“output”下,把这些细碎的文件都整理到这个目录下,工程目录里会干净不少。当然,最后生成的可执行文件也在这里。“Creat HEX File”的功能我就不多说的,大家根据需要选择。
new_project_06.png
图8
    同样在“Listing”标签页下,设定生成的lst文件也存放在“output”目录下。
    “C/C++”标签页下才是重点,在这里添加头文件的搜索路径。
new_project_07.png
图9
    Keil对路径管理还是相当智能的,在选择路径时,会自动将选中的绝对路径转换成相对路径,这样整个开发包就可以不依赖在电脑中的存放位置了。这里需要加的目录主要有本工程的“application”目录及LiteFwLib开发包提供的“include”、“driver”和“board”目录。
最后一步需要做的配置就是关于调试工具的。切换到“Debug”标签页下,选择使用JLink(这里已经将OpenSDA变身为JLink了,参见坛子里我的另一篇帖子),或者使用OpenSDA也是类似的。
new_project_08.png
图10
    到此为止,第一个工程就创建好啦。我们可以试着编译一下这个工程。
new_project_09.png
图11
    OK,无错无警告,Bingo!
    确保把FRDM-KL25板子连接到电脑上,就可以下载运行了。
new_project_12.png
图12
A oHo,可能会提示下载失败,这是因为刚接上的JLink可能默认识别使用“JTag”调试协议,我们需要把它改为“SWD”协议,OpenSDA变身的Jlink使用串行的调试通信协议,更轻量级。在工程选项对话框中,“Debug”标签页下,我们刚才选择使用JLink的那个下拉菜单右边,有个“Settings”的按钮,戳它一下。
若是在使用JTag协议的情况下,是识别不出来与之对接的目标设备的。切换到“SW”,立马就有内核识别出来了。
new_project_11.png
图13
    使用OpenSDA变身的JLink,在每天第一次启动时都会出现一个提示对话框,“Accept”就OK。
new_project_10.png
图14
最后,显示下载成功。
new_project_13.png
图15
    此时,打开串口终端软件,设定串口通信波特率为115200,8位有效数据,无校验,1位停止位。
new_project_14.png
图16
然后幸福地戳一下FRDM-KL25板子上的复位按键,见证奇迹的时刻到啦。
new_project_15.png
图17
终端上还打印出了这个工程在编译时电脑上的时间。后面的“bbs.elecfans.com”当然是我自己用键盘在终端里输入的啦。
大功告成!

回帖(22)

姜波

2015-1-7 23:11:10
沙发                                       
举报

林璟怡

2015-1-7 23:11:19
!大哥辛苦了!!码了这么多
举报

vvg

2015-1-7 23:17:10
这是一种模块化的方式
举报

王佐坤

2015-1-7 23:22:25
点赞~~~写的挺详细的
举报

Mozie

2015-1-14 21:29:32
群主说:“回帖是一种美德”
举报

sony19900107

2015-1-16 17:55:52
对初学者来说是福音
举报

周经伟

2015-1-19 15:59:40
只有膜拜,不知何时才能成为大神。。
举报

sy0031

2015-1-27 00:44:51
这个功能不错,以后把苏州大学那部分移过来。
举报

suyong_yq

2015-1-27 00:47:30
引用: sy0031 发表于 2015-1-27 00:44
这个功能不错,以后把苏州大学那部分移过来。

苏大的那个。。。汗。。。
举报

魏昌华

2015-2-7 13:22:24
为什么我串口里出来的是乱码呢
举报

魏昌华

2015-2-7 13:23:51
引用: 重仪打工的 发表于 2015-2-7 13:22
为什么我串口里出来的是乱码呢

噢,原来波特率没设置为115200
举报

alphaplayer

2015-3-7 21:07:54
谢谢楼主分享,还是下个pdf但比较舒服
举报

minnuli

2015-4-19 11:13:47
好东西,又学习了。
举报

hedishui

2015-4-19 12:50:42
辛苦了!!码了这么多
举报

冰天雪莲824

2015-4-24 13:27:49
楼主 我的keil mdk4.7安装目录include中怎么找不到MKL25Z4.H之类的.H文件
举报

suyong_yq

2015-4-28 00:49:38
引用: 冰天雪莲824 发表于 2015-4-24 13:27
楼主 我的keil mdk4.7安装目录include中怎么找不到MKL25Z4.H之类的.H文件

不行就用文件搜索功能在mdk的安装根目录下找一下,mdk 4.x安装的时候都会自动把芯片支持的相关文件复制到电脑上的,如果是mdk 5.x 需要安装pack支持包才有芯片支持文件。
举报

life_风雨中

2015-5-2 17:09:44
谢谢楼主分享,感谢
举报

xiaoping5921

2016-2-3 14:43:55
对于初次接触KEIL和FRDM非常具有学习意义,多谢贡献!
举报

马建锋

2016-5-26 22:30:52
Henbucuodeziliao,shiwoxuyaode
举报

更多回帖

发帖
×
20
完善资料,
赚取积分