PAGE1
PAGE1
8.外设接口编程技术
8.1GPIO(通用输入输出)编程
GPIO(通用输入输出)是单片机中最基本的外设接口之一,用于控制外部设备的开关状态或读取外部设备的状态。在TivaC系列(基于TM4C123)中,GPIO接口的设计非常灵活,可以配置为输入、输出、中断等多种模式。
8.1.1GPIO的基本配置
在使用GPIO之前,需要进行一些基本的配置,包括启用GPIO端口时钟、配置GPIO端口的方向(输入或输出)以及初始化GPIO引脚。
#includeti/devices/tm4c123/driverlib/sysctl.h
#includeti/devices/tm4c123/driverlib/gpio.h
//启用GPIO端口时钟
voidGPIO_Init(void){
//启用端口F的时钟
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
//等待端口F的时钟启用
while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOF)){}
//配置PF0为输出
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE,GPIO_PIN_0);
}
8.1.2GPIO的输出控制
配置完GPIO引脚后,可以通过GPIOPinWrite函数来控制引脚的输出状态。
voidGPIO_OutputExample(void){
//初始化GPIO
GPIO_Init();
//使PF0高电平
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_0,GPIO_PIN_0);
//延时一段时间
SysCtlDelay(SysCtlClockGet()/3);//延时1秒
//使PF0低电平
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_0,0);
}
8.1.3GPIO的输入读取
读取GPIO引脚的状态可以通过GPIOPinRead函数实现。
uint8_tGPIO_InputExample(void){
uint8_tinput_state;
//初始化GPIO
GPIO_Init();
//配置PF1为输入
GPIOPinTypeGPIOInput(GPIO_PORTF_BASE,GPIO_PIN_1);
//读取PF1的状态
input_state=GPIOPinRead(GPIO_PORTF_BASE,GPIO_PIN_1);
returninput_state;
}
8.1.4GPIO中断配置
GPIO可以配置为中断输入,当引脚状态发生变化时触发中断。中断配置需要设置中断触发类型、使能中断以及编写中断服务例程。
#includeti/devices/tm4c123/driverlib/interrupt.h
//中断服务例程
voidGPIOPortFIntHandler(void){
uint32_tstatus;
//获取中断状态
status=GPIOIntStatus(GPIO_PORTF_BASE,false);
//清除中断标志
GPIOIntClear(GPIO_PORTF_BASE,status);
//处理中断
if(statusGPIO_PIN_1){
//PF1引脚触发中断
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_0,GPIO_PIN_0);//使PF0高电平
}
}
voidGPIO_InterruptExample(void){
//初始化GPIO
GPIO_Init();
//配置PF1为输入
GPIOPinTypeGPIOInput(GPIO_PORTF_BASE,GPIO_PIN_1);
//设置PF1的中断触发类型为下降沿触发
GPIOIntTypeSet(GPIO_PORTF_BASE,GPIO_PIN_1,GPIO_FALLING_EDGE);