查看: 4342|回复: 6

[原创] FRDM-KL02Z评测(2)从零开始创建HelloWorld工程

[复制链接]
  • TA的每日心情
    奋斗
    2017-1-17 10:45
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    38

    主题

    395

    帖子

    3

    高级会员

    Rank: 4

    积分
    780
    最后登录
    2023-11-17
    发表于 2015-8-30 21:11:11 | 显示全部楼层 |阅读模式
    本帖最后由 suyong_yq 于 2015-8-30 21:13 编辑


    最近在百度里搜东西发现“百度经验”这个栏目,讲解做成某一件事情的步骤,图文并茂,短小精悍,非常实用。这里我也打算借用一下它那个形式,描述从零开始创建HelloWorld的步骤。


    材料:
    - Windonws 7 Professional 32-bit
    - Keil v5集成开发环境及最新版Freescale KL系列单片机支持包
    - FRDM-KL02Z开发板
    - JLink驱动程序
    - Tera Term通信软件,只使用其串口通信部分功能。使用其它的上位机的串口通信软件也行。


    步骤一:准备开发环境


    1. 安装Keil集成开发环境及Freescale KL系列单片机及最新版Freescale KL系列单片机支持包,略。
    2. 安装JLink驱动程序,略。
    3. 将FRDM-KL02Z开发板的OpenSDA调制组件的固件更新成Jlink,略。


    步骤2:准备源代码文件


    自己创建一个新的文件夹,例如“D:\frdmkl02z\”,作为专门存放工程及源代码文件的根目录


    1. CMSIS内核及芯片头文件
    在根目录下创建“chip”子文件夹,然后从Keil软件的安装目录中找到相关文件复制到新创建的文件夹下。

    从“C:\Keil_v5\ARM\Pack\ARM\CMSIS\4.2.0\CMSIS\Include”目录下复制文件包括:
    core_cm0plus.h
    core_cmFunc.h
    core_cmInstr.h

    从“C:\Keil_v5\ARM\Pack\Keil\Kinetis_KLxx_DFP\1.4.0\Device\Include”目录下复制文件包括:
    MKL02Z4.h
    system_MKL02Z4.h

    在“chip”文件夹下创建“fsl_device_registers.h”文件,包含“MKL02Z4.h”。这样做是为了能够对多平台进行抽象,其它源文件需要访问芯片寄存器时只要包含“fsl_device_registers.h”,而不需要在代码上识别不同的芯片,此处为后面复用KL25/KL26的驱动带来了很多方便。

    #ifndef __FSL_DEVICE_REGISTERS_H__
    #define __FSL_DEVICE_REGISTERS_H__
    #include "MKL02Z4.h"
    #include "core_cm0plus.h"
    #endif /* __FSL_DEVICE_REGISTERS_H__ */


    2. 系统启动文件

    Keil很贴心地提供了单片机芯片的启动文件,使用一组预定义的配置初始化时钟组件,帮用户搞定main函数之前的事情,这样用户只要编写main函数就可以了。

    在项目根文件夹下创建“board”子文件夹,将从Keil安装目录下找到的启动文件复制到这里。

    从“C:\Keil_v5\ARM\Pack\Keil\Kinetis_KLxx_DFP\1.4.0\Device\Source”目录下复制文件包括:
    system_MKL02Z4.c

    从“C:\Keil_v5\ARM\Pack\Keil\Kinetis_KLxx_DFP\1.4.0\Device\Source\ARM”目录下复制文件包括:
    startup_MKL02Z4.s


    至此,我没有编写一行代码,就从Keil中搞到main函数之外的所有必要代码,建立一个空的Keil工程,把这这些文件都包含进去,自己再新增一个main.c文件,里面写一个空的main.c函数就可以编译出一个最基本的但是完整的KL02工程了。一般到这个时候我都会试着编译并运行一下,验证工程的配置和基础代码运行是否正确,程序能跑到main函数里就说明工程搭建成功。

    image_01.png
    图1


    这个时候可以调整一下启动时钟。默认使用的一般是片内低速RC振荡器作为初始时钟源,在通常情况下会换用外部的晶振作为时钟源,原因无他,要么更快,要么更准。调整启动时钟选项通过更改“system_MKL02Z4.c”文件中的“CLOCK_SETUP”的值配置,具体设定成多少可以看代码里的注释说明。调整时候后再试着在芯片上运行一下程序,如果工作正常,可以跑到main函数。


    步骤三:添加驱动程序、板子配置代码及应用程序


    本阶段使用的代码是之前写KL25/KL26的程序中已经做好的,基本上可以直接拿来用。各位看官可能是第一次碰到这些代码苦于无处寻找,别担心,我已经把完成的程序打包放在附件中了,这里只是知道这些代码的由来即可。


    之前玩KL25和KL26的时候写过不少模块的驱动程序,UART串口驱动程序肯定是必备了。KL02的UART串口跟KL25是一样的,HelloWorld的应用逻辑也完全一样,直接拿来用就好。板子配置文件的源代码大体上差不多,改改也能用。


    1. 复制驱动程序
    在工程根目录下创建“driver”子文件夹,复制UART串口驱动文件fsl_uart.h/.c存放于次。


    2. 复制板子配置文件
    在根目录下的“board”的子文件,复制bsp_config.h/.c于此,然后根据FRDM-KL02Z板子的情况修改其中的配置,主要包括芯片运行的内核时钟、系统时钟、各外设的应用引脚等信息,对着原理图和引脚复用表格就可以搞定。


    3. 复制应用程序文件
    在根目录创建“example\01_UART_HelloWorld\application”一系列子文件夹,将main.c和app_inc.h文件复制于此。

    至此,所有的源文件都齐全了。


    步骤四:配置Keil工程


    将所有必须的头文件都添加到Keil工程中后,还需要对工程组织文件配置一下,才能让开发板正常地地打印“HelloWorld”。同时还会配置调试器选项及一些杂项内容。


    1. 在工程组织文件中包含必要的源文件
    在样例工程中提供的一个参考的组织方式如下所示。

    image_02.png
    图2


    2. 配置头文件引用路径
    这部分在前面已经用到了,主要保证所有的头文件目录都被包含到工程中即可。


    3. 配置使用“MicroLib”库
    “MicroLib”库是Keil自带的一个精简版的标准C库的实现,适用于单片机应用,占用空间更少。

    image_03.png
    图3


    4. 启用“C99”选项
    使用较新的C语言标准可以支持一些新的标准用法,比如说对结构体按照字段赋初值,在代码中间定义变量等。

    image_04.png
    图4


    5. 配置使用Jlink调试器

    image_05.png
    图5

    注意要使用SWD连接方式。

    image_06.png
    图6


    步骤5:运行程序


    用调试或是直接下载的方式都可以将程序下载到板子上,略。

    打开Tera Term软件,打开识别出来的串口,配置通信属性。

    image_07.png
    图7

    复位芯片,运行程序。此时串口终端输出欢迎信息。

    image_08.png
    图8


    搞定收工!



    附件:
    样例工程及源码: LiteFwLib_frdmkl02z.zip (241.22 KB, 下载次数: 55)

    评分

    参与人数 1NXP金币 +30 收起 理由
    小七 + 30 打赏!

    查看全部评分

    回复

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    15290
    最后登录
    1970-1-1
    发表于 2015-8-30 21:35:27 | 显示全部楼层
    楼主很强大哈,自己写固件库,期待分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-2-9 14:16
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    25

    主题

    1785

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2245
    最后登录
    2024-4-12
    发表于 2015-8-31 11:34:13 | 显示全部楼层
    不错,自制固件库,期待
    freescaleic.org.png
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-5-3 11:19
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    50

    主题

    1万

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    14090
    最后登录
    2024-4-19
    发表于 2015-9-1 09:46:19 | 显示全部楼层
    楼主如果能把固件库制作成keil里的pack那就更爽了。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-1-17 10:45
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    38

    主题

    395

    帖子

    3

    高级会员

    Rank: 4

    积分
    780
    最后登录
    2023-11-17
     楼主| 发表于 2015-9-1 15:52:00 | 显示全部楼层
    党国特派员 发表于 2015-9-1 09:46
    楼主如果能把固件库制作成keil里的pack那就更爽了。

    那估计得给Keil好多赞助费吧。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-5-3 11:19
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    50

    主题

    1万

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    14090
    最后登录
    2024-4-19
    发表于 2015-9-1 17:04:54 | 显示全部楼层
    suyong_yq 发表于 2015-9-1 15:52
    那估计得给Keil好多赞助费吧。

    不用。我之前用GD32的做过。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-1-17 10:45
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    38

    主题

    395

    帖子

    3

    高级会员

    Rank: 4

    积分
    780
    最后登录
    2023-11-17
     楼主| 发表于 2015-9-1 18:13:45 | 显示全部楼层
    党国特派员 发表于 2015-9-1 17:04
    不用。我之前用GD32的做过。

    第三方插件吧,那个倒是真不错的。不过我主要还是专注在折腾代码上,根本原因在于懒,惭愧。。。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-29 17:36 , Processed in 0.129490 second(s), 27 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表