嵌入式Linux如何用C读写gpio
时间: 2024-06-10 17:10:47 浏览: 179
在嵌入式Linux中,可以使用C语言编写程序来读写GPIO。以下是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
#define GPIO_ADDR_BASE 0x40000000 // GPIO基地址
#define GPIO_PIN_NUM 1 // GPIO引脚编号
int main(int argc, char *argv[]) {
int fd;
void *gpio_base;
volatile unsigned int *gpio_data;
// 打开/dev/mem设备
fd = open("/dev/mem", O_RDWR | O_SYNC);
if (fd < 0) {
perror("open");
exit(1);
}
// 映射GPIO基地址
gpio_base = mmap(NULL, 0x1000, PROT_READ | PROT_WRITE, MAP_SHARED, fd, GPIO_ADDR_BASE);
if (gpio_base == MAP_FAILED) {
perror("mmap");
exit(1);
}
// 获取GPIO引脚的数据寄存器地址
gpio_data = (volatile unsigned int *)((unsigned int)gpio_base + GPIO_PIN_NUM * 4);
// 设置GPIO引脚为输出模式
*gpio_data &= ~(1 << GPIO_PIN_NUM);
// 输出高电平
*gpio_data |= 1 << GPIO_PIN_NUM;
// 输出低电平
*gpio_data &= ~(1 << GPIO_PIN_NUM);
// 释放GPIO基地址映射
munmap(gpio_base, 0x1000);
// 关闭/dev/mem设备
close(fd);
return 0;
}
```
以上示例代码使用了/dev/mem设备来访问GPIO,需要进行root权限运行。该示例代码通过映射GPIO基地址,获取GPIO引脚的数据寄存器地址,然后通过设置数据寄存器的位来控制GPIO引脚的电平。具体来说,通过设置数据寄存器的特定位为1可以输出高电平,通过设置数据寄存器的特定位为0可以输出低电平。在代码中,GPIO_PIN_NUM表示GPIO引脚的编号,可以根据需要修改。
阅读全文