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个工程, 一个核一个工程:
注意如果同时打开多个工程, 来回切换或者S32打开时间过长, 会导致配置的时候巨卡无比, 建议关掉不用的工程, 或者过一段时间重新打开S32.
选择上面的mpc5748g_gpio_Z4_0
这个核的工程, 双击ProcessorExpert.pe -> pin_mux:PinSettings -> Pins, 找到PJ4, 设置为输出, 用于LED:
SIUL2
是System 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
欢迎扫描关注我的微信公众号, 及时获取最新文章: