S32K1XX 系列 keil下新建工程
1.新建6個(gè)文件夾
名稱如下:
Project:用于存放工程文件;
HARDWARE:驅(qū)動(dòng)層,用于存放驅(qū)動(dòng)文件,如:GPIO、UART、SPI、I2C、CAN;
DEVICE:設(shè)備層,用于存放設(shè)備文件,如MU6050、LCD;
MiddleLayer:中間層,用于在應(yīng)用層和設(shè)備層搭建橋梁;
APPLICATION:應(yīng)用層,存放具體應(yīng)用程序,呼吸燈;
COMMON:公共文件,存放公用文件;
2、新建工程
2.1、點(diǎn)擊Project-> New uVision Project
2.2、選擇芯片型號(hào),根據(jù)需求選擇,本次測(cè)試采樣S32K116
2.3、勾選 CMSIS下的CORE和Device下的Startup,點(diǎn)擊OK
2.4、生成如下工程
2.5、在工程中添加文件夾
2.6、新建main.c文件,并添加到Project下
2.7、編譯之后會(huì)出現(xiàn)報(bào)錯(cuò)
解決如下:
2.8、再次編譯,無(wú)警告無(wú)報(bào)錯(cuò)
3、驗(yàn)證工程
在HARDWARE文件夾下新建:GPIO.c、GPIO.h兩個(gè)文件
GPIO.c進(jìn)行GPIO設(shè)置
1#include "GPIO.h"
2
3/* 定義五個(gè)指針數(shù)組保存 GPIOX 的地址 */
4GPIO_MemMapPtr GPIOX[5] = {PTA, PTB, PTC, PTD, PTE}; //定義五個(gè)指針數(shù)組保存 GPIOX 的地址
5PORT_MemMapPtr PORTX[5] = {PORTA, PORTB, PORTC, PORTD, PORTE};
6
7
8void GPIO_PinInit(PTXn_e ptx_n, GPIO_CFG dir, uint8_t data)
9{
10
11 uint8_t ptx, ptn;
12
13 ptx = PTX(ptx_n);
14 ptn = PTn(ptx_n);
15
16 /* 使能端口時(shí)鐘 */
17 PCC- >PCCn[PCC_PORTA_INDEX + ptx] = PCC_PCCn_CGC_MASK;
18
19 /* 清除之前的復(fù)用功能 */
20 PORTX[ptx]- >PCR[ptn] &= ~(uint32)PORT_PCR_MUX_MASK;
21
22 /* 設(shè)置復(fù)用功能為GPIO即普通IO口 */
23 PORTX[ptx]- >PCR[ptn] |= PORT_PCR_MUX(1);
24
25 /* 配置GPIO模式 */
26 PORTX[ptx]- >PCR[ptn] |= dir;
27
28 /* 設(shè)置GPIO方向 */
29 if (dir)
30 {
31 GPIOX[ptx]- >PDDR |= (uint32)(1 < < ptn);
32 }
33 else
34 {
35 GPIOX[ptx]- >PDDR &= ~(uint32)(1 < < ptn);
36 }
37
38 /* 設(shè)置端口默認(rèn)狀態(tài) */
39 if (data)
40 {
41 GPIOX[ptx]- >PDOR |= (uint32)(1 < < ptn);
42 }
43 else
44 {
45 GPIOX[ptx]- >PDOR &= ~(uint32)(1 < < ptn);
46 }
47}
48
49void GPIO_PinWrite(PTXn_e ptx_n, uint8_t data)
50{
51 uint8_t ptx, ptn;
52
53 ptx = PTX(ptx_n);
54 ptn = PTn(ptx_n);
55
56 /* 設(shè)置端口默認(rèn)狀態(tài) */
57 if (data)
58 {
59 GPIOX[ptx]- >PDOR |= (uint32)(1 < < ptn);
60 }
61 else
62 {
63 GPIOX[ptx]- >PDOR &= ~(uint32)(1 < < ptn);
64 }
65}
GPIO.h
1#ifndef __GPIO_H_
2#define __GPIO_H_
3#include "common.h"
4#include "stdint.h"
5#include "S32K116.h"
6
7
8//定義管腳狀態(tài)
9typedef enum GPIO_CFG
10{
11 //這里的值不能改!!!
12 GPI = 0x00, //定義管腳輸入方向 GPIOx_PDDRn里,0表示輸入,1表示輸出
13 GPO = 0x01, //定義管腳輸出方向
14
15 GPI_DOWN = 0x02, //輸入下拉 PORTx_PCRn需要PE=1,PS=0
16 GPI_UP = 0x03, //輸入上拉 PORTx_PCRn需要PE=1,PS=1
17 GPI_PF = 0x10, //輸入,帶無(wú)源濾波器,濾波范圍:10 MHz ~ 30 MHz 。不支持高速接口( >=2MHz) 0b10000 Passive Filter Enable
18 GPI_DOWN_PF = GPI_DOWN | GPI_PF, //輸入下拉,帶無(wú)源濾波器
19 GPI_UP_PF = GPI_UP | GPI_PF, //輸入上拉,帶無(wú)源濾波器
20
21 GPO_HDS = 0x41, //輸出高驅(qū)動(dòng)能力 0b100 0001 High drive strength
22 GPO_SSR = 0x05, //輸出慢變化率 0b101 Slow slew rate
23 GPO_HDS_SSR = GPO_HDS | GPO_SSR, //輸出高驅(qū)動(dòng)能力、慢變化率
24} GPIO_CFG; //最低位為0,肯定是輸入;GPI_UP 和 GPI_UP_PF的最低位為1,其他為輸出
25
26
27
28void GPIO_PinInit(PTXn_e ptx_n, GPIO_CFG dir, uint8_t data);
29void GPIO_PinWrite(PTXn_e ptx_n, uint8_t data);
30
31#endif
新建clocks_and_modes_S32K11x.c和clocks_and_modes_S32K11x.h文件,用于初始化系統(tǒng)時(shí)鐘;
clocks_and_modes_S32K11x.c
1#include "S32K116.h" /* include peripheral declarations S32K116 */
2#include "clocks_and_modes_S32K11x.h"
3
4void SOSC_init_40MHz(void)
5{
6 /*! SOSC Initialization (40 MHz):
7 * =============================
8 * */
9 SCG- >SOSCDIV = SCG_SOSCDIV_SOSCDIV1(1)|
10 SCG_SOSCDIV_SOSCDIV2(1); /* SOSCDIV1 & SOSCDIV2 =1: divide by 1 */
11 SCG- >SOSCCFG = SCG_SOSCCFG_RANGE(3)| /* Range=3: High frequency range selected */
12 SCG_SOSCCFG_EREFS_MASK; /* HGO=0: Config xtal osc for low power */
13 /* EREFS=1: Input is external XTAL */
14
15 while(SCG- >SOSCCSR & SCG_SOSCCSR_LK_MASK); /* Ensure SOSCCSR unlocked */
16 SCG- >SOSCCSR = SCG_SOSCCSR_SOSCEN_MASK; /* LK=0: SOSCCSR can be written */
17 /* SOSCCMRE=0: OSC CLK monitor IRQ if enabled */
18 /* SOSCCM=0: OSC CLK monitor disabled */
19 /* SOSCERCLKEN=0: Sys OSC 3V ERCLK output clk disabled */
20 /* SOSCLPEN=0: Sys OSC disabled in VLP modes */
21 /* SOSCSTEN=0: Sys OSC disabled in Stop modes */
22 /* SOSCEN=1: Enable oscillator */
23
24while(!(SCG- >SOSCCSR & SCG_SOSCCSR_SOSCVLD_MASK)); /* Wait for sys OSC clk valid */
25}
26
27void RUN_mode_48MHz (void)
28{
29 /*! Fast IRC is enabled and trimmed to 48 MHz in reset (default).
30 * Set FIRCDIV1 & FIRCDIV2 = 1: divide by 1 = 48 MHz.
31 * */
32 SCG- >FIRCDIV = SCG_FIRCDIV_FIRCDIV1(1)|
33 SCG_FIRCDIV_FIRCDIV2(1);
34
35 /*! Fast IRC is enabled in high range (8MHz) in reset (default).
36 * Set FIRCDIV1 & FIRCDIV2 = 1: divide by 1 = 8 MHz.
37 * */
38 SCG- >SIRCDIV = SCG_SIRCDIV_SIRCDIV1(1)|
39 SCG_SIRCDIV_SIRCDIV2(1);
40
41/*!
42 * Select FIRC for RUN mode.
43 * ===========================
44 */
45 SCG- >RCCR=SCG_RCCR_SCS(3) /* Select FIRC as clock source */
46 |SCG_RCCR_DIVCORE(0b00) /* DIVCORE=0, div. by 1: Core clock = 48 MHz */
47 |SCG_RCCR_DIVBUS(0b00) /* DIVBUS=0, div. by 1: bus clock = 48 MHz */
48 |SCG_RCCR_DIVSLOW(0b01); /* DIVSLOW=1, div. by 2: SCG slow, flash clock= 24 MHz */
49
50 while (((SCG- >CSR & SCG_CSR_SCS_MASK) > > SCG_CSR_SCS_SHIFT ) != 3) {} /* Wait for sys clk src = SPLL */
51}
clocks_and_modes_S32K11x.h
1#ifndef CLOCKS_AND_MODES_S32K11X_H_
2#define CLOCKS_AND_MODES_S32K11X_H_
3
4void SOSC_init_40MHz (void);
5void RUN_mode_48MHz (void);
6
7#endif /* CLOCKS_AND_MODES_S32K11X_H_ */
在main函數(shù)中對(duì)GPIO進(jìn)行操作,將GPIO -PTB2設(shè)置為輸出模式,輸出高電平。
main.c
1#include < stdio.h >
2#include "S32K116.h" /* include peripheral declarations S32K116 */
3#include "clocks_and_modes_S32K11x.h"
4#include "GPIO.h"
5
6//關(guān)閉看門狗
7void WDOG_disable (void)
8{
9 WDOG- >CNT=0xD928C520; /* Unlock watchdog */
10 WDOG- >TOVAL=0x0000FFFF; /* Maximum timeout value */
11 WDOG- >CS = 0x00002100; /* Disable watchdog */
12}
13
14
15//void LED_init()
16//{
17// /*LED--*/
18// PCC- >PCCn[PCC_PORTB_INDEX ]|=PCC_PCCn_CGC_MASK; //使能PTD端口時(shí)鐘
19// PORTB- >PCR[2] = PORT_PCR_MUX(1);/* Port : MUX = GPIO */
20// PTB- >PDDR |= 1< 2; /* Port: Data direction */
21// PTB- >PSOR |= 1< 2; /* 高電平*/
22//// PTA- >PCOR |= 1< 2;
23//}
24
25
26int main()
27{
28 WDOG_disable();
29 SOSC_init_40MHz(); /* Initialize system oscillator for 40 MHz xtal */
30 RUN_mode_48MHz(); /* Init clocks: 48 MHz sys, core and bus, 24 MHz flash. */
31// LED_init();
32
33 GPIO_PinInit(PTB2,GPO,0);
34
35 while(1)
36 {
37 GPIO_PinWrite(PTB2,1);
38 }
39
40 return 0;
41}
添加.h文件路徑
并將S32K116.文件保存在common文件夾下
配置Jlink下載環(huán)境
選擇S32K116
-
示波器
+關(guān)注
關(guān)注
113文章
6243瀏覽量
184878 -
CAN
+關(guān)注
關(guān)注
57文章
2744瀏覽量
463662 -
uart
+關(guān)注
關(guān)注
22文章
1235瀏覽量
101378 -
keil
+關(guān)注
關(guān)注
68文章
1212瀏覽量
166864 -
GPIO
+關(guān)注
關(guān)注
16文章
1204瀏覽量
52082
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論