s32k1xx 系列 keil下新建工程1.新建6个文件夹名称如下:
project:用于存放工程文件;
hardware:驱动层,用于存放驱动文件,如:gpio、uart、spi、i2c、can;
device:设备层,用于存放设备文件,如mu6050、lcd;
middlelayer:中间层,用于在应用层和设备层搭建桥梁;
application:应用层,存放具体应用程序,呼吸灯;
common:公共文件,存放公用文件;
2、新建工程2.1、点击project-> new uvision project
2.2、选择芯片型号,根据需求选择,本次测试采样s32k116
2.3、勾选 cmsis下的core和device下的startup,点击ok
2.4、生成如下工程
2.5、在工程中添加文件夹
2.6、新建main.c文件,并添加到project下
2.7、编译之后会出现报错
解决如下:
2.8、再次编译,无警告无报错
3、验证工程在hardware文件夹下新建:gpio.c、gpio.h两个文件
gpio.c进行gpio设置
1#include gpio.h 2 3/* 定义五个指针数组保存 gpiox 的地址 */ 4gpio_memmapptr gpiox[5] = {pta, ptb, ptc, ptd, pte}; //定义五个指针数组保存 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{1011 uint8_t ptx, ptn;1213 ptx = ptx(ptx_n);14 ptn = ptn(ptx_n);1516 /* 使能端口时钟 */17 pcc- >pccn[pcc_porta_index + ptx] = pcc_pccn_cgc_mask;1819 /* 清除之前的复用功能 */20 portx[ptx]- >pcr[ptn] &= ~(uint32)port_pcr_mux_mask;2122 /* 设置复用功能为gpio即普通io口 */23 portx[ptx]- >pcr[ptn] |= port_pcr_mux(1);2425 /* 配置gpio模式 */26 portx[ptx]- >pcr[ptn] |= dir;2728 /* 设置gpio方向 */29 if (dir)30 {31 gpiox[ptx]- >pddr |= (uint32)(1 < pddr &= ~(uint32)(1 < pdor |= (uint32)(1 < pdor &= ~(uint32)(1 < pdor |= (uint32)(1 < pdor &= ~(uint32)(1 < =2mhz) 0b10000 passive filter enable18 gpi_down_pf = gpi_down | gpi_pf, //输入下拉,带无源滤波器19 gpi_up_pf = gpi_up | gpi_pf, //输入上拉,带无源滤波器2021 gpo_hds = 0x41, //输出高驱动能力 0b100 0001 high drive strength22 gpo_ssr = 0x05, //输出慢变化率 0b101 slow slew rate23 gpo_hds_ssr = gpo_hds | gpo_ssr, //输出高驱动能力、慢变化率24} gpio_cfg; //最低位为0,肯定是输入;gpi_up 和 gpi_up_pf的最低位为1,其他为输出25262728void gpio_pininit(ptxn_e ptx_n, gpio_cfg dir, uint8_t data);29void gpio_pinwrite(ptxn_e ptx_n, uint8_t data);3031#endif新建clocks_and_modes_s32k11x.c和clocks_and_modes_s32k11x.h文件,用于初始化系统时钟;
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 */1415 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 */2324while(!(scg- >sosccsr & scg_sosccsr_soscvld_mask)); /* wait for sys osc clk valid */25}2627void 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);3435 /*! 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);4041/*!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 */4950 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_34void sosc_init_40mhz (void);5void run_mode_48mhz (void);67#endif /* clocks_and_modes_s32k11x_h_ */在main函数中对gpio进行操作,将gpio -ptb2设置为输出模式,输出高电平。
main.c
1#include 2#include s32k116.h /* include peripheral declarations s32k116 */ 3#include clocks_and_modes_s32k11x.h 4#include gpio.h 5 6//关闭看门狗 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}131415//void led_init()16//{17// /*led--*/18// pcc- >pccn[pcc_portb_index ]|=pcc_pccn_cgc_mask; //使能ptd端口时钟19// portb- >pcr[2] = port_pcr_mux(1);/* port : mux = gpio */20// ptb- >pddr |= 1< psor |= 1< pcor |= 1< <2;23//}242526int 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();3233 gpio_pininit(ptb2,gpo,0);3435 while(1)36 {37 gpio_pinwrite(ptb2,1);38 }3940 return 0;41}添加.h文件路径
并将s32k116.文件保存在common文件夹下
配置jlink下载环境
选择s32k116
下载工程;用万用表或者示波器即可查看ptb2输出高电平。
京东再次为低俗广告道歉
云计算市场竞争激烈 百度云借AI发力 浪潮云占坑
数字电视概述(DTV)
医疗器械与药物“异花受粉”带来的机遇与挑战
变速器故障及原因
S32K1XX系列keil下新建工程及验证
电池监控涉及到哪些技术 电池监控解决方案系统框图
诺基亚2017霸气回归,大哥还是那个砸核桃的大哥吗?
MAX44007 Low-Power Digital Amb
串口设备框架serial_v2源码分析-阻塞模式
门禁企业如何打响这场疫情防控“战”?
机器学习的6个关键概念
金融借助人工智能颠覆性重塑金融业
看得到科技、看不到体验!Leader为用户带来智慧洗护生活
如何验证白光干涉仪精度丨科普篇
稳定时间电路的修正过程
气压传感器MS4525DO-DS3BS005DS空速管测量风速
节约电费,使用合适的电表很重要
MVME8100单板计算机,高端工业控制系统的利器
华为与牧原会开展技术等合作 推动养殖产业向数字化、智能化迈进