IO口输出高电平点亮LED,下面我们学习如何控制IO口的高低电平。
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); //端口F外设使能
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1); //PF1设置为输出
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, GPIO_PIN_1); //PF1输出高电平
相应的PF1置低:
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, 0);//PF1输出低电平
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
GPIOPadConfigSet(GPIO_PORTF_BASE,GPIO_PIN_1,GPIO_STRENGTH_2MA,GPIO_PIN_TYPE_STD);
GPIODirModeSet(GPIO_PORTF_BASE, GPIO_PIN_1, GPIO_DIR_MODE_OUT);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, GPIO_PIN_1);
这两种方式其实是一样的,因为这个GPIOPinTypeGPIOOutput
函数是又被封装了一次,可以看看其定义:
void
GPIOPinTypeGPIOOutput(uint32_t ui32Port, uint8_t ui8Pins)
{
//
// Check the arguments.
//
ASSERT(_GPIOBaseValid(ui32Port));
//
// Set the pad(s) for standard push-pull operation.
//
GPIOPadConfigSet(ui32Port, ui8Pins, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD);
//
// Make the pin(s) be outputs.
//
GPIODirModeSet(ui32Port, ui8Pins, GPIO_DIR_MODE_OUT);
}
可以看出里面包含了GPIOPadConfigSet
和GPIODirModeSet
两个函数。关于这两个函数的详细使用在下面的GPIO输入里面详细讲解。
首先初始化IO口为输入模式:
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
GPIODirModeSet(GPIO_PORTF_BASE, GPIO_PIN_4, GPIO_DIR_MODE_IN);
GPIOPadConfigSet(GPIO_PORTF_BASE,GPIO_PIN_4,GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);
这里说一下GPIODirModeSet
和GPIOPadConfigSet
两个函数
1、GPIODirModeSet
主要是设置某个端口的方向,这里主要看第三个参数,有以下几种选择:
#define GPIO_DIR_MODE_IN 0x00000000 // Pin is a GPIO input
#define GPIO_DIR_MODE_OUT 0x00000001 // Pin is a GPIO output
#define GPIO_DIR_MODE_HW 0x00000002 // Pin is a peripheral function
一看名字便知其意思。
2、GPIOPadConfigSet
设置IO口
看第三个参数的选择:
#define GPIO_STRENGTH_2MA 0x00000001 // 2mA drive strength
#define GPIO_STRENGTH_4MA 0x00000002 // 4mA drive strength
#define GPIO_STRENGTH_6MA 0x00000065 // 6mA drive strength
#define GPIO_STRENGTH_8MA 0x00000066 // 8mA drive strength
#define GPIO_STRENGTH_8MA_SC 0x0000006E // 8mA drive with slew rate control
#define GPIO_STRENGTH_10MA 0x00000075 // 10mA drive strength
#define GPIO_STRENGTH_12MA 0x00000077 // 12mA drive strength
即设置电流强度
看第四个参数的选择:
#define GPIO_PIN_TYPE_STD 0x00000008 // Push-pull
#define GPIO_PIN_TYPE_STD_WPU 0x0000000A // Push-pull with weak pull-up
#define GPIO_PIN_TYPE_STD_WPD 0x0000000C // Push-pull with weak pull-down
#define GPIO_PIN_TYPE_OD 0x00000009 // Open-drain
#define GPIO_PIN_TYPE_ANALOG 0x00000000 // Analog comparator
#define GPIO_PIN_TYPE_WAKE_HIGH 0x00000208 // Hibernate wake, high
#define GPIO_PIN_TYPE_WAKE_LOW 0x00000108 // Hibernate wake, low
即设置推挽,上下拉这种,作为输出时一般用推挽(GPIO_PIN_TYPE_STD
),作为输入时一般用上拉(GPIO_PIN_TYPE_STD_WPU
)或下拉(GPIO_PIN_TYPE_STD_WPD
)。
初始化IO口为输入模式后便可以读取其电平状态了:
GPIOPinRead(GPIO_PORTF_BASE, GPIO_PIN_4)
此函数的返回值,以PF4为例,当PF4为高电平时返回值的低8位:00010000
,即16。当PF4位低电平时返回0。
功能:按下按键灯亮,松开灯灭。
#include
#include
#include "inc/hw_gpio.h"
#include "driverlib/gpio.h"
#include "driverlib/pin_map.h"
#include "inc/hw_memmap.h"
#include "driverlib/sysctl.h"
int main()
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
//设置PF4为上拉输入模式
GPIODirModeSet(GPIO_PORTF_BASE, GPIO_PIN_4, GPIO_DIR_MODE_IN);
GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_4, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);
//设置PF1为输出模式
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, 0);
//进行按键检测
while(1)
{
//没有被按下,为高电平
if(GPIO_PIN_4 == GPIOPinRead(GPIO_PORTF_BASE, GPIO_PIN_4))
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, 0);
//被按下
else
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, GPIO_PIN_1);
}
}