S32KSDK使用详解之KeilMDK开发S32K1xx系列MCU应用程序(使用ProcessorExpert配置SDK)汽车电子expert成长之路电子技术应用AET中国科技核心期刊

1.通过KeilIDE的PackInstaller在线安装S32KSDKpack

2.升级KeilPack中EAR0.8.6的S32K14xSDK到RTM2.0.0版本

2.1通过packSDK安装目录下的ReleaseNotes确定SDK版本

2.3将KeilpackSDK安装目录下的middleware、platform和rtos三个文件夹替换为RTM2.0.0SDK的,以实现SDK升级

3.新建S32K的Keil应用工程并选择使用SDK

3.1创建S32K的Keil应用工程

3.2选择和配置S32KSDK驱动

4.在S32DSforARMv2018.R1中使用ProcessorExpert图形化配置生成SDK驱动配置文件

4.1新建S32K144的S32DS应用工程并选择使用S32K14xSDKRTM2.0.0

4.2从ProcessorExpert的ComponentLibrary中添加SDK驱动组件

4.3根据S32K144-EVB硬件设计配置SDK组件

4.4生成SDK配置代码

4.5将ProcessorExpert生成的S32KSDK配置代码拷贝添加到Keil应用工程中

5.设置S32KKeil应用工程选项与在Keil中调用S32KSDK

5.1设置Target使用MicroLIBC语言库

5.2设置KeilC/C++编译器配置

5.3设置Keil汇编代码编译器配置

5.4设置Linker的链接文件使用SDK提供的S32K144_64_flash.sct

5.5调用S32K14xSDK驱动及添加测试应用程序

①用户按键GPIO输入中断ISR

②main()函数调用时钟初始化、GPIO引脚初始化、GPIOIRQ中断使能及ISR安装、ADC模块初始化和自校准(AutoCalibration)以及LPUART串口初始化函数

③main()函数主循环中调用ADC软件触发采样转换及转换结果读取API,并将结果通过LPUART串口阻塞发送API函数发送给PC电脑

5.6编译KeilSDK应用工程

6.使下载调试和测试S32K的KeilSDK应用工程

6.1设置编译目标为Flash,将应用程序下载到S32KFlash中进行调试,掉电程序不丢失

6.2设置编译目标为SRAM,将应用程序下载到S32KSRAM中进行调试,掉电后程序丢失

总结

ARM公司的Keil,也被称为KeilMDK(MicrocontrollerDevelopmentKit)集成开发环境(IDE)是很多ARM内核控制器开发者的首选工具链,原因如下:

①Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。其方便易用的集成环境、强大的软件仿真调试工具让MCU的应用工程开发事半功倍;

②Keil是与IAR齐名的专业MCU编译器,其编译效率非常高,并对业界的几乎所有调试器(debugger)都支持,相对GHS和Windriver来说,性价比较高;

④KeilIDE的ARM编译器的界面保持了与之前C51编译器一致,都十分简洁易用,让很多之前使用51单片机的庞大用户群体能够无缝升级;

NXP的S32K1xx系列汽车级通用MCU,使用ARMCortexM0+/M4F内核,也当然可以使用KeilMDK开发其应用程序,但是在NXP提供的SDK中,并不直接支持KeilMDK:

然而,Keil公司在2017年年底通过其packinstaller提供过一般SDK的支持包:一方面,其使用的SDK版本是EAR0.8.6,是早期版本,存在很多bug,因此,并不推荐用户使用;另一方面,Keil中无法像S32DSIDE一样使用ProcessorExpert对S32KSDK进行图形化配置从而自动生成SDK驱动配置文件;

为此,本文详细介绍KeilIDE中S32KSDK的pack安装、SDK升级至RTM2.0.0、使用S32DSIDE的ProcessorExpert为S32KKeil应用工程配置S32KSDK,S32K的Keil应用工程编译器、链接器设置,编译链接和调试等,并提供了配套的demo工程供大家参考学习,希望对大家有所帮助。

下载安装MDK(Keil5)IDE,这里使用最新的Keilv5.27。只有Keilv5.24及以上版本才支持S32K1xx系列MCU。

打开安装好KeilIDE,在下图中点击其菜单栏PackInstaller的快捷图标即可打开补丁包安装器:

然后,在补丁包安装器--PackInstaller,在线(online)搜索S32K下载安装其最新的SDKpack,请保持电脑网络连接正常:

安装完成后,结果如下:

这样S32KSDK作为Pack,就被安装在Keil的安装目录下了。其中,

通过检查每个安装目录下的ReleaseNotes.pdf,可以确定该pack中的SDK版本:

可以发现,Keil的pack中包含的SDK版本较老,还是EAR0.8.6的,并非推荐使用的RTM版本。所以需要更换为最小的RTM版本,这里替换为S32K14xRTM2.0.0,具体方法和步骤如下:

①目录platform/devices/S32K144/startup下的arm文件夹

Tips:该文件夹包含个partnumber的启动汇编文件--startup_S32K14x.s,需要备份S32K142/4/6/8相应子目录以支持整个S32K14x系列:

②目录platform/devices下的startup.c启动文件

③目录platform/devices/S32K144/linker下的arm文件夹

Tips:该文件夹包含个partnumber链接文件--*.sct,分散加载文件,需要备份S32K142/4/6/8相应子目录以支持整个S32K14x系列:

④目录platform/drivers/src/interrupt下的interrupt_manager.c文中断管理器驱动源文件

①将KeilpackSDK安装目录下的middleware、platform和rtos三个文件夹删除:

②然后,将S32DSforARMv2018.R1安装目录下S32K14x_RTM_2.0.0文件夹下的middleware、platform和rtos三个文件夹拷贝到Keil的S32Kpack安装目录下:

使用该压缩包,大家可以省略步骤2.2的备份工作;

大家将其下载后,在2.4步骤,将压缩包拷贝到KeilpackSDK安装根目录下,右键->解压到当前文件夹(X),覆盖新的SDK即可完成升级最后一步Keil工具链移植代码恢复:

在解压过程中确认文件替换窗口中,选择“全部选是(A)”:

选择菜单Project->NewUvisionProject...创建应用工程:

选择保存路径,并输入应用工程名,点击“save”保存:

选择MCU型号(Device)和软件pack,这里测试硬件平台使用S32K144EVB,其partnumber为FS32K144UAVLL,LQFP-100引脚封装,故选择S32K144UAxxxLLx即可:

Tips:在以上窗口中,可以通过搜索快速找到具体的partnumber,S32K1xx系列MCU的partnumber命名规则如下:

在Keil的ManageRun-TimeEnvironment窗口中,选择需要使用到的SDK驱动和BSP及中间件协议栈等;

这里,为了测试S32K144-EVB的ADC模拟输入、GPI按键输入和LED输出以及LPUART窗口通信,选择如下:

BoardSupport(BSP):(S32K144-EVB)

Tips:不能选择这里的BSPAPI,因为其调用的还是老版本SDKERA0.8.6的驱动,其与我们更新的RTM2.0.0不兼容;

Device:

eDMA:由ADC驱动、LPUART及其他通信外设驱动使用;

Device->SDKDriver中选择的SDK驱动具体如下:

Tips:在选择SDK驱动时,Keil会Validate用户的选择,找出其中的依赖关系,比如选择S32K144-EVB的LED组件时,其依赖其SDK的PINDriver和Clock驱动,点击“Resolve”即可自动选择添加相应SDK驱动:

Tips:Keil应用工程的SDK配置可以在开发过程中随意增加和删除,通过KeilIDE的ManageTun-TimeEnvironment快捷图标即可打开:

选择好SDK驱动之后,其相应的底层驱动代码就会被添加到应用工程中:

在S32DSforARMv2018.R1中新建一个S32K144的应用工程,选择使用同样的S32K14xSDKRTM2.0.0:

为了配置生成Keil应用工程中SDK驱动的配置文件,在S32DS应用工程中,添加相应的SDK组件--ADC、LPUART,PINS、Clock_Manager、Interrupt_Manager、eDMA和osif等:

根据S32K144-EVB的以下硬件设计:

S32K144-EVB上有一颗三色RGBLED,低电平点亮,高电平熄灭:

RGBLED的S32K144MCU引脚分配如下表:

RGBLED

S32K144GPIO

方向

BLUE

PTD0

输出

RED

PTD15

RGEEN

PTD16

S32K144-EVB设计了两个下拉到地的用户机械按键作为GPIO输入,可做GPIOIRQ上升沿中断测试:

USERBUTTONS的S32K144MCU引脚分配如下表:

USERBUTTONS

BTN0

PTC12

输入下拉

PTC13

S32K144-EVB设计了一个5K的滑动变阻器连接到S32K144MCU的ADC0的12通道,以测试ADC模拟信号采集转换功能:

外部滑动变阻器的S32K144MCU引脚分配如下表:

外部滑动变阻器

ADC通道

POTENTIOMETER

PTC14

ADC0_SE12

S32K144的LPUART连接到S32K144-EVB的板载OpenSDA虚拟串口:

LPUART1的S32K144MCU引脚分配如下表:

LPUART1

TXD

PTC7

输入

RXD

PTC6

完成以上SDK驱动组件配置后,点击GenerateCode,即可生成需要的SDK配置代码:

Tips:在S32DSIDE应用工程中,打开任意C代码源文件,在编辑窗口中,右键->ShowIn->SystemExplorer,即可在Windows的资源管理器中打开其所在的文件夹目录:

在Keil应用工程工程根目录下新建ProcessorExpert_Generate_SDK_ConfigFiles和Application文件夹,并将S32DS应用工程中ProcessorExpert配置生成的代码和main.c拷贝到相应目录下:

并在Keil工程中,创建两个同名的group,将相应目录下的所有文件添加到Keil应用工程中:

若在应用程序中要使用C语言标准库,比如stdio.h中的标准输入输出函数,则需要使能使用MicroLIB库,方法如下:

在Keil工程的目标选项(OptionsforTarget)的Target一栏勾选UseMicroLIB选项如下:

在Keil工程的目标选项(OptionsforTarget)的C/C++一栏设置其C/C++编译器选项如下:

在Keil工程的目标选项(OptionsforTarget)的Asm一栏设置其汇编编译器选项如下:

在linker设置中,将默认的"UseMemoryLayoutfromTargetDialog"选项去勾选,然后手动选择S32K144_64_flash.sct作为工程链接文件(ScatterFile,分散加载文件):

完成以上设置之后,在keil应用工程中就可以使用S32K14xSDK了,只需要在调用SDK驱动的C源代码文件中,包含Cpu.h头文件即可:

#include"Cpu.h"

针对本例测试,在main.c中添加如下代码:

①用户按键GPIO输入中断IST

Tips:以上代码中使用了S32K14xSDK的中断管理器(Interrupt_Manager)组件的中断ISR安装API函数--INT_SYS_InstallHandler(),故需要将MCU的中断向量表重映射到SRAM中,所以需要修改工程的分散加载文件--,S32K144_64_flash.sct在其开始处定义宏--__ram_vector_table__:

#define__ram_vector_table__1

完成以上代码之后,编译即可:

选择编译和调试目标为“S32K144_DebugFlash”进行编译:

编译完成后,在工程目标选项的Debug配置中,选择使用合适的硬件调试器:

然后又点击Keil菜单栏的调试进入图标,即可进入调试,并运行至默认的main()函数第一行的断点:

全速运行,或者重新复位S32K144-EVB板,即可发现测试功能工作正常:

Tips:Keil除了可以支持ULINK和JLINK这样的专业调试器对S32K系列MCU进行程序下载和调试器之外,还支持使用S32K144-EVB板载OpenSDA或者PEMicro的U-Multink作为调试器下载和调试S32K的KeilSDK应用工程。

具体方法和配置,请参考Keil官网通过的以下应用笔记(其中还包含了诸多KeilIDE的编译器使用和Debugger软件使用Tips,是学习KeilIDE不可多得的参考资料,强烈推荐):

选择编译和调试目标为“S32K144_DebugRAM”重新编译应用工程:

然后,在工程目标选项的Debug配置中,选择使用合适的硬件调试器:

Tips:这里实现将程序加载到MCUSRAM中进行调试的关键是:在以上配置界面中,去勾选“loadApplicationatStartup”,选择InitializationFile,使用工程根目录下的Dbg_RAM.ini初始化脚本,其通过控制脚本实现了从编译结果*.axf中读取并设置CPU内核堆栈指针(SP),程序计数器(PC)和中断向量表偏移地址(VTOR)设置,复位并加载编译器结果到MCUSRAM以及脚本命令控制运行到main()函数等工作:

DebugRAM的调试结果如下:

与DebugFlash一样,可以实现相同的调试功能,全速运行,测试结果与DebugFlash一致。

Tips:DebugRAM时,中断向量表和应用程序被编译到SRAM中了,不占用MCU的Flash资源,所以其不会破坏原有MCUFlash中的程序,且下载过程无需擦除和编程Flash,所以下载速度非常快,也因此,其常被用作外设/应用程序快速验证或者产品量产后做失效分析(FA--FailureAnalyze)进行硬件外设模块功能验证。其掉电后,程序丢失。其实,即使下载后未掉电,SRAM中的程序不会丢失,此时复位MCU,SRAM中的程序也不会执行,因为MCU复位后默认的中断向量表在0x0000的Flash地址;

本文详细介绍了ARMKeil5.27IDE中使用S32KSDK开发S32K应用程序的方法和步骤,以及如何将S32DS中ProcessorExpert图形化配置和生成的S32KSDK配置文件添加到Keil工程中使用的方法和步骤。

同样的SDK代码,在不开编译器优化的情况下:

使用Keil编译的结果如下:

使用S32DSv2018.R1(gccv6.3)编译的结果如下:

可以看到,Keil和S32DS编译的结果,占用SRAM资源相差不大,但占用的Flash(代码编译结果存储器)空间却只有S32DS编译结果的一半不到(15.72kB.vs33.45kB);

代码编译效率提高了一倍多!!!

除了本文的Keil开发S32K应用程序及SDK使用之外,Keil官网也提供了以下三个应用笔记和丰富的demo工程,供大家参考学习:

THE END
1.编译器不必手动优化代码,您应考虑设计方面,如使用更快的算法、合并线程级并行性和使用特定于框架的功能(如使用移动构造函数)。 本文介绍了 Visual C++ 编译器优化。下面我要讨论最重要的优化技术,以及为了应用这些技术编译器必须做出的决策。目的并不是告诉您如何手动优化代码,而是向您说明https://docs.microsoft.com/zh-cn/archive/msdn-magazine/2015/february/compilers-what-every-programmer-should-know-about-compiler-optimizations
2.C++项目从零实现一个在线编译器cplus在线身为一名程序员,想必大家都有接触过像leetcode这样的刷题网站,不知你们在刷题的过程中是否思考过一个问题:它们是如何实现在线编译运行的功能。如果你对此感到好奇,那么本文将一步步带你来实现一个简易在线编译器。 项目概述 项目的基本逻辑:前端用户在网页上输入代码与参数,后端通过多进程的方式来编译运行代码,然后将https://blog.csdn.net/m0_74825172/article/details/144396891
3.c在线编译器腾讯云开发者社区c编译器-c语言的编译器是干什么用的本人不才,仅就个人意见谈谈: 1。c语言编译器哪个好?g++,icc. 小问题二:在类中对友元函数和重载的支持不是很好,虽然打了补丁,还是有点问题,最经典的一次就是我写了一个类的https://cloud.tencent.com/developer/information/c%E5%9C%A8%E7%BA%BF%E7%BC%96%E8%AF%91%E5%99%A8
4.如何使用在线编译器进行C语言编程和调试?使用场景:C语言在线编译器广泛应用于教育领域,使学生能够无需配置复杂的本地开发环境即可学习和实践C语言,它也常被软件开发人员用于快速验证代码片段或进行小型项目的初步开发。 2、主要特点与优势 易用性:用户只需通过网络浏览器访问相应的网站,就能开始编码,操作简单便捷,许多在线编译器还提供代码高亮、错误提示等辅助https://www.kdun.com/ask/928724.html
5.在线GO语言编译器mob649e8155b018的技术博客如何实现一个在线GO语言编译器 创建一个在线GO语言编译器是一个非常有趣的项目。这个项目不仅可以帮助你了解GO语言的特点,还可以让你掌握一些常见的Web开发技能。在本文中,我将指导你如何实现这个项目,分步骤讲解每一部分,包括所需的代码和解释。 流程概述 https://blog.51cto.com/u_16175439/12367389
6.GCC在线编译器的使用教程是什么问答GCC是一种广泛使用的开源编译器,可以用于编译C、C++等编程语言。GCC在线编译器是指可以通过网页访问并使用GCC编译器的服务。以下是使用GCC在线编译器的一般步骤:1. 打开GCC在线编译器的https://www.yisu.com/ask/61671196.html
7.C语言在线编译器怎么用LightlyC语言在线编译器好不好Lightly C语言在线编译器让写代码变得更简单,安装即可使用,无需任何配置,使用云端资源,不占用本地空间,秒级启动。用户可以选择下载使用桌面客户端或直接在浏览器中打开使用。 Lightly C语言在线编译器软件特性 Lightly C语言在线编译器让写代码变得更简单,安装即可使用,无需任何配置,使用云端资源,不占用本地空间,秒级https://xiazai.zol.com.cn/baike/501442.shtml
8.在线代码编译器:使用HTML,CSS和原始JavaScript和API实现的在线使用HTML,CSS和原始JavaScript和API实现的在线代码编译器。 它支持C,C ++,Java,Python和JavaScript代码编译。 在下面的链接上尝试 :backhand_index_pointing_down: (0)踩踩(0) 所需:1积分 JSP-车辆管理系统(struts+hibernate+spring+oracle) 2024-12-12 19:26:14 https://www.coder100.com/index/index/content/id/1759880
9.LightlyC语言在线编译器官方下载LightlyC语言在线编译器最新版Lightly C语言在线编译器让写代码变得更简单,安装即可使用,无需任何配置,使用云端资源,不占用本地空间,秒级启动。用户可以选择下载使用桌面客户端或直接在浏览器中打开使用。不仅仅只是一个编译器,本C语言在线编译器提供优秀的IDE编程体验,用户可以直接打包分享代码,也可以邀请朋友实时协同编码。除了C语言,还支持C++、http://www.onlinedown.net/soft/10081465.htm
10.C语言在线编译器(编辑器/解释器)C教程语言在线编译器 C 编译器(编辑器) 使用我们的在线 C 编译器,您可以编辑 C 代码,并在浏览器中查看结果。 Run ? #include<stdio.h> int main() { printf("Hello World!"); return 0; } Hello, World! 亲自试一试 ? 点击"亲自试一试" 按钮查看运行结果。https://w3schools.cn/c/c_compiler.html
11.基于webpack打造前端在线编译器当编译的资源返回前端之后,也会有运行时的错误,通常这些错误只会在Console(Chrome中的调试工具)中显示。但是作为一个前端代码的编译器,我们应当提供能够展示运行时错误的能力,否则出现runtime error时,展示区仍处于loading 的状态而无任何显示,会使人疑惑是否是源码尚未编译完成。 https://www.jianshu.com/p/8eb175be0774
12.如何免安装使用Python?推荐17个在线的Python解释器!Replit 需要注册一个帐户才能使用。用户界面有点复杂,因为它们有好几块功能,包括导航网站的帮助系统。该站点还有用于 C、C++、Java、Javascript 和其他几种语言的在线编译器。 Replit 还有一个 APP,可以在智能手机和平板电脑上使用。 4、Brython brython.info/tests/conso… https://developer.aliyun.com/article/1447215
13.在线Markdown编辑器,markdown线上编译器在线工具最近使用: 工具说明 本工具提供在线 Markdown 编辑功能,编辑器提供了深色和浅色 2 种主题,主要功能包括:支持标准 Markdown 和 Github 风格(GFM)的语法;支持自动识别 HTML 标签以及自动识别链接(包括 @link 这种形式)、Email 地址;支持基于 KaTeX 的 TeX 科学公式等等。同时,本编辑器还支持实时预览。 相关工具https://www.wetools.com/markdown/
14.最全盘点:18款在线C/C++/Py/Java编译器,一个比一个强大(附地址)这款在线编译器支持C,C ++,PHP和Java编译器。 OnlineGDB的独特功能是可以逐步调试您的代码,一旦代码被写入,它可以很容易地格式化,让它看起来非常酷。 网站地址:https://www.onlinegdb.com/online_c_compiler 12、cpp.sh/C++ shell 一款在线C++编译器,系统使用GCC 4.9.2,并带有Boost 1.55。支持C++标准选择、警https://picture.iczhiku.com/weixin/message1570869616830.html
15.Dotcpp编程(C语言网)编程入门学习训练题库在线运行,黏贴代码 - 码曰 各大编译器下载安装及图文教程汇总 如何创建自己的编程比赛? 如何创建自己的私有题库? 如何利用Dotcpp教学? 平台近期兼职需求列表 黄老师32集零基础C语言在线免费视频 C/C++项目教程 最近更新 / Recent updates 教学功能常见使用问题汇总 https://www.dotcpp.com/
16.GitHub提供打印,定时器两个上下文供测试使用,可fork分支添加上下文实现更有趣的功能 该项目为第一版本初始版本,目的是通过实现中文解释器,且扩展出一些有意思的功能,加深对编译原理的学习理解。对该项目有兴趣的同学,可以提交issue反馈意见建议,也可邮件1104238614@qq.com。https://github.com/gamedilong/ccc
17.在线Markdown编译器在线Markdown编译器Feedback 1 2 3 4 5 6 7 8 9 10 # OSCHINA.NET社区 ### Header 3 > This is a blockquote. > > This is the second paragraph in the blockquote. > > ## This is an H2 in a blockquote HTML 实时预览 实时预览:https://tool.oschina.net/markdown/
18.AppStore上的“C语言代码编译器C语言代码编译器是一款专门为零基础C语言编程爱好者打造的一款入门编译工具App,致力于帮助初学者入门C语言,轻松迈入编程世界。学C语言,从这里开始! 【零基础也能学】初学者从0到1,轻松入门; 【强大的编译器】在线运行,极速编译; 【免费教程】内容、知识点丰富,完全免费; https://itunes.apple.com/cn/app/id1595765605