一、简介
本文介绍如何使用 NXP 提供的 AUTOSAR MCAL 软件包开发 S32K344 DIO/PORT 模块,对 GPIO 口进行读写操作。
图 1-1 Cavalry S32K344 开发板
1.1 需求组件
硬件组件:
- 开发板:Cavalry S32K344开发板;
软件组件:
- 开发软件:S32 Design Studio for S32 Platform 3.4;
- 配置软件:tresos Studio 27.1;
- RTD 版本:4_2.0.0;
二、EB 配置
AUTOSAR 环境的各模块配置需要使用 EB 软件进行配置,关于基础 Mcu、Resuorce、Os 等工程所需基础模块配置在此不再赘述(除 Resource 模块配置需与芯片封装相同外,其它模块默认即可)。
2.1 Port 模块配置
Port 模块内需要配置 PortContainer 与 UnTouchedPortPin 选项其余选项如无特殊需要使用默认配置即可。
UnTouchedPortPin 配置 4个下载口:
- PTA4 - JTAG_TMS
- PTA10- JTAG_TDO
- PTC4 - JTAG_TCK
- PTC5 - JTAG_TDI
PortContainer 配置我们需要使用的 GPIO 口,配置引脚时需要注意 PortPin Mscr (dynamic range)、PortPin Direction、PortPin Mode 与 PortPin Level Value 选项:
- PortPin Mscr (dynamic range) 为填入引脚编号,举例 PTA29 引脚其引脚编号即为 29,B、C 等其他区引脚编号计算需加上在此之前的所有引脚数量,例如 PTB12 引脚编号为当前编号 12 加上 A 区 32 个引脚,所以 PTB12 引脚编号为 44。
- PortPin Direction 为引脚方向,可配置为输入、输出、高阻态或者同时输入输出;
- PortPin Mode 为引脚工作模式,可配置为 GPIO、UART、SPI 等工作模式;
- PortPin Level Value 为引脚初始值,可配置高电平、低电平或不。
图 2.1-1 Port 模块配置页面
图 2.1-2 下载端口配置页面
图 2.1-3 引脚配置页面
2.2 DIO 模块配置
DIO 模块配置仅需修改 DioPort 选项其他保持默认配置即可,DioPort 内需要对各区端口进行 L、H 分组并进行相应编号如图 2.2-2 所示。
创建 L、H 分组后需要进行引脚配置,配置引脚时需要注意 Dio Channel Id 选项,该 ID 编码规则与 PORT 模块编码规则不同,Dio Channel ID 编码按分组进行编码。
举例:
- A 区引脚 PTA0-PTA15 引脚对应到 DioPort_AL 分组,引脚 ID 即为其引脚编号,PTA0 引脚 ID 为 0,PTA15 引脚 ID 为 15;
- PTA16-PTA31 引脚对应到 DioPort_AH 分组,其引脚编号从 0-15 重新开始一一对应,即 PTA16 引脚 ID 编号为 0,PTA31 引脚 ID 编号为 15。其余分区端口 ID 编号规则相同。
图 2.2-1 Dio 模块配置页面
图 2.2-2 DioPort 配置页面
图 2.2-3 DioPort 引脚配置页面
配置完各模块后点击 EB 软件生成代码按钮进行生成并编译生成代码并同步到 S32DS 代码工程。
图 2.2-4 EB 生成代码图
三、主函数编写
各模块初始化与功能函数在工程内 MCAL 文件夹下相对应模块名称的头文件与源文件内,若使用其他版本 MCAL 软件包则各函数名称会有所区别调用函数需要到相应模块文件内查找。
#include "Mcu.h"
#include "Port.h"
#include "Dio.h" //头文件引用
void TestDelay(uint32 delay); //延时函数声明
void TestDelay(uint32 delay)
{
static volatile uint32 DelayTimer = 0;
while(DelayTimer<delay)
{
DelayTimer++;
}
DelayTimer=0;
} //延时函数编写
int main(void)
{
Mcu_Init(&Mcu_Config_VS_0);
Mcu_InitClock(McuClockSettingConfig_0);
Mcu_SetMode(McuModeSettingConf_0); //MCU 时钟初始化与设置
Port_Init(NULL_PTR); //Port 模块初始化
while (1)
{
Dio_WriteChannel(DioConf_DioChannel_DioChannel_PTA29, 1); //PTA29 端口置高
TestDelay(5000000);
Dio_WriteChannel(DioConf_DioChannel_DioChannel_PTA29, 0); //PTA29 端口置低
TestDelay(5000000);
}
return (0U);
}
图 3-1 主函数页面
四、调试测试
将上文主函数进行编译生成 .elf 文件并调试下载进入 S32K344EVB 内部进行调试 S32K344 开发板上红灯将会间隔亮灭。
五、参考文献
[1] S32K3XX Reference Manual.pdf,NXP
[2] S32K3XX Data Sheet.pdf,NXP
福利来啦!
十二月惊喜活动,参与活动即有机会获得以下奖品哦!
参与地址:【签到有礼】2024/12/02~12/08 十二月活力启航,签到赢取冬日暖心好礼! - 大大通(简体站)