MPC5748G S32_SDK_PA_RTM_3.0.0 GPIO 调试仿真设置

前言

MPC5748G开发环境搭建
上一篇搭建了MPC5748G的开发环境 S32 Design Studio for Power Architecture, 并且装上了最新的更新和补丁, 其实官方的例子已经够可以了, 在安装目录NXP\S32DS_Power_v2.1\S32DS\software\S32_SDK_S32PA_RTM_3.0.0\examples\MPC5748G 可以找到各种例程, 还可以浏览器打开S32_SDK_S32PA_RTM_3.0.0\doc\Start_here.html查看工程介绍. 本篇就参考来看一下怎么操作GPIO. 用的板子是官方的 DEVKIT-MPC5748G:
在这里插入图片描述
注意用跳线帽短接J11的2-3, 这样就可以使用上图中的USB供电. 但这样OpenSDA可能有问题, 跳线帽插到J11的1-2, 使用DC头供电靠谱一点. 板载了8个可用的LED:
在这里插入图片描述
还有两个用户按键:
在这里插入图片描述
本篇就用PJ4引脚的LED(低电平点亮)和PA3引脚的按键(空闲为低, 按下为高)来演示下GPIO的输入输出.

新建工程

打开S32, File -> New -> S32DS Application Project:
在这里插入图片描述
选择MCU: MPC5748G, 填入工程名:
在这里插入图片描述
选择SDK, 可以只用一个核, 也可以默认3个核都勾上:
在这里插入图片描述
点击Finish结束. 可以看到工程栏中一共生成了3个工程, 一个核一个工程:
在这里插入图片描述

PE配置

注意如果同时打开多个工程, 来回切换或者S32打开时间过长, 会导致配置的时候巨卡无比, 建议关掉不用的工程, 或者过一段时间重新打开S32.

选择上面的mpc5748g_gpio_Z4_0这个核的工程, 双击ProcessorExpert.pe -> pin_mux:PinSettings -> Pins, 找到PJ4, 设置为输出, 用于LED:
在这里插入图片描述
SIUL2System Integration Unit Lite2的缩写, 管理输入输出中断等. 这一步的效果与下面等同(还是上面方便):
在这里插入图片描述
找到PA3, 设置为输入, 用于SW1按键:
在这里插入图片描述
至于时钟神马的, 一时半会不好说, 先保持默认, 点击生成代码:
在这里插入图片描述

补全代码

打开 mpc5748g_gpio_Z4_0 -> Sources -> main.c, 补全代码, 按下按键灯亮, 松开灯灭:
在这里插入图片描述
代码如下:

/* User includes (#include below this line is not maintained by Processor Expert) */
#define LED_PORT        PTJ
#define LED_PIN         4U
#define BTN_PORT        PTA
#define BTN_PIN         3U

  /* Write your code here */
  /* For example: for(;;) { } */

    /* Initialize and configure clocks */
    CLOCK_SYS_Init(g_clockManConfigsArr, CLOCK_MANAGER_CONFIG_CNT,
                        g_clockManCallbacksArr, CLOCK_MANAGER_CALLBACK_CNT);
    CLOCK_SYS_UpdateConfiguration(0U, CLOCK_MANAGER_POLICY_FORCIBLE);

    /* Initialize pins */
    PINS_DRV_Init(NUM_OF_CONFIGURED_PINS, g_pin_mux_InitConfigArr);

    while(1) {
    	uint32_t btn_return = (PINS_DRV_ReadPins(BTN_PORT) >> BTN_PIN) & 0x01;
    	if(btn_return == 1) {	//button pressed
    		PINS_DRV_WritePin(LED_PORT, LED_PIN, 0);	//led on
    	} else {
    		PINS_DRV_WritePin(LED_PORT, LED_PIN, 1);	//led off
    	}
    }

GPIO的写可以有几种方法:

PINS_DRV_WritePin(LED_PORT, LED_PIN, 0);	//led on
PINS_DRV_WritePin(LED_PORT, LED_PIN, 1);	//led off

//or
PINS_DRV_WritePins(LED_PORT, (0 << LED_PIN));	//led on
PINS_DRV_WritePins(LED_PORT, (1 << LED_PIN));	//led off

//or 置高的
PINS_DRV_SetPins(LED_PORT, (0 << LED_PIN));	//no effect
PINS_DRV_SetPins(LED_PORT, (1 << LED_PIN));	//led off

//or 翻转的
PINS_DRV_TogglePins(LED_PORT, (1 << LED_PIN));

读供参考:

uint32_t btn_return = (PINS_DRV_ReadPins(BTN_PORT) >> BTN_PIN) & 0x01;

哈哈, 基本是从官方例程和S32K148参考或者测试来的, 除了可以有多个核心, 其他和S32K148差不太多.

调试设置

需要说明的是, 用12V电源给板子供电比较好成功, 如果只用USB供电可能容易调试失败.

1.13号更, 板子修好了, 我又新建了一个工程, 只勾选了Z4_0核, 点击快捷图标中:
在这里插入图片描述
弹出如下界面, 选择RAM那个(调试的时候尽量选择RAM的这个, 速度快, 上面那个牵涉到Flash的话, 因为Flash比较大, 校验擦除写入都很耗时间, 不是下载代码不推荐):
在这里插入图片描述
Debugger里面, 选择板载的OpenSDA, 点击Apply, 点击Debug:
在这里插入图片描述
稍等, 点击Resume快捷图标运行程序:
在这里插入图片描述
这个时候按下SW1按键, PJ4连接的LED灯亮, 松开灯灭, 符合预期.

仿真出错解决

前面说到板子有问题, 死活进不了仿真调试, 卡在Verifying object file CRC-16 to device ranges:
在这里插入图片描述
对, 就是上图这卡到98%动弹不得. 有时候也有这种:
在这里插入图片描述
或者这种:
在这里插入图片描述
各种问题一堆, 每次还可能不一样, 反正都进不了仿真…

然后用NXP论坛的办法, 参考这两篇帖子:
DEVKIT MPC5748G S32DS download problem,blocking at Verifying object file CRC-16 to device ranges
Unable to start debug session on MPC5748G board. download stops at 98%

主要就是用 Flash/EEPROM Programmer Software For NXP MPC55xx/56xx/57xx & STMicroelectronics SPC5这个工具, 把Flash都擦了, 需要注册下账户获取no cost下载链接:
在这里插入图片描述
在这里插入图片描述
点击Connect(Reset)按钮, 选择编程算法:
在这里插入图片描述

等待加载完成:
在这里插入图片描述
然后点击擦除模块:
在这里插入图片描述

嗯, 就好使了.

需要说明的是, 用12V电源给板子供电比较好成功, 如果只用USB供电可能容易调试失败.

调试的时候尽量选择RAM, 速度快, 出错概率小, 程序断电消失. 如果调试的时候选的是Flash, 而MPC5748G的Flash特别大, 涉及到校验仿真擦除写入之类的, 速度奇慢无比(Erasing 98%的时候会卡很久), 好在掉电程序不消失.

工程代码下载

https://download.csdn.net/download/weifengdq/12100616

微信公众号

欢迎扫描关注我的微信公众号, 及时获取最新文章:
在这里插入图片描述

  • 6
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值