小猫爪:S32K3学习笔记01-S32K3 RTD【MCAL&SDK】的使用和环境搭建

本文档详细介绍了如何搭建NXP S32K3系列MCU的开发环境,包括使用S32DS、EBtresos和SDK进行MCAL与SDK开发。首先,下载并安装EBtresos、S32DS以及MCAL软件包。接着,配置EBtresos并生成MCAL代码,然后在S32DS中创建工程并导入DEMO或新建工程进行编译调试。此外,还提供了使用Lauterbach调试工具的步骤。

1 前言

  NXP最近又推出了新的GPIS系列MCU S32K3,也就是S32K1的升级版,虽然是升级版,但是性能提升的不是一点半点,那是贼凶啊,接下来一段时刻,我就要好好学习一下这个MCU,并且把我的学习过程写点笔记,分享给大家,欢迎大家建议和纠错。

  这第一篇就介绍一下开发环境的搭建,在这里我使用S32DS进行SDK方式的开发,配合EB tresos进行MCAL开发。

  简单的来说就是:EB tresos可以为MCAL开发提供图形化配置界面,而S32DS则为SDK开发提供图形化配置界面。

  这篇文件介绍的方式流程如下:

  SDK开发流程为:

在S32DS配置外设
在S32DS编译
在S32DS中调试
使用其他调试工具

  MCAL开发流程

在EB配置MCAL
使用编译器编译
在S32DS中调试
其他调试工具

2 准备工作

  准备工作当然就是下载一些东西喽。需要下载三个东西,分别是NXP官方的调试IDE,配置MCAL的EB tresos以及S32K3的RTD软件包。

  RTD是什么,Real-time Driver,在S32K1时代,MCAL和SDK是两套不同的软件包,但是到了S32K3,就把两者集成了一下,MCAL和SDK共用一套代码,也就是RTD,意思其实就是这两个软件包里面的底层代码都是一样的。简单的来说,现在K3的MCAL就是在SDK的底层基础上封装了一层符合AUTOSAR标准的接口层,RTD的具体结构框架如下图:
在这里插入图片描述
  图中High Level Interface指的就是符合AUTOSAR的MCAL接口层,而Low Level Interface就是传统意义上比较高效的SDK底层接口层。

  如果有NXP的授权账号,就可以在下面链接下载到这些东西的安装包,登录账号后,点击MY_NXP
在这里插入图片描述
  点开 Software Licensing and support, 找到S32K3 Standard Software,点开就可以看到这三个东西的下载链接了:

  ①对于EB tresos的下载,需要记住标记的激活码。
在这里插入图片描述
  ②对于MCAL(SDK),就下载最新的就好了,这里我选择是1.0.0。
在这里插入图片描述
  如果是MCAL开发的话,只需要下载MCAL安装包,如果是SDK开发的话,只需要下载SDK软件包。
在这里插入图片描述
  ③对于S32DS,可以看到这个版本需要S32DSV3.4,所以需要下载V3.4版本的S32DS就好了,另外还需要下载S32K3的支持补丁包。
在这里插入图片描述

  下面就是一顿漫长的等待,等所有东西都下载好了之后,有如下东西:
在这里插入图片描述

分别是:

  1. EB Tresos安装包
  2. S32DS安装包
  3. MCAL安装包
  4. K3支持补丁包
  5. SDK包

这样所需要的文件就全部下载好了。

3 安装

3.1 安装EB Tresos

  下载EB tresos的时候可能会出现浏览器把后缀uip改成了gz的情况,将其修改回uip即可。
在这里插入图片描述
  点击setup.exe,一直next即可,非常简单,中间需要记住其安装路径即可,后续会用到。
在这里插入图片描述
  又是一次漫长的等待。安装完成后再点击EB_Client_License_Administrator_1_4_1_Setup.exe安装激活工具。之后打开EB激活工具,将之前下载EB时候保存的激活码添加到激活工具中,这样EB tresos就可以正常使用了(注:EB License目前提供的为试用版,不能用于项目正式量产,请联系EB购买正式license)。
在这里插入图片描述

3.2 安装MCAL

  点击SW32K3_RTD_4.4_1.0.0_CD01_D2108.exe安装MCAL(SDK),一直Next,直到这一步,将上一步安装的EB tresos的安装路径填进去,之后就非常简单了。
在这里插入图片描述

3.2 安装S32DS

  安装S32DS就非常简单了,一直下一步即可,这里不做赘述了。安装完成后还需要安装S32K3的补丁软件支持包,点击Help->Install New Software后将前面下载的K3支持补丁包Add后,选中所有后点击Next
在这里插入图片描述
  之后就是经过漫长的等待,等待补丁安装完成。
  在这里插入图片描述

4 SDK开发示例

4.1 SDK包安装

  打开S32DS后,点击Help->Install New Software后将前面下载的SDK软件包Add后,选中后点击Next
在这里插入图片描述
  之后就是经过漫长的等待,等待SDK包安装完成。

4.2 导入一个Demo

  点击File->New->S32DS Project From Example, 选取一个Demo:
在这里插入图片描述
  之后打开Demo中的mex文件即可打开S32DS的图形化可配置界面进行相关的配置:
在这里插入图片描述
在这里插入图片描述
  通过这个界面就可以对S32K3的IO,时钟,外设等进行配置,具体细节不再赘述,之后点击Update Code生成代码。
在这里插入图片描述
  之后就是正常的编译,调试了,这里也就不多说啥了,非常简单。
在这里插入图片描述

4.3 新建一个工程

  也是可以直接新建一个工程,具体操作如下,点击File->New->S32DS Application Project,选择芯片型号:
在这里插入图片描述
  点击Next
在这里插入图片描述
  选择正确的SDK后,点击Finish,一个新的工程就创建成功了,接下来就是编译和调试了。

  可能有些人安装的是最新版本的SDK软件包,发现编译会失败,这种问题一般是因为你安装的工具链与SDK软件包的版本不匹配问题。比如目前最新版RTD1.0.0用的工具链是GCC10.2,但是你安装的工具链还是GCC9.2,如下:
在这里插入图片描述
  这个时候就需要更新一下S32DS的工具链就好了,点击help->check for update,然后更新就好了。

5 MCAL开发示例

5.1 MCAL软件包组成

  找到安装的MCAL(RTD)目录打开,如下:
在这里插入图片描述
  可以看到有很多外设的例子,点开某一个例子如下:
在这里插入图片描述
  各个文件夹所包含的内容描述如下:

名称描述
autosarepd文件
configEB配置模板文件
doc当前外设MCAL的Integration Manual和User Manual
examplesEB tresos工程Demo和S32DS工程Demo
generate_PBPostBuild版模板源文件和头文件
generate_PCPreCompile版模板源文件和头文件
generate_swcd(个人猜测应该没啥用,我也不知道)
include当前外设MCAL驱动的头文件(需要移植
META-INF(个人猜测应该没啥用,我也不知道)
src当前外设MCAL驱动的源文件(需要移植

  上面介绍了examples文件夹里面有EB Tresos的工程和S32DS的工程,再打开examples/EBT文件夹的一个例子如下:
在这里插入图片描述
  各个文件夹所包含的内容描述如下:

名称描述
debug一些劳德巴赫的调试脚本
generateEB tresos生成的代码(其中的src和include需要移植
includeMCAL配套Demo的头文件
out编译生成的.o文件以及elf可执行文件
srcMCAL配套Demo的源文件
TresosProjectEB工程文件
MakefileMCAL配套Demo的Makefile
project_parameters.mkMakefile的包含文件,注意包含一些路径,配置信息

  再打开其中的TresosProject文件夹:
在这里插入图片描述
  其中config文件夹里面就包含了当前EB工程的xdm配置文件。

  所以当使用EB配置完所有的外设MCAL后,只需要把以下的文件中的源文件和头文件移植到自己的工程中就可以了,分别是:

  1. 所有使用到外设MCAL的源文件和头文件,
  2. EB生成源文件和头文件

  在上面的表格中,需要移植的内容已经加了 “(需要移植)” 字样作了标记。

5.2 通过EB配置MCAL并生成代码

  S32K3的MCAL(RTD)为每个软件模块都提供了示例工程,也是在上面所说的examples文件夹中。

  该文件夹下面有两个文件夹,分别为EBT 及S32DS。其中EBT即为MCAL的工程,其中不仅包含了EB tresos的工程,还包括了配套的demo,下面就以其中ADC的例子做示范。
在这里插入图片描述

  打开EB,并点击File->Import:
在这里插入图片描述
  找到相应的MCAL工程路径,选取自己想要的demo后,点击Finish。
在这里插入图片描述
  之后就是对MCAL进行配置,点击生成代码按钮,就可以生成相应的MCAL代码了。
在这里插入图片描述
  另外打开项目属性,可以修改生成代码的存储位置,如果需要使用RTD里面的makefile和配套的MCAL demo的话,修改路径的话则无法通过编译。
在这里插入图片描述

5.3 编译配套的MCAL Demo

  首先编辑一下project_parameters.mk脚本文件,修改一下其中的相关路径信息,该文件位置如下如所示。
在这里插入图片描述
  可以按照readme.txt里面的提示修改:‘
在这里插入图片描述

  1. TRESOS_DIR:EB tresos的安装路径
  2. GCC_DIR:编译器的路径
  3. PLUGINS_DIR:MCAL的安装路径

  我修改后如下:
在这里插入图片描述

  接下来再把编译工具链路径添加到环境变量中,类似于cygwin或者mingw这些,S32DS安装目录中默认就有,具体路径如下:

C:\nxp\S32DS.3.4\S32DS\build_tools\msys32\usr\bin

  将其添加至环境变量中:
在这里插入图片描述
  接下来就可以编译了,打开windows的cmd,将路径切换至示例Demo的路径,我用的是一个ADC的demo,所以如下:
在这里插入图片描述
随后执行
make build
编译代码,最后会在当前工程路径下out文件夹下生成可执行文件main.elf。
在这里插入图片描述
  注意:如果你在该工程的基础上增加了新的模块,比如我在上述工程中增加了CAN模块,那么为了使得编译通过,我们还需要修改一下project_parameters.mk脚本文件,将CAN的MCAL源文件和头文件的路径添加进编译路径MCAL_MODULE_LIST中,如下:

MCAL_MODULE_LIST := Base CanIf Rte Platform Os Mcu EcuC Det EcuM  Adc Resource Port Dio Lcu Mcl Can

5.4 在S32DS中使用PE仿真器调试

  接下来就是使用S32DS来调试在上一步编译Demo生成的可执行文件了。

  使用PE仿真器连接S32K3后,打开S32DS后,点击Debug Configurations
在这里插入图片描述

  然后安装下图提示选择PE interface,新建一个调试工程:
在这里插入图片描述
  按照下图进行设置:
在这里插入图片描述
在这里插入图片描述
  其中Executable处应填写:

${S32DS_K3_ARM32_TOOLCHAIN_DIR}/bin/${arm32_cross_prefix}gdb${arm32_cross_suffix}

  随后点击Debug即可进行调试。
在这里插入图片描述
  按照以上的步骤即可在S32DS调试MCAL配套的Demo了。

5.5 使用Lauterbach调试

  接下来再使用Lauterbach调试一下上面编译生成的可执行文件。

  使用Lauterbach进行调试的话,则还需要修改一下config.t32文件,该文件的路径如下所示:
在这里插入图片描述
将其中的SYS变量修改成Lauterbach的安装路径, 我修改后如下:
在这里插入图片描述
  随后就是打开Lauterbach,使用命令连接上S32K3后,再运行脚本run.cmm,脚本路径如下图所示:
在这里插入图片描述
  随后就可以正常调试RTD里面MCAL配套的Demo了。

end

<think>嗯,用户想要详细了解MCAL中的PortDIO模块,这涉及到汽车电子嵌入式开发的核心底层驱动。从引用内容看,用户参考了多篇实战博客,说明ta更关注实际工程配置而非纯理论。 用户可能正在开发基于NXP S32K312芯片的项目,需要配置GPIO功能。ta的提问聚焦在“详细介绍、使用方法及相关技术信息”,说明需要从概念到实操的全链条知识。特别要注意的是,引用34提到EB tresos工具配置步骤,这应该是用户当前最急需的实操指导。 考虑到AUTOSAR架构的复杂性,我决定分层说明:先解释PortDIO在MCAL中的层级关系(位于微控制器抽象层),再拆解它们的职责差异——Port负责物理引脚特性配置,DIO负责逻辑电平控制。这种分而治之的架构设计需要重点强调。 实操部分要整合引用4的配置流程引用3的代码片段。特别要注意引用3提到的PORT_PIN_MODE_GPIO这个关键配置项,很多开发者会忽略模式设置导致功能异常。中断配置参考引用1的“何飞阳”方案更可靠,因为涉及NVIC底层操作。 用户没有明确芯片型号,但引用1/2都指向S32K3系列,所以示例代码采用该芯片的SDK写法比较稳妥。安全提示必须包含ESD防护内容,汽车电子对静电敏感度极高。 </think>MCAL(Microcontroller Abstraction Layer)中的 **Port** **Dio** 模块是 AUTOSAR 架构中控制微控制器 GPIO(通用输入输出)的核心驱动层。以下是详细说明与技术实践指南: --- ### 一、Port 与 Dio 模块的核心区别 | **模块** | **职责** | **配置内容** | **依赖关系** | |----------|-----------------------------------|------------------------------------------|---------------------| | **Port** | 物理引脚属性配置 | 方向(输入/输出)、模式(GPIO/复用功能)、上下拉、驱动强度等 | 需先于 Dio 配置 | | **Dio** | 逻辑电平控制与状态读取 | 通道分组(Port+Pin 组合)、中断配置 | 依赖 Port 的底层初始化 | > **关键点**:Port 定义引脚的电气特性,Dio 提供操作接口。例如: > - 配置 `PORT_PIN_MODE_GPIO` 后,才能通过 Dio 读写电平 > - 复用功能(如 UART TX)需配置为非 GPIO 模式[^1][^3] --- ### 二、配置流程详解(基于 EB tresos) #### **1. Port 模块配置** ```plaintext 步骤: 1. 添加 Port 模块到工程(AUTOSAR 4.0.3+) 2. 选择目标引脚(如 PORT_15, PIN_0) 3. 设置参数: - Direction: OUTPUT / INPUT - Mode: PORT_PIN_MODE_GPIO(通用模式) - Pull: PULL_UP / PULL_DOWN / NONE - Drive Strength: HIGH / LOW 4. 初始化函数调用:`Port_Init()` ``` > **注意**:引脚复用时需查《芯片参考手册》选择正确的 `Alternate Mode` 值[^1][^4] #### **2. Dio 模块配置** ```plaintext 步骤: 1. 添加 Dio 模块,关联 Port 配置的引脚 2. 定义逻辑通道(DioChannel): - 例:`DioConf_DioChannel_LED` → 映射到 PORT_15.PIN_0 3. 分组配置(可选): - DioPort 类型(如 DioPort_15 包含 PIN_0~3) 4. 初始化函数调用:`Dio_Init()` ``` --- ### 三、代码实战示例 #### 设置引脚为输出并控制电平 ```c #include "Dio.h" #include "Port.h" void Init_GPIO(void) { /* Port 初始化(硬件电气属性)*/ Port_Init(&Port_Config); /* 设置引脚为输出模式 */ Port_SetPinDirection(DioConf_DioChannel_LED, PORT_PIN_OUT); Port_SetPinMode(DioConf_DioChannel_LED, PORT_PIN_MODE_GPIO); } void Toggle_LED(void) { /* 通过 Dio 操作电平 */ Dio_LevelType state = Dio_ReadChannel(DioConf_DioChannel_LED); Dio_WriteChannel(DioConf_DioChannel_LED, !state); } ``` --- ### 四、中断配置要点 1. **Port 层**启用中断功能: ```c Port_SetPinInterrupt(DioConf_DioChannel_BTN, PORT_INT_FALLING_EDGE); ``` 2. **Dio 层**注册回调: ```c Dio_RegisterCallback(DioConf_DioChannel_BTN, &Btn_ISR); ``` 3. 在中断向量表(IVT)中关联服务函数[^1]。 > **警告**:避免在中断内调用阻塞函数,否则可能触发 Watchdog! --- ### 五、调试常见问题 | **现象** | **排查方向** | |------------------------|----------------------------------| | 引脚无输出 | Port 未设为输出模式 / 时钟未使能 | | 读值始终为高或低 | 上下拉配置冲突 / 硬件短路 | | 中断不触发 | NVIC 未使能 / 优先级配置错误 | | 配置后 Verify 报错 | 引脚资源冲突(检查复用功能)[^4] | --- ### 六、进阶应用 - **低功耗优化**:通过 `Port_SetPinSleepMode()` 配置休眠状态下的引脚行为 - **安全机制**:使用 `Dio_FlipChannel()` 原子操作避免电平竞争 - **ECU 兼容性**:不同芯片厂商的 MCAL 接口一致,但底层寄存器操作差异由 Port 模块抽象封装[^2][^3] > **最佳实践**:对高频操作引脚(如 PWM),避免实时调用 `Port_SetPinMode()`,应在初始化阶段固定功能模式。
评论 38
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小猫爪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值