参考:IMX+RT开发实战指南
1、新建本地工程文件夹
新建4个文件夹
名称 | 作用 |
doc | 用来存放程序说明的文件,由写程序的人添加 |
libraries | 存放的是库文件 |
project | 用来存放开发环境相关的工程文件 |
user | 用户编写的驱动文件 |
在本地新建好文件夹后,把准备好的库文件添加到相应的文件夹下,即从 SDK 固件库里面把这些文件拷贝到我们新建的工程下的文件夹里面。
doc
必读说明.txt。 这个文件我们自己手动新建, 可要可不要,主要为了方便以后对本工程编写说明。
libraries
CMSIS 文件夹: 里面放着跟 ARM 内核有关的 CMSIS 标准库文件, 直接从固件库里面拷贝。
devices\MIMXRT1052\ cmsis_drivers 文件夹: RT1052 兼容 CMSIS 标准的部分外设库文件,直接从固件库里拷贝
。
devices\MIMXRT1052\ drivers 文件夹: RT1052 外设库文件, 直接从固件库里面拷贝。
devices\MIMXRT1052\ utilities 文件夹: RT1052 的常用调试工具,直接从固件库里面拷贝。
devices\MIMXRT1052\ xip 文件夹:使用 XIP 功能时需要的启动或加载驱动程序,直接从固件库里面拷贝。
fsl_device_registers.h、 MIMXRT1052.h、 MIMXRT1052.xml、MIMXRT1052_features.h、 system_MIMXRT1052.c
和system_MIMXRT1052.h 文件: RT1052 固件库的全局文件,直接从固件库里面拷贝。
project
gcc 文件夹: ARM GCC 编译器相关的启动文件及分散加载文件。
iar 文件夹: IAR 开发环境相关的启动文件及分散加载文件。
mcuxpresso 文件夹: MCUXpresso 开发环境相关的启动文件及分散加载文件。
mdk 文件夹: MDK(Keil)开发环境相关的启动文件及分散加载文件。
(1) 从 SDK 的 boards\evkbimxrt1050\demo_apps\hello_world\mdk 目录复制如下文件加入到 mdk 文件夹:
evkbimxrt1050_flexspi_nor.ini、 evkbimxrt1050_ram.ini、evkbimxrt1050_sdram_init.ini、 evkbimxrt1050_sdram_txt_init.ini
(2) 新建 nor_txt_ram 文件夹,在该文件夹下再分别新建空的 Listings 及
Objects 文件夹。
user
bsp 文件夹:用来放置以后编写的驱动文件,手动新建空的文件夹待用。
xip 文件夹:用来放置 FLASH 程序存储器、启动相关的文件。该目录下的文件是我们根据官方的 xip 文件进行定制的,它包含以下文件:
fire_imxrt1052_sdram_ini_dcd.c\h fire_imxrt1052_spiflash_config.c\h fsl_flexspi_nor_boot.c\h当你自己尝试新建工程时,
请直接从我们的这个例程中直接复制所有xip 目录中的内容,这部分与官方的是不一样的。
board.c\h、 clock_config.c\h、 peripherals.c\h 及 pin_mux.c\h 文件:直接从SDK 的 boards\evkbimxrt1050\project_template 目录中拷贝。
main.c 文件: main 函数文件, 这个文件我们自己手动新建,不用固件库
里面配套的。
复制 CMSIS 文件夹至工程的 libraries 目录
复制固件库主体至工程的 libraries 目录
复制固件库主体至工程的 libraries 目录,并将arm重命名为mdk,gcc重命名为armgcc,内容不变。
复制调试相关的文件至工程的 mdk 目录
在 mdk 目录下创建包含 Listings 和 Objects 的 nor_txt_ram 文件夹
复制官方 demo 的 project_template 文件至工程的 user 目录(新建空BSP文件夹,空的main.c文件待用,其他文件从SDK中复制到工程目录。)
xip目录文件比较特殊,根据官方目录文件进行定制的。定制时需要根据开发板中的 FLASH 存储器芯片进行了修改。测试的时候可以拷贝过去。
开始新建工程:
把 MDK 的工程文件保存至 project\mdk 目录下
选择NXP芯片型号。(如果没有出现相应的芯片型号,则KEIL5 没有添加 RT1052 芯片包),请去ARM官网下载。见https://blog.****.net/ldinvicible/article/details/90287774文档描述。
在线添加是从 ARM 的官方网站下载, 且其服务器在国外,下载会非常慢,点击 Cancel 关闭。
1、将新建的工程中添加7个组文件夹,用来存放各种不同的文件。文件从本地建好的工程文件夹下获取,双击组文件夹就会出现添加文件的路径,然后选择文件即可,添加时主要是添加 C 源文件和 S 汇编文件, H 头文件可以不添加,正常编译工程后相应的头文件会自动添加到包含它的 C 文件“+”号下。
CMSIS | 存放 system_MIMXRT1052.c 文件 |
startup | 存放汇编的启动文件: startup_MIMXRT1052.s |
drivers | 与 RT1052 外设相关的库文件 fsl_common.c fsl_clock.c fsl_gpio.c fsl_lpuart.c fsl_iomuxc.h 以及以后会追加的 fsl_xxx.c 文件(xxx 代表外设名称) |
utilities | 存放开发调试相关的工具文件 fsl_assert.c fsl_debug_console.c fsl_notifier.c fsl_sbrk.c fsl_shell.c fsl_str.c fsl_log.c fsl_io.c |
board | 存放官方的板级配置文件 board.c clock_config.c pin_mux.c |
user | 用户编写的文件: main.c: main 函数文件,暂时为空 |
xip | 启动和程序存储器相关的文件: fire_imxrt1052_sdram_ini_dcd.c fire_imxrt1052_spiflash_config.c fsl_flexspi_nor_boot.c |
doc | 必读说明.txt:程序说明文件,用于说明程序的功能和注意事项等 |
添加后效果
配置魔术棒选项卡
很多人串口用不了 printf 函数,编译有问题,下载有问题,都是这个步骤的配置出了错。
Target 选项卡
在 Target 选项卡中选中微库“Use MicroLIB”,为的是在日后编写串口驱动的时候可以使用 printf 函数。而且有些应用中如果用了 RT1052 的浮点运算单元 FPU,一定要同时开微库,不然有时会出现各种奇怪的现象。 FPU 的开关选项在微库配置选项下方的“Use Double Precision”中,默认是开的。
Output 选项卡
Output 中把输出文件夹定位到我们工程目录下的“mdk\nor_txt_ram\Objects”文件夹,这样编译后生成的文件就会被存储到该文件夹中。如果在编译的过程中生成 hex 文件,那么那 Create HEX File 选项勾上。把“Browse Information”选项取消勾选,否则编译时间非常长,取消勾选后会无法使用程序的“Go To Definition…”的跳转定义浏览功能,需要时可把它勾选上然后重新编译程序。
Listing 选项卡
在 Listing 选项卡中把输出文件夹定位到我们工程目录下的“mdk\ nor_txt_ram \Listings”文件夹,编译后生成的链接信息文件就会被保存至该目录。
C/C++选项卡
在 C/C++选项卡中添加预定义宏及编译器编译的时候查找的头文件路径;.
1、在“Define”框中添加预定义宏。此处我们加入如下的宏(在输入时不要加回车,此处添加回车只是方便阅读)
CPU_MIMXRT1052DVL5B,XIP_EXTERNAL_FLASH=1,XIP_BOOT_HEADER_ENABLE=1,XIP_BOOT_HEADER_DCD_ENABLE=1,PRINTF_FLOAT_ENABLE=1,SCANF_FLOAT_ENABLE=1,PRINTF_ADVANCED_ENABLE=1,SCANF_ADVANCED_ENABLE=1
注意两个宏之间使用英文逗号分隔开
宏“CPU_MIMXRT1052DVL5B” , 用于指定本程序的 CPU,在固件库“fsl_device_registers.h”文件中有根据该宏来决定对应芯片代码的预编译分支。
宏 XIP_EXTERNAL_FLASH=1, XIP_BOOT_HEADER_ENABLE=1,XIP_BOOT_HEADER_DCD_ENABLE =1” , 用于指示本程序的代码存储在外部的 FLASH 存储器中,且使用 XIP 组中的启动配置(XIP 组下的各文件包含这些宏的判断分支),在工程中的 clock_config.c 文件会根据XIP_EXTERNAL_FLASH 宏来决定是否开启 flexspi 外设的时钟。
宏“PRINTF_FLOAT_ENABLE=1, SCANF_FLOAT_ENABLE=1,PRINTF_ADVANCED_ENABLE=1, SCANF_ADVANCED_ENABLE=1”,它们用于配置库函数重新定义的“PRINTF”和“SCANF”函数是否支持浮点数的功能。
2、在“Include Paths”处添加头文件路径。固件库依赖非常多的头文件
..\..\libraries\CMSIS\Include
..\..\libraries\drivers
..\..\libraries\utilities
..\..\libraries\utilities\str
..\..\libraries\utilities\log
..\..\libraries\utilities\io
..\..\libraries\utilities
..\..\libraries\xip
..\..\libraries\
..\..\user
..\..\user\bsp
在“Misc Controls”处添加编译器配置。为了正常编译或减少部分编译警告提示,需要在此处增加如下配置。
--library_interface=armcc --library_type=standardlib --diag_suppress=66,1296,186
Asm 选项卡
在 Asm 选项卡中包含有 Asm 汇编器相应的配置
Linker 配置
Linker 选项卡包含对链接器的配置,链接器对 C/C++及 ASM 汇编器生成的*.o 目标文件链接得到最终的可执行程序文件。
在这个 Linker 选项卡中我们主要设置链接使用的存储器分配文件。 KEIL 会根据我们的芯片型号设置一个默认的存储器分配文件,但我们要使用的是前面复制到工程目录 mdk 下的 MIMXRT1052xxxxx_flexspi_nor 文件,所以需要重新配置,配置方法是在 Linker 选项框中取消勾选“Use Memory Layout from TargetDialog”选项,然后打开 Scaltter File 栏右侧的按钮把 MIMXRT1052xxxxx_flexspi_nor 添加进去。
修改存储器分配文件。这个 MIMXRT1052xxxxx_flexspi_nor 存储器分配文件是适配官方评估版的,针对特定开发板的存储器,需要进行修改,点击选项框中的“Edit”按钮会弹出该文件的内容,然后直接编辑即可,
添加忽略警告提示。在同样的选项框下“disable Warnings”添加对忽略 6314 类型警告的配置,否则在后面编译时经常会提示分配的部分存储器没有使用的警告,比较烦人,可以忽略。
添加 Misc controls 配置。在分散加载文件中部分存储器节区是属于 xip 组文件的,该组文件中的内容与主体程序无调用关系,所以为了防止被编译器优化而删除,需要在 Misc controls 配置中添加如下保持节区的指令:
--keep=*(.boot_hdr.conf)
--keep=*(.boot_hdr.ivt)
Debug 选项配置
Utilities 选项配置
Debug Settings 选项配置
选择目标存储器下载算法
在“Debug Settings”弹出的“FLASH Download”选项卡中还需要选择目标存储器下载算法,具体要根据板子上使用的 FLASH 型号来决定。
设置下载算法空间(库函数版)
Flash Download 页面的说明
给 main 文件添加内容
可以从 SDK 中的如下目录中拷贝样例程序“hello_world”的 hello_world.c 文件内容至此进行测试
编译下载
编译报错,选择的芯片和宏不对应,增加宏CPU_MIMXRT1052DVL6A,
头文件要增加完,否则编译不成功
..\..\libraries\CMSIS\Include
..\..\libraries\drivers
..\..\libraries\utilities
..\..\libraries\utilities\str
..\..\libraries\utilities\log
..\..\libraries\utilities\io
..\..\libraries\utilities
..\..\libraries\xip
..\..\libraries\
..\..\user
..\..\user\bsp
使用 RAM 及 SDRAM 版本的注意事项
由于“debug” 版本的工程仅用于调试且并没有定制下载的相关配置,所以要使用时不能像 NorFlash 版本的工程那样直接点击 Load 按钮下载程序到开发板运行,而只能点击Debug 按钮进入调试模式进行仿真。