Skip to main content

GPIO使用

一 相关配置

gpio驱动添加

1

gpio相关操作demo

2

二 GPIO 调试

相关源码见libhardware2/src/cmds/gpio_main.c

2.1 shell命令

cmd_gpio set_func <GPIO> <FUNC>
功能:设定指定IO功能
参数:GPIO //IO⼝的名字
FUNC //IO的功能
example:cmd_gpio set_func PB28 func0
cmd_gpio get_func <GPIO>
功能:获取指定IO功能状态
参数:GPIO //IO的名字
example:cmd_gpio get_func PB28
cmd_gpio get_value <GPIO>
功能:获取IO电平
参数:GPIO //IO的名字
example:
cmd_gpio get_value PB28

2.2 具体例子

运用shell命令控制灯光引脚pc09,默认拉高,人为拉低实现关灯

cmd_gpio get_func pc09                //获取pc09的功能与状态
输出结果:
output1 pull_up //此时状态为上拉,输出高电平
cmd_gpio get_value pc09               //获取pc09电平值
输出结果:
1 //证明此刻pc09为高电平,板子上led灯为亮
cmd_gpio set_func pc09 output0        //将pc09功能设置为输出低电平,观察板子,led灯灭
输出结果:
无任何输出
cmd_gpio get_func pc09                //再次获取pc09的功能与状态,与之前设置比较
输出结果:
output0 pull_up //此时输出低电平

三 GPIO应用接口分析

相关源码见libhardware2/src/lib/gpio

3.1 API详细介绍

int gpio_open(void)
功能:获取gpio设备操作句柄
参数:

返回值:
成功:gpio设备句柄
失败:负数
int gpio_close(int fd)
功能:关闭gpio设备句柄
参数:
fd //gpio设备句柄,由gpio_open()函数获得
返回值:
成功:0
失败:负数
int gpio_set_func(int fd, const char *gpio, char *funcs[], unsigned int func_count)
功能:设置gpio功能
参数:
fd //gpio设备句柄,由gpio_open()函数获得
gpio //描述对应的gpio引脚,如"PB08"
funcs //描述对应的gpio引进功能
func_count //funcs 数组的长度,即一次设置的功能个数
返回值:
成功:0
失败:负数
int gpio_get_func(int fd, const char *gpio, char *buf, int buf_size)
功能:获得gpio当前的功能
参数:
fb //gpio设备句柄,由gpio_open()函数获得
gpio //描述对应的gpio引脚,如"PB08"
buf //缓冲区,用于获取gpio的功能(一个buf存放所有功能)
buf_size //给定的buf的大小
返回值:
成功:0
失败:负数
int gpio_get_value(int fd, const char *gpio)
功能:获得gpio输入的值
参数:
fd *//gpio设备句柄,由gpio_open()函数获得*
gpio *//描述对应的gpio引脚,如"PB08"*
返回值:
成功:01
失败:负数

四 在kernel中使用GPIO

4.1 kernel中的GPIO相关API详细介绍

申请与释放gpio

int gpio_request(unsigned gpio, const char *label)
功能:申请gpio
参数:
gpio //gpio引脚
label //描述gpio引脚
返回值:
成功:0
失败:负数
void gpio_free(unsigned gpio)
功能:注销gpio
参数:
gpio //gpio引脚
返回值:

获取与设置gpio端口电平

int gpio_get_value(unsigned gpio)
功能:获取gpio电平大小
参数:
gpio //gpio引脚
返回值:
成功:0
失败:负数
void gpio_set_value(unsigned gpio, int value)
功能:设置gpio电平大小
参数:
gpio //gpio引脚
value //引脚电平大小
返回值:

设置gpio端口方向与电平

int gpio_direction_output(unsigned gpio, int value)
功能:设置gpio输出电平大小
参数:
gpio //gpio引脚
value //引脚电平大小
返回值:
成功:0
失败:负数
int gpio_direction_input(unsigned gpio)
功能:设置gpio为输入
参数:
gpio //gpio引脚
返回值:
成功:0
失败:负数

gpio功能设置

#include<soc/gpio.h>         //包含此结构体
enum gpio_function { //gpio功能枚举,提供给gpio功能设置函数使用
GPIO_FUNC_0 = 0x10,
GPIO_FUNC_1 = 0x11,
GPIO_FUNC_2 = 0x12,
GPIO_FUNC_3 = 0x13,
GPIO_OUTPUT0 = 0x14,
GPIO_OUTPUT1 = 0x15,
GPIO_INPUT = 0x16,
GPIO_INT_LO = 0x18,
GPIO_INT_HI = 0x19,
GPIO_INT_FE = 0x1a,
GPIO_INT_RE = 0x1b,
GPIO_INT_MASK_LO = 0x1c,
GPIO_INT_MASK_HI = 0x1d,
GPIO_INT_MASK_FE = 0x1e,
GPIO_INT_MASK_RE = 0x1f,

GPIO_PULL_HIZ = 0x80,
GPIO_PULL_UP = 0xa0,
GPIO_PULL_DOWN = 0xc0,
};
int jzgpio_set_func(int port, enum gpio_function func, unsigned long pins)
功能:设置gpio功能
参数:
port //gpio引脚组别
func //描述gpio引脚功能
pins //gpio引脚
返回值:
成功: 0
失败:负数