S32K1XX_GPIO介绍与使用(输出功能的实现)

本文分享了作者在汽车行业从事ECU底层软件开发的经验,详细解析了K144单片机的GPIO模块,包括开发环境、GPIO各寄存器的功能和使用方法,以点亮LED灯为例,为初学者提供了GPIO操作的基础教程。
摘要由CSDN通过智能技术生成

前言

首先自我介绍一下,本人在汽车行业从事ECU的底层软件开发,主要负责K1和K3系列芯片的底层驱动开发。经历了近两年的摸爬滚打,对K1 K3的驱动开发有了一定熟悉,由于平时的工作比较追求效率与速度,很多细节都没有研究过,以此为学习总结分享给大家。接下来我们开始吧,一步一步掌握K1 K3单片机的使用。

一、开发环境介绍

本人使用的是K144主控芯片,兼容K1XX系列芯片,使用的软件S32 Design Studio for S32 Platform 3.5,版本为3.5。

二、GPIO介绍_芯片手册解读

对应到手册的第13章内容,关于GPIO的映射如图所示:

在这里插入图片描述

图1 GPIO的地址映射

由图可知,K14X系列芯片的IO口有5组,分别为PortA,PortB,PortC,PortD,PortE,每一组IO的地址偏移量为0X40,如图2所示,则是介绍了每组IO的起始地址,和每组IO的寄存器内容,每一组IO包含了7个32位的寄存器,同时也介绍了每个寄存器的读写特性,RW表示可读可写,RO表示只读,WORZ表示写之后自动清除,按照我的理解则是执行一次写指令会立马生效,但是内容会被清除。

在这里插入图片描述

首先是第1个,PDOR寄存器:全称为Port Data Output Register,这是在GPIO输出中,这是最主要最关键也是最常用的一个寄存器,在IO口作为输出时,用于控制输出高低电平,该寄存器为32位,即最多可以控制32个IO口,但是实际芯片引脚有限,并不是每组32个引脚都会引出。该寄存器的作用是控制引脚输出高低电平,如图3所示:为PortX的PDOR寄存器。

在这里插入图片描述

由图分析可知,该寄存器为32位,RW表示可读可写,我们也可以通过读的方式,知道某个引脚是否输出高低电平,GPIOD的起始地址(基地址)为0X400FF0C0,每个地址对应一字节的8位寄存器,地址每加1,则移动到下一个8位。根据手册介绍,支持同时操作8位,16位和32位寄存器,以下寄存器的都是一样的特性。

第2个,PSOR寄存器:全称为Port Set Output Register。对PSOR的中某位置1,对应引脚输出高电平,同时PDOR的该位会自动位置1;对PSOR的中某位置0,对应引脚输出状态不变,不影响PDOR的该位的状态。。由上介绍可知,PSOR寄存器是写了之后立即清除,即每当有一次写操作,就会生效一次,读取该寄存器的值永远是0,因为每次操作之后会自动清0.

第3个,PCOR寄存器:全称为Port Clear Output Register,按照字面意思,清除输出状态寄存器,把PCOR某位置1,即把PDOR的某位置0则对应引脚输出低电平;如果把PCO某位置0,则不影响输出状态,同上,与PSOR寄存器的效果类似。每进行一次写操作,则生效一次。

第4个,PTOR寄存器:全称为Port Toggle Output Register ,这个寄存器就有意思一些了,把PTOR的某位置1,则PDOR对应位的值会发生反转引脚输出极性相反的电平
同上,每进行一次写操作,则生效一次。

第5个,PDIR寄存器:全称为Port Data Input Register ,该寄存器是当IO有用作输入模式时,采集对应位的电平状态,如果该寄存器对应位的值为0,则采集到的引脚状态为低电平;相反,如果对应位的值为1,则采集到的引脚状态为高电平。同时,该寄存器为只读,不可以写入信息。 * 关于输入采集的使用,会在后续文章介绍*

第6个,PDDR寄存器:全称为Port Data Direction Register,该寄存器的是用于配置某引脚为输入或者输出模式,对应位置0,为通用输入模式,如果在PIDR(下一个介绍)寄存器中被禁用,则该引脚状态为高阻态,即悬空;如果对应位置1,则是通用输出模式,找了很多资料没有找到内部的电路图,按照本人的理解为推挽输出模式,即可以输出高,也可以输出低,如有不正望大家指出。

第7个,PIDR寄存器,全称为Port Input Disable Register,用于控制某引脚的输入功能是否使能,所以,在PDDR寄存器中,如果配置为输入模式,此处还需要控制PIDR寄存器对应位要使能,置0则使能输入功能,置1则禁用输入功能。
芯片手册中关于寄存器的介绍就结束,资料内容没有很详细,下面就开始实战编程,以有更深刻的认识。

三、PIN配置与代码编写

写软件的目标是以硬件设计来定的,此处以点亮LED灯为目标,首先介绍原理图,如图5和图6所示所示,为LED灯的连接方式,分析可知,LED灯一端接电源,另一端接单片机的引脚,采用低边驱动的方式连接,此处以LEDR为例,则PTD15给低电平,则LEDR灯点亮

在这里插入图片描述

这里插入图片描述

首先在S32软件的PINS配置中,此处采用官方提供的某Demo工程进行配置,需要将PTD15进行配置,如图6所示:
在这里插入图片描述

首先点击“芯片”图标配置引脚,在此处配置PTD15引脚为OUTPUT(输出模式),再生成源代码即可。因为我的板子有4个LED灯,就配置了四个引脚,因为LED灯是低电平点亮,所以Initial value初始化的值设为高,让LED熄灭,大家可以根据自己需求来。如图7所示,提供的信息就是关于GPIO寄存器的映射。

在这里插入图片描述

如图8中的宏定义PTD映射的为其地址为0X400FF0C0,并将该地址强转为GPIO_Type结构体类型的指令,使用该结构体,我们就能操作对应寄存器。
此处分享几种寄存器控制的方式进行输出高低电平,在main函数中,采用的是官方提供的时钟初始化GPIO初始化函数,这个一定不要漏掉,否则没有效果。
GPIO的初始化,我们需要用到PINS_DRV_Init()函数,NUM_OF_CONFIGURED_PINS0表示配置了多少个引脚,g_pin_mux_InitConfigArr0表示各个PIN脚的信息,这些信息都是在配置PINS生成的。大家可以搜索函数的位置,并调用头文件。下面将介绍各个寄存器的用法。

1:PDOR寄存器:代码如图8所示:按照理解,给PTD的bit15置0,就可以控制输出低电平。
此处我们用同位与运算符&,置反符~,以及位移运算符<<将bit15的置清0;然后再用|对bit15赋值为0。

在这里插入图片描述

其实在第一步中,就已经把bit15清0了,但是为了不影响其他位的状态,所以需要用此操作,而且需要输出高电平的话,在|运算中给1就行了。

2:PCOR寄存器:如图10所示:本人觉得控制上面的PDOR寄存就够用了,其他寄存器都是锦上添花。此处作为延申可以了解一下,如图9 所示,对bit15置1,可以输出低电平。
在这里插入图片描述

3:PSOR寄存器:如图10所示:接着第一步,继续把PSOR的bit15置1,这样就会把PDOR的bit15置1,输出高电平。

在这里插入图片描述

4:PTOR寄存器:如图11所示:把PTOR的某位置1,就让PDR的某位反转,即电平状态反转。
在这里插入图片描述

以上是关于输出寄存器的使用,官方也提供了一些库函数,此处介绍一些函数的使用方法:如图12所示:在pin_mux.h中,有一些宏定义变量,XXX_PORT为某PORT的基地址,XXX_PIN位该引脚在寄存器中的偏移量。

在这里插入图片描述

同时在pins_driver.c中包含了我们需要用的库函数,在main函数中调用其头文件即可。如图13所示:

在这里插入图片描述

强烈建议使用PINS_DRV_WritePin函数就够用了,也是日常开发最常用的函数,里面包含3个形参,分别是起始地址,偏移量和寄存器该位要写入的值,0对应输出低,1对应输出高。再往下面看看,这个函数到底怎么在操作寄存器。如图14所示,其实该操作,与上文介绍的寄存器操作方式是一样的。

在这里插入图片描述

知道了该函数的用法,我们就可以直接使用了,如图15所示:使用该函数输出低电平

在这里插入图片描述

总结

以上关于GPIO芯片手册的解读,以及输出的控制,后续将更新GPIO输入信号的检测,由于本人是第一次写文章,如有缺漏欢迎指出,有什么不清楚的地方,也欢迎私信交流。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值