对于NXP的S32K1xx系列MCU,前面已经介绍过,官方有专门支持该系列MCU开发的IDE工具——S32DS,这个工具还有对应的代码生成配置工具,而且也是官方推荐使用的工具。
S32DS开发环境是基于Eclipse改写的,熟悉Eclipse的话可以很快上手。但是很多人使用MDK-Keil软件更多,所以介绍下怎么使用MDK-Keil环境来开发S32K144.
1. 安装S32K144 Pack包
我们首先要安装S32K1xx的Pack包。Pack包可以到Keil的官网进行下载,也可以通过菜单栏Pack Installer 界面进行下载。
S32K1xx的pack包最新版本是1.5.0,下载官网:
https://www.keil.arm.com/packs/s32_sdk_dfp-keil/boards/
然后点击下载即可。
下载完成之后,双击pack包进行安装:
安装路径默认即可。因为我已经安装过了,所以提示是否替换。
2. 文件准备
在新建S32K144的Keil工程之前,我们需要先把所必需的文件准备好。这些文件无非就是S32K1xx系列MCU的SDK库文件,所以我们首先要去官网下载了S32K1xx的SDK。
可以通过下面的官网链接下载,目前最新的版本是 4.0.3 .
https://www.nxp.com.cn/design/software/development-software/s32-sdk/s32-software-development-kit-for-s32k1:S32SDK-ARMK1
得到SDK之后,我们把所需的文件复制到我们新建工程的目录下面,准备后续使用。
在前面一篇文章中,已经详细介绍了S32K1xx的SDK框架和各个文件夹的作用了。这里不多介绍。
我们把 platform / rtos 这两个文件夹复制到我们要新建Keil工程的目录下,platform 的内容其实就是NXP提供的 S32K1xx 开发的外设驱动库函数,还要启动文件,链接文件等等。rtos目录则是关于通信的外设驱动会使用到信号量、互斥量等内容,然后这个文件有裸机实现的接口,也有基于FreeRTOS进行二次封装实现的。
复制那两个文件夹过来之后,如下:
3. 创建S32K144的Keil应用工程
1)新建工程
1、选择菜单 Project->New Uvision Project… 新建工程
2、选择新建工程的保存路径
3、选择S32K型号,我使用的开发板是NXP的S32K144-EVB开发板,对应的芯片型号就是 S32K144UAxxxLLx ,根据自己手上的硬件选择对应的型号就行。
最后点击OK即可完成新建一个工程了。
2)新建工程目录结构
工程的目录结构因人而异,按照自己的习惯来就好。我自己新建的工程目录结构如下:
目前这些目录还没有加入SDK外设驱动相关的文件。
3)添加文件
给前面新建的工程目录结构,添加相关的文件。
新建一个基本的工程,所需要添加的SDK库文件有:
- 启动代码:包括 startup.c 和 startup_S32K144.S 的汇编文件。
- S32K1xx Peripheral Driver,就是外设驱动代码。基本的工程需要包括以下模块的文件。
- clock:系统时钟初始化配置相关代码
- edma:这个是dma外设,其他模块需要用到dma的接口函数
- interrupt:中断相关API接口函数
- lpuart:这个是串口外设驱动,我们打印调试需要用到
- pins:GPIO外设驱动
- system_S32K144.c 文件
- OSIF接口文件,这个文件是一些通信外设驱动文件需要引导的操作系统接口API,如信号量,互斥量等。
- main.c :用户主函数
我们把上面所需的这些文件,添加到对应的每个工程的目录文件夹中。
4)工程配置
我们点击魔术棒的按钮,然后对工程进行基本的配置。主要就是配置下头文件的路径,还要一些常用的设置就行了。注意的是,我们需要选择AC6版本的编译器,因为NXP最新的SDK选择只支持AC6版本的编译器了。
1、勾选使用 Use MicroLIB ,这样我们可以使用printf函数进行打印调试。
2、配置头文件路径
3、汇编编译器选项添加 START_FROM_FLASH 这个宏定义。
4、选择 .sct 散列文件。
NXP的SDK,里面的代码用到了大量的自定义的外部符号了,而这些符号都是在散列文件中定义的,所以我们需要使用NXP自己写的散列文件。而不能使用MDK-Keil自动生成的散列文件。
5、调试选项的配置
调试器选择自己对应的调试器即可,我使用的是J-Link调试器。
最终,使用MDK-Keil开发S32K144的模板工程就新建好了。
然后我们编译这个工程的结果如下:
提示说有2个警告,都是说这个版本不支持 xxx 什么的符号,我目前还不了解怎么去除这2个警告,先不管他,后面有机会再了解。
后续我就根据这个模板工程,进行S32K144的开发学习了。