基本GPIO操作

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

单片机工作前需要使能系统时钟

1
MAP_SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ | SYSCTL_OSC_MAIN); 

可以将系统时钟设置到50Mhz;

时钟的学习参见时钟

接下来使能GPIO接口

1
2
//使能F组外设时钟
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);

接下来设置GPIO接口模式

1
2
3
4
//表示将F口的3引脚设置为输出
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_3);
//如果要设置多个pin的话
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_2 | GPIO_PIN_4 | GPIO_PIN_5);

接下来设置输出

1
2
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
SysCtlDelay ( SysCtlClockGet() * 秒数 / 3);

怎样读入呢?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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)) {
;//等按键松开
}
}