资讯详情

1、S32K1XX 系列 keil下新建工程

目录

    • S32K1XX 系列 keil下新建工程
        • 1.新建6个文件夹
        • 2、新建工程
        • 3、验证工程

S32K1XX 系列 keil下新建工程

1.新建6个文件夹

名称如下: 在这里插入图片描述

Project:存放工程文件;

HARDWARE:用于存储驱动文件的驱动层,如:GPIO、UART、SPI、I2C、CAN;

DEVICE:存储设备文件等设备层MU6050、LCD;

MiddleLayer:用于在应用层和设备层搭建桥梁的中间层;

APPLICATION:应用层,存储具体应用程序,呼吸灯;

COMMON:存放公共文件的公共文件;

2、新建工程

芯片型号进行采样S32K116

3、验证工程

在HARDWARE新建文件夹:GPIO.c、GPIO.h两个文件

#include "GPIO.h"  /* 定义五个指针数组保存 GPIOX 的地址 */ GPIO_MemMapPtr GPIOX[5] = { 
        PTA, PTB, PTC, PTD, PTE}; ///定义五个指针的数组保存 GPIOX 的地址 PORT_MemMapPtr PORTX[5] = { 
        PORTA, PORTB, PORTC, PORTD, PORTE};   void GPIO_PinInit(PTXn_e ptx_n, GPIO_CFG dir, uint8_t data) { 
              uint8_t ptx, ptn;      ptx = PTX(ptx_n);     ptn = PTn(ptx_n);      /* 端口时钟 */     PCC->PCCn[PCC_PORTA_INDEX   ptx] = PCC_PCCn_CGC_MASK;      /* 清除以前的复用功能 */     PORTX[ptx]-&g;PCR[ptn] &= ~(uint32)PORT_PCR_MUX_MASK;

    /* 设置复用功能为GPIO即普通IO口 */
    PORTX[ptx]->PCR[ptn] |= PORT_PCR_MUX(1);

    /* 配置GPIO模式 */
    PORTX[ptx]->PCR[ptn] |= dir;

    /* 设置GPIO方向 */
    if (dir)
    { 
        
        GPIOX[ptx]->PDDR |= (uint32)(1 << ptn);
    }
    else
    { 
        
        GPIOX[ptx]->PDDR &= ~(uint32)(1 << ptn);
    }

    /* 设置端口默认状态 */
    if (data)
    { 
        
        GPIOX[ptx]->PDOR |= (uint32)(1 << ptn);
    }
    else
    { 
        
        GPIOX[ptx]->PDOR &= ~(uint32)(1 << ptn);
    }
}

void GPIO_PinWrite(PTXn_e ptx_n, uint8_t data)
{ 
        
    uint8_t ptx, ptn;

    ptx = PTX(ptx_n);
    ptn = PTn(ptx_n);

    /* 设置端口默认状态 */
    if (data)
    { 
        
        GPIOX[ptx]->PDOR |= (uint32)(1 << ptn);
    }
    else
    { 
        
        GPIOX[ptx]->PDOR &= ~(uint32)(1 << ptn);
    }
}

#ifndef __GPIO_H_
#define __GPIO_H_
#include "common.h"
#include "stdint.h"
#include "S32K116.h"


//定义管脚状态
typedef enum GPIO_CFG
{ 
        
    //这里的值不能改!!!
    GPI         = 0x00,                       //定义管脚输入方向 GPIOx_PDDRn里,0表示输入,1表示输出
    GPO         = 0x01,                       //定义管脚输出方向

    GPI_DOWN    = 0x02,                       //输入下拉 PORTx_PCRn需要PE=1,PS=0
    GPI_UP      = 0x03,                       //输入上拉 PORTx_PCRn需要PE=1,PS=1
    GPI_PF      = 0x10,                       //输入,带无源滤波器,滤波范围:10 MHz ~ 30 MHz 。不支持高速接口(>=2MHz) 0b10000 Passive Filter Enable
    GPI_DOWN_PF = GPI_DOWN | GPI_PF,          //输入下拉,带无源滤波器
    GPI_UP_PF   = GPI_UP   | GPI_PF,          //输入上拉,带无源滤波器

    GPO_HDS     = 0x41,                       //输出高驱动能力 0b100 0001 High drive strength
    GPO_SSR     = 0x05,                       //输出慢变化率 0b101 Slow slew rate
    GPO_HDS_SSR = GPO_HDS | GPO_SSR,          //输出高驱动能力、慢变化率
} GPIO_CFG;  //最低位为0,肯定是输入;GPI_UP 和 GPI_UP_PF的最低位为1,其他为输出



void GPIO_PinInit(PTXn_e ptx_n, GPIO_CFG dir, uint8_t data);
void GPIO_PinWrite(PTXn_e ptx_n, uint8_t data);

#endif

新建clocks_and_modes_S32K11x.c和clocks_and_modes_S32K11x.h文件,用于初始化系统时钟;

#include "S32K116.h" /* include peripheral declarations S32K116 */
#include "clocks_and_modes_S32K11x.h"

void SOSC_init_40MHz(void)
{ 
        
	/*! SOSC Initialization (40 MHz): * ============================= * */
	SCG->SOSCDIV = SCG_SOSCDIV_SOSCDIV1(1)|
				   SCG_SOSCDIV_SOSCDIV2(1);  	/* SOSCDIV1 & SOSCDIV2 =1: divide by 1 */
	SCG->SOSCCFG  =	SCG_SOSCCFG_RANGE(3)|		/* Range=3: High frequency range selected */
					SCG_SOSCCFG_EREFS_MASK;		/* HGO=0: Config xtal osc for low power */
  	  	  	  	  	  	  	  	  	  	  	  	/* EREFS=1: Input is external XTAL */

  while(SCG->SOSCCSR & SCG_SOSCCSR_LK_MASK); 	/* Ensure SOSCCSR unlocked */
  SCG->SOSCCSR = SCG_SOSCCSR_SOSCEN_MASK; 		/* LK=0: SOSCCSR can be written */
												/* SOSCCMRE=0: OSC CLK monitor IRQ if enabled */
												/* SOSCCM=0: OSC CLK monitor disabled */
												/* SOSCERCLKEN=0: Sys OSC 3V ERCLK output clk disabled */
												/* SOSCLPEN=0: Sys OSC disabled in VLP modes */
												/* SOSCSTEN=0: Sys OSC disabled in Stop modes */
												/* SOSCEN=1: Enable oscillator */

while(!(SCG->SOSCCSR & SCG_SOSCCSR_SOSCVLD_MASK));	/* Wait for sys OSC clk valid */
}

void RUN_mode_48MHz (void)
{ 
        
	/*! Fast IRC is enabled and trimmed to 48 MHz in reset (default). * Set FIRCDIV1 & FIRCDIV2 = 1: divide by 1 = 48 MHz. * */
	SCG->FIRCDIV = SCG_FIRCDIV_FIRCDIV1(1)|
				   SCG_FIRCDIV_FIRCDIV2(1);

	/*! Fast IRC is enabled in high range (8MHz) in reset (default). * Set FIRCDIV1 & FIRCDIV2 = 1: divide by 1 = 8 MHz. * */
	SCG->SIRCDIV = SCG_SIRCDIV_SIRCDIV1(1)|
				   SCG_SIRCDIV_SIRCDIV2(1);

/*! * Select FIRC for RUN mode. * =========================== */
  SCG->RCCR=SCG_RCCR_SCS(3)      /* Select FIRC as clock source */
    |SCG_RCCR_DIVCORE(0b00)      /* DIVCORE=0, div. by 1: Core clock = 48 MHz */
    |SCG_RCCR_DIVBUS(0b00)       /* DIVBUS=0, div. by 1: bus clock = 48 MHz */
    |SCG_RCCR_DIVSLOW(0b01);     /* DIVSLOW=1, div. by 2: SCG slow, flash clock= 24 MHz */

  while (((SCG->CSR & SCG_CSR_SCS_MASK) >> SCG_CSR_SCS_SHIFT ) != 3) { 
        }	/* Wait for sys clk src = SPLL */
}

#ifndef CLOCKS_AND_MODES_S32K11X_H_
#define CLOCKS_AND_MODES_S32K11X_H_

void SOSC_init_40MHz (void);
void RUN_mode_48MHz (void);

#endif /* CLOCKS_AND_MODES_S32K11X_H_ */

在main函数中对GPIO进行操作,将GPIO -PTB2设置为输出模式,输出高电平。

#include <stdio.h>
#include "S32K116.h" /* include peripheral declarations S32K116 */
#include "clocks_and_modes_S32K11x.h"
#include "GPIO.h"

//关闭看门狗
void WDOG_disable (void)
{ 
        
  WDOG->CNT=0xD928C520;     /* Unlock watchdog */
  WDOG->TOVAL=0x0000FFFF;   /* Maximum timeout value */
  WDOG->CS = 0x00002100;    /* Disable watchdog */
}


//void LED_init()
//{ 
        
// /*LED--*/
// PCC->PCCn[PCC_PORTB_INDEX ]|=PCC_PCCn_CGC_MASK; //使能PTD端口时钟
// PORTB->PCR[2] = PORT_PCR_MUX(1);/* Port : MUX = GPIO */
// PTB->PDDR |= 1<<2; /* Port: Data direction */
// PTB->PSOR |= 1<<2; /* 高电平*/
 PTA->PCOR |= 1<<2;
//}


int main()
{ 
        
	WDOG_disable();
	SOSC_init_40MHz(); 	/* Initialize system oscillator for 40 MHz xtal */
	RUN_mode_48MHz();		/* Init clocks: 48 MHz sys, core and bus, 24 MHz flash. */
// LED_init();
	
	GPIO_PinInit(PTB2,GPO,0);
	
	while(1)
	{ 
        
		GPIO_PinWrite(PTB2,1);
	}
	
	return 0;
}

添加.h文件路径 并将S32K116.文件保存在common文件夹下 )

配置Jlink下载环境

选择S32K116

下载工程。

万用表或者示波器即可查看PTB2输出高电平。

标签: k11微差压变送器速度传感器spll85a

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台