在MDK-ARM 5.26/5.27 下新建S32K144程序的步骤 0. 安装MDK-ARM 5.26/5.27 Professional,导入Keil.S32_SDK_DFP.1.2.0.pack 1.新建一个工程,执行Project\Manage\Run-Time Environment选项,打开对话框, 将CMSIS\CORE、Device\Startup 选项打勾,这是最小需求。 2.执行Project\Option for Target 1,弹出对话框。 去掉Use Memory Layout from Target Dialog 的勾选, 并且在Linker\Scatter File中选择S32K144_64_flash.sct或S32K144_64_flash_AC6.sct。 3.新建一个test.c,加入到Source Group 1中,添加如下代码 #include "device_registers.h" /* Device header */ int main(void) { while(1); } 4.如果编译不能通过,在Preprocessor Symbols中添加芯片型号定义"CPU_S32K144LFT0MLLT"。 5.如果找不到头文件,在Include Paths下增加"C:\Keil_v5\ARM\PACK\ARM\CMSIS\5.4.0\CMSIS\Include"。 6.有些产品,由于低端地址存在bootloader,所以应用程序的起始地址需要加偏移。 这里修改S32K144_64_flash_AC6.sct文件如下: #if (defined(__ram_vector_table__)) #define __ram_vector_table_size__ 0x00000400 #else #define __ram_vector_table_size__ 0x00000000 #endif #define application_address 0x00008000 #define m_interrupts_start (0x00000000 + application_address) #define m_interrupts_size 0x00000400 #define m_flash_config_start (0x00000400 + application_address) #define m_flash_config_size 0x00000010 #define m_text_start (0x00000410 + application_address) #define m_text_size (0x00080000 - m_text_start) #define m_interrupts_ram_start 0x1FFF8000 #define m_interrupts_ram_size __ram_vector_table_size__ #define m_data_start (m_interrupts_ram_start + m_interrupts_ram_size) #define m_data_size (0x00008000 - m_interrupts_ram_size) #define m_data_2_start 0x20000000 #define m_data_2_size 0x00007000 后边内容省略,主要的修改是增加application_address 宏定义,并将程序整体按照这个宏定义的值进行偏移。 这个.sct文件修改后,将应用程序编译,下载到芯片中和bootloader一起运行,测试是OK的。 7. 仿真调试说明 建议使用JLINK V9.4尤其是JLINK V10等USB2.0高速通信的仿真器进行仿真调试。 在仿真器调试时,可以将application_address 设为0,直接进行调试。 如果application_address 不为零,而且需要调试,需要使用一个和Dbg_RAM.ini类似的配置文件 Dbg_FLASH.ini,其内容如下: /*---------------------------------------------------------------------------- * Name: Dbg_FLASH.ini * Purpose: Flash Debug Initialization File (with bootloader) *----------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------- Setup() configure PC & SP for Flash Debug (with bootloader) *----------------------------------------------------------------------------*/ FUNC void Setup (void) { SP = _RDWORD(0x00008000); // Setup Stack Pointer PC = _RDWORD(0x00008004); // Setup Program Counter _WDWORD(0xE000ED08, 0x00008000); // Setup Vector Table Offset Register } FUNC void OnResetExec (void) { // executes upon software RESET Setup(); // Setup for Running } load %L incremental Setup(); // Setup for Running g, main 8. 最后,推荐使用S32 DS开发环境,这个开发环境集成了PE工具,可以自动生成底层驱动代码, 还可以在S32 DS环境下使用IAR编译器。MDK-ARM环境对汇编启动文件修改很大,隐藏了很多细节。