GPIO输出和输入

smallcracker 2021-01-29 00:00:00
Categories: Tags:

GPIO 输入和输出

首先使能GPIO接口
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);

接下来设置GPIO模式为输出
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_3);

最后进行输出
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, 0); 或者 void GPIOPinWrite(Port,Pins,which_pin);

GPIO函数一共有三种

  1. 配置GPIO pins的函数
  2. 处理中断的函数
  3. 获取pins value的函数

配置32和TI的方式就是不一样的,32的GPIO是用结构体进行配置,TI则使用函数来进行配置。

TI的普通配置只需要进行GPIO外设使能和方向控制即可。也不是说前面说到的功能模式就不能配置了,如果有需要可以进行其他类型的配置。
如果要进行端口高低电平的输出控制,32和TI也是一样的调用函数来进行配置,分别是:GPIO_SetBits(GPIOE,GPIO_Pin_5); 和 GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, 0);

注意:TI的输出高低电平使用的是同一个函数GPIOPinWrite(),对于32则使用的是两个函数:GPIO_SetBits()和GPIO_ResetBit()即可输出高低电平。TI呢,则不是这样的,就连入口参数也不是和32一样那么简单,GPIOPinWrite()入口参数就有三个,分别是GPIO_PORTx_BASE,GPIO_PIN_x,和0(低电平时候为0,但是高电平时候不是1,而是GPIO_PIN_x)。例如PF1输出高电平 :
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, GPIO_PIN_1);

输入输出的模式一般不用管,但应了解浮空输入 上拉输入 下拉输入 模拟输入 开漏输出 推挽输出 复用推挽输出 复用开漏输出

怎样读入呢?

1
2
3
4
5
6
7
8
9
ReadPin1 = GPIOPinRead(GPIO_PORTF_BASE, GPIO_PIN_4);//检测
if((ReadPin1&GPIO_PIN_4) != GPIO_PIN_4) { //如果按下
SysCtlDelay(20*(SysCtlClockGet()/3000));//消抖
ReadPin1 = GPIOPinRead(GPIO_PORTF_BASE, GPIO_PIN_4);//再次检测
if((ReadPin1&GPIO_PIN_4) != GPIO_PIN_4) {//再次判断
KeyPress1 = true;//如果按下,则置一个标志位
while(!GPIOPinRead(GPIO_PORTF_BASE, GPIO_PIN_4)){}//等按键松开
}
}

GPIO输出最终模板

1
2
3
4
5
6
//使能GPIO外设
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
//设置引脚为GPIO输出模式
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_3);
//引脚输出
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3, 0);

部分函数研究

  1. GPIODirModeSet()
    描述:设置了管脚的方向是向内、向外还是硬件控制
  2. GPIOPadConfigSet()
    描述:设置了一些引脚的输出驱动强度,和引脚类型
    GPIO_PIN_TYPE_STD 推挽输出 可以输出高低电平
    GPIO_PIN_TYPE_STD_WPU 推挽——弱上拉
    GPIO_PIN_TYPE_STD_WPD 推挽——弱下拉
    GPIO_PIN_TYPE_OD 开漏输出 IO 输出 0 接 GND, IO 输出 1,悬空,需要外接上拉电阻,才能实现输出
    GPIO_PIN_TYPE_ANALOG 模拟输出
    GPIO_PIN_TYPE_WAKE_HIGH 于hibernation mode 有关
    GPIO_PIN_TYPE_WAKE_LOW
  3. GPIOPinConfigure()
  4. GPIOPinRead()
  5. GPIOPinWrite()