mpc5748G开发板学习笔记(一:点灯)

前言

一个恩智浦的MPC5748G开发板,这是一款基于Power Archite技术的32位汽车MCU。

在这里插入图片描述

主控芯片为SPC5748GHMKU6:

在这里插入图片描述

在这里插入图片描述

可对照查看芯片配置。

1、开发环境配置

需要下载S32 DS for Power Architecture,网址在这里:下载地址。这个软件是恩智浦公司专门为其开发板设计的,所以是免费的,下载完还需要安装一个SDK,可以参考https://blog.youkuaiyun.com/weifengdq/article/details/103899641的安装步骤。

在这里插入图片描述
开发界面:
在这里插入图片描述

2、硬件连接

首次使用可以参考NXP官网的,网址在这:快速入门

在这里插入图片描述

我用了JTAG线烧程序,12V单独供电,官网的快速入门使用的是USB-micro供电+烧写,但是这种方式可能比较慢而且不太稳定(老师说的),这两种不同的接线方式需要通过跳线选择:

在这里插入图片描述

硬件连接如下:
在这里插入图片描述
在这里插入图片描述

3、编程思路

MPC5748G有8个供用户使用的LED灯,和两个按键,GPIO就非常非常多了,基本J2 J3 J4和J12 J13 J14每一个引脚都可以做GPIO口。

  • 8个LED均为低电平有效,也就是端口输入为0时亮灯:
    在这里插入图片描述

  • 2个按键高电平有效,也就是按下按键时端口输入为1:

在这里插入图片描述

  • GPIO非常多:

在这里插入图片描述

既然要写点灯的程序,不如就把每一个LED和每一个按键都用上,这样也可以记一下端口号,GPIO因为太多,就只挑一个用一下试一试,我用的是PG2,为J4的第一个引脚。

这样的话使用的端口一共有11位,分别是8个LED,2个SW和1个GPIO:
在这里插入图片描述

注:这段代码是后面配置好自动生成的。

具体功能为:按下SW1按键后,LED全亮,PG2置1。按下SW2按键后LED全灭,PG2置0。

4、新建工程

  • 首先打开DS32,新建一个自己的项目:

在这里插入图片描述

  • 然后选择芯片,起个名字:

在这里插入图片描述

  • 选择使用几个内核,我只用了一个,点1、2除反选Z4_2和Z2_2两个核,然后点3添加SDK(就是一个图形化界面配置引脚的工具包):

在这里插入图片描述

在这里插入图片描述

  • 选择MPC5748G_SDK_Z4_0 3.0.0版本(不知道3.0.0和3.0.3有什么区别,后面再了解),点击Finsh开始生成工程。

在这里插入图片描述

  • 工程配置完以后就出现这个界面,可能我调整过了界面的各个模块大家都不太一样,不过文件路径都是一样的,可以在Sources文件夹里看到main文件。

在这里插入图片描述

  • 接下来使用SDK配置11个端口,借一张别人的图参考链接,配置PJ[4]过程如图所示,除PJ4外,还需配置其他7个LED为GPIO输出,PA0 PA10 PA4 PA7 PC4 PH13 PH5:

在这里插入图片描述

  • 两个按键端口为GPIO输入,分别为PA3和PE12,均设置为输入:

在这里插入图片描述

  • 一个GPIO使用了PG2:
    在这里插入图片描述

  • 配置好11个引脚后点击生成代码即可:

在这里插入图片描述

5、主函数编写

  • 刚刚生成代码已经配置好了各个引脚,在pin_mux.c中有个g_pin_mux_InitConfigArr的结构体,里面有每一个引脚的详细配置:

在这里插入图片描述

  • 参数NUM_OF_CONFIGURED_PINS为引脚数量:11。

在这里插入图片描述

  • 需要修改的只有main.c里面的内容,首先在头文件里定义每一个端口号:

在这里插入图片描述

/* User includes (#include below this line is not maintained by Processor Expert) */

#define BTN_PORT        PTA
#define BTN_PIN         3U
#define BTN_PORT0        PTE
#define BTN_PIN0         12U
#define PORT0	PTA
#define LED0 	7
#define PORT1	PTA
#define LED1	10
#define PORT2	PTH
#define LED2	13
#define PORT3	PTC
#define LED3	4
#define PORT4	PTH
#define LED4	5
#define PORT5   PTJ
#define LED5    4U
#define PORT6	PTA
#define LED6 	0
#define PORT7	PTA
#define LED7 	4
#define GPIO_PORT	PTG
#define GPIO_PIN	2
  • main函数内部代码从这里开始写,前三行分别为初始化时钟和引脚:

在这里插入图片描述

  /* 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;//read SW1
       	uint32_t btn_return0 = (PINS_DRV_ReadPins(BTN_PORT0) >> BTN_PIN0) & 0x01;//read SW2
       	if(btn_return == 1) {	//button pressed
       		PINS_DRV_WritePin(PORT0, LED0, 0);
       		PINS_DRV_WritePin(PORT1, LED1, 0);
       		PINS_DRV_WritePin(PORT2, LED2, 0);
       		PINS_DRV_WritePin(PORT3, LED3, 0);
       		PINS_DRV_WritePin(PORT4, LED4, 0);	//led on
       		PINS_DRV_WritePin(PORT5, LED5, 0);
       		PINS_DRV_WritePin(PORT6, LED6, 0);
       		PINS_DRV_WritePin(PORT7, LED7, 0);
       		PINS_DRV_WritePin(GPIO_PORT, GPIO_PIN, 1);	//PG2 1
       	}
       	if(btn_return0 == 1) {
       		PINS_DRV_WritePin(PORT0, LED0, 1);
       		PINS_DRV_WritePin(PORT1, LED1, 1);
       		PINS_DRV_WritePin(PORT2, LED2, 1);
       		PINS_DRV_WritePin(PORT3, LED3, 1);
       		PINS_DRV_WritePin(PORT4, LED4, 1);	//led off
       		PINS_DRV_WritePin(PORT5, LED5, 1);
       		PINS_DRV_WritePin(PORT6, LED6, 1);
       		PINS_DRV_WritePin(PORT7, LED7, 1);
       		PINS_DRV_WritePin(GPIO_PORT, GPIO_PIN, 0); //PG2 0
       	}
       }


6、调试编译

  • 点击左上角小锤子,选择Debug_RAM:

在这里插入图片描述

  • 等待编译完成:

在这里插入图片描述

  • 点Debug右边的三角,选择Debug Configurations…

在这里插入图片描述

  • 开始烧写:

在这里插入图片描述

  • 点击运行:

在这里插入图片描述

  • 此时,按下右下角的SW1(虽然标的是SW4),八个LED灯全部亮起,使用万用表测一下PG2端口,显示为3.3V。

在这里插入图片描述

  • 按下右上角的SW2按键,八个LED全部灭掉,PG2端口为0V。

在这里插入图片描述

7、单步运行

  • 双击这里可以在程序的某一行打个断点,

在这里插入图片描述

  • 点击1运行后程序直接卡在while的第一句这里,点击2即可单步运行,右侧区域可以看到变量的值。

在这里插入图片描述

  • 如果在这一段运行前按住SW2按键。
       	uint32_t btn_return0 = (PINS_DRV_ReadPins(BTN_PORT0) >> BTN_PIN0) & 0x01;//read SW2

然后一直点击单步运行,即可看到LED灯一个一个灭掉。

参考:https://blog.youkuaiyun.com/weifengdq/article/details/103916550

MPC5748G用户手册以及接口可以在NXP官网找到,需要注册账号,此文用到的文档已上传优快云:用户手册
代码已上传github:
https://github.com/aprilaaa/MPC5748Gworkspace/tree/main

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

aprilaaaaa

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

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

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

打赏作者

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

抵扣说明:

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

余额充值