目录
博客只是用于记录自己使用过的东西,将自己的感想和使用方法记录,过程可能会出现很多纰漏以及理解的不到位,希望可以和大家交流
附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端口,需要的准备工作是:
- 使用PCC指针打开对应的PCCn[]对应的CGC,PCCn是 PCC 所指向的结构体内部的数组,固定地址,包含一共有116个 uint32 类型寄存器,将对应的寄存器赋值为 PCC_PCCn_CGC_MASK 即可打开 CGC = 1 。
- 设置 GPIO 的控制器中的 PDDR 寄存器,用于调整输入/输出方向。此寄存器在一个类型为,GPIO_Type 的结构中,一共有 5 个固定地址的结构,使用 PTA/PTB/PTC/PTD/PTE 访问
- 设置 PORT.PCR 控制器,关闭中断,MUX 设置成为 001,是否开启被动滤波。使用PORTA/PORTB/PORTC/PORTD/PORTE 访问
- 读取对应的 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;
}