S32K144(4)LED

本文档详细记录了基于S32K144微控制器的裸机程序开发过程,特别是关于LED控制的初始化和驱动代码。作者遇到并解决了在S32DS环境中添加自定义文件夹和路径的问题,通过配置PCC和PORT以驱动LED,并提供了bsp_led.h、bsp_led.c和main.c的代码示例。
摘要由CSDN通过智能技术生成

目录

附1、添加文件夹和添加路径

1、简介

2、LED原理图

3、代码编程

3.1、bsp_led.h

3.2、bsp_led.c

3.3、main.c


博客只是用于记录自己使用过的东西,将自己的感想和使用方法记录,过程可能会出现很多纰漏以及理解的不到位,希望可以和大家交流

附1、添加文件夹和添加路径

这里非常搞笑,我不想一个文件存放所有函数,想按照功能来排放,结果发现,除非自己把头文件和源文件直接放在src目录下,不然找不到也添加不来,S32DS仿佛没考虑过这种情况。后来我仔细看了看,发现想要添加项目目录下的文件夹只需要

哈哈,是的,只要刷新一下就好了,但是这样,在引用的时候,是找不到头文件的,报错如下

../src/main.c:6:22: fatal error: bsp_led.h: No such file or directory

所以需要添加头文件路径

再次build Project一下

完美,大功告成,开始正文

1、简介

开发板S32K144+S32DS+JLINK,裸机版的程序编写

2、LED原理图

可见都是低电平触发

3、代码编程

如果要使用某个GPIO端口,需要的准备工作是:

  1. 使用PCC指针打开对应的PCCn[]对应的CGC,PCCn是 PCC 所指向的结构体内部的数组,固定地址,包含一共有116个 uint32 类型寄存器,将对应的寄存器赋值为 PCC_PCCn_CGC_MASK 即可打开 CGC = 1 。
  2. 设置 GPIO 的控制器中的 PDDR 寄存器,用于调整输入/输出方向。此寄存器在一个类型为,GPIO_Type 的结构中,一共有 5 个固定地址的结构,使用 PTA/PTB/PTC/PTD/PTE 访问
  3. 设置 PORT.PCR 控制器,关闭中断,MUX 设置成为 001,是否开启被动滤波。使用PORTA/PORTB/PORTC/PORTD/PORTE 访问
  4. 读取对应的 PDIR (输入),或者给 PDOR 赋值 (输出)。使用 PTA/PTB/PTC/PTD/PTE 访问

3.1、bsp_led.h

#ifndef BSP_LED_H
#define BSP_LED_H

#include "S32K144.h"


#define PTD0 (0)   	/* Port D0: FRDM EVB output to  LED4 	*/
#define PTD1 (1) 	/* Port D16: FRDM EVB output to  LED3 	*/
#define PTD15 (15)	/* Port D15: FRDM EVB output to  LED2 	*/
#define PTD16 (16) 	/* Port D16: FRDM EVB output to  LED1 	*/

#define LED1_OFF 	(PTD->PSOR |= 1<<PTD16)
#define LED1_ON 	(PTD->PCOR |= 1<<PTD16)
#define LED2_OFF 	(PTD->PSOR |= 1<<PTD15)
#define LED2_ON 	(PTD->PCOR |= 1<<PTD15)
#define LED3_OFF 	(PTD->PSOR |= 1<<PTD1)
#define LED3_ON 	(PTD->PCOR |= 1<<PTD1)
#define LED4_OFF 	(PTD->PSOR |= 1<<PTD0)
#define LED4_ON 	(PTD->PCOR |= 1<<PTD0)

#define LED_OFF		LED1_OFF;LED2_OFF;LED3_OFF;LED4_OFF
#define LED_ON		LED1_ON;LED2_ON;LED3_ON;LED4_ON

void bsp_led_init(void);
#endif

3.2、bsp_led.c

void bsp_led_init(void)
{
	PCC->PCCn[PCC_PORTD_INDEX] |= PCC_PCCn_CGC_MASK;   /* Enable clock for PORTD */

	PORTD->PCR[PTD0] = PORT_PCR_MUX(1);		/* Port D0: MUX = GPIO  */
	PORTD->PCR[PTD1] = PORT_PCR_MUX(1);  	/* Port D1: MUX = GPIO */
	PORTD->PCR[PTD15] = PORT_PCR_MUX(1);  	/* Port D15: MUX = GPIO */
	PORTD->PCR[PTD16] = PORT_PCR_MUX(1);  	/* Port D16: MUX = GPIO */

	PTD->PDDR |= 1<<PTD0		/* Port D0:  Data Direction = output */
	  	  	  	|1<<PTD1	    /* Port D15: Data Direction = output */
	  	  	  	|1<<PTD15	    /* Port D15: Data Direction = output */
	  	  	  	|1<<PTD16;    	/* Port D16: Data Direction = output */
	LED_OFF;
}

3.3、main.c

#include "S32K144.h"
#include "bsp_led.h"

int main(void)
{
	unsigned long i;
	bsp_led_init();
	while(1){
		LED1_ON;
		for(i = 10000000;i>0;i--);
		LED2_ON;
		for(i = 10000000;i>0;i--);
		LED3_ON;
		for(i = 10000000;i>0;i--);
		LED4_ON;
		for(i = 10000000;i>0;i--);
		LED_OFF;
	}
    return 0;
}

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值