Linux 操作 GPIO:从入门到实践

GPIO
GPIO(General Purpose Input/Output)即通用输入输出,是嵌入式系统中最常见的接口之一,在Linux系统中,GPIO被广泛应用于各种硬件设备控制,如LED灯控制、电机驱动等,本文将详细介绍如何在Linux环境下操作GPIO。
GPIO 硬件连接
在操作GPIO之前,首先需要了解硬件连接,以STM32系列微控制器为例,GPIO引脚分为输入和输出两种类型,以下是GPIO硬件连接的基本步骤:
- 确定GPIO引脚:根据实际需求,选择合适的GPIO引脚进行操作。
- 连接GPIO引脚:将GPIO引脚与LED灯、电机驱动等硬件设备连接。
- 连接电源:确保硬件设备正常供电。
Linux 系统准备
在Linux环境下操作GPIO,需要准备以下条件:
- Linux操作系统:如Ubuntu、CentOS等。
- 开发环境:如Eclipse、Keil等。
- 开发工具:如gcc、make等。
GPIO 编程

以下是使用C语言在Linux环境下操作GPIO的基本步骤:
包含头文件
#include <sys/mman.h> #include <fcntl.h> #include <unistd.h> #include <stdio.h>
打开GPIO设备文件
#define GPIO_BASE 0x20200000
#define GPIO_PIN 5
#define GPIO_DIR (GPIO_BASE + 0x14)
#define GPIO_OUT (GPIO_BASE + 0x18)
#define GPIO_IN (GPIO_BASE + 0x28)
int fd = open("/dev/mem", O_RDWR | O_SYNC);
if (fd < 0) {
printf("Failed to open /dev/mem\n");
return -1;
}
映射GPIO设备文件
void *gpio = mmap(NULL, getpagesize(), PROT_READ | PROT_WRITE, MAP_SHARED, fd, GPIO_BASE);
if (gpio == MAP_FAILED) {
printf("Failed to map GPIO memory\n");
close(fd);
return -1;
}
设置GPIO引脚为输出模式
*(volatile unsigned long *)(gpio + GPIO_DIR) &= ~(1 << GPIO_PIN);
输出高电平
*(volatile unsigned long *)(gpio + GPIO_OUT) |= (1 << GPIO_PIN);
输出低电平

*(volatile unsigned long *)(gpio + GPIO_OUT) &= ~(1 << GPIO_PIN);
释放GPIO设备文件
munmap(gpio, getpagesize()); close(fd);
GPIO 测试
在编译并运行程序后,观察LED灯是否按照预期闪烁,若LED灯正常工作,则说明GPIO操作成功。
本文介绍了在Linux环境下操作GPIO的基本方法,通过了解GPIO硬件连接、系统准备、编程及测试等步骤,读者可以掌握如何在Linux系统中操作GPIO,在实际应用中,根据具体需求调整GPIO配置,实现各种硬件设备的控制。


















