本帖最后由 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”目录下复制文件包括:
从“C:\Keil_v5\ARM\Pack\Keil\Kinetis_KLxx_DFP\1.4.0\Device\Source\ARM”目录下复制文件包括:
至此,我没有编写一行代码,就从Keil中搞到main函数之外的所有必要代码,建立一个空的Keil工程,把这这些文件都包含进去,自己再新增一个main.c文件,里面写一个空的main.c函数就可以编译出一个最基本的但是完整的KL02工程了。一般到这个时候我都会试着编译并运行一下,验证工程的配置和基础代码运行是否正确,程序能跑到main函数里就说明工程搭建成功。
图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. 在工程组织文件中包含必要的源文件 在样例工程中提供的一个参考的组织方式如下所示。
图2
2. 配置头文件引用路径 这部分在前面已经用到了,主要保证所有的头文件目录都被包含到工程中即可。
3. 配置使用“MicroLib”库 “MicroLib”库是Keil自带的一个精简版的标准C库的实现,适用于单片机应用,占用空间更少。
图3
4. 启用“C99”选项 使用较新的C语言标准可以支持一些新的标准用法,比如说对结构体按照字段赋初值,在代码中间定义变量等。
图4
5. 配置使用Jlink调试器
图5
注意要使用SWD连接方式。
图6
步骤5:运行程序
用调试或是直接下载的方式都可以将程序下载到板子上,略。
打开Tera Term软件,打开识别出来的串口,配置通信属性。
图7
复位芯片,运行程序。此时串口终端输出欢迎信息。
图8
搞定收工!
附件: |