02 应用层控制GPIO
应用层控制GPIO
控制GPIO硬件有以下几种方法:
- 编写驱动程序,在设备的IO操作里完成对GPIO的任意控制
- 在应用层依靠GPIO子系统在
/sys/class/gpio
中为GPIO类设备的属性文件来进行简单控制
1.基于sysfs
进入到/sys/class/gpio
目录下可以看到GPIO控制器包含以下属性:
export
unexport
gpiochipX
在使用一个GPIO前,需要将一个GPIO导出到用户空间,这样才能使用它,通过将要导出的GPIO序号写入到export
属性文件即可完成导出,取消导出的话将要取消导出的GPIO序号写入到unexport
属性文件即可。
在导出一个GPIO后,在/sys/class/gpio
目录下会新多出一个目录,代表此GPIO设备,该目录包含4个属性文件:
1.active_low
:配置GPIO的极性,value的0/1到底代表高还是低电平由此属性决定( ==输入输出均是==)
1 | //active_low 等于 0 时 |
2.direction
:配置 GPIO 引脚为输入或输出模式。该文件可读、可写,读表示查看 GPIO 当前是输入还是输出模式,写表示将 GPIO 配置为输入或输出模式;读取或写入操作可取的值为”out”(输出模式)和”in”(输入模式)
3.edge
:控制GPIO中断的触发模式,该文件可读可写。在配置 GPIO 引脚的中断触发模式之前,需将其设置为输入模式:
- 非中断引脚:echo “none” > edge
- 上升沿触发:echo “rising” > edge
- 下降沿触发:echo “falling” > edge
- 边沿触发:echo “both” > edge
4.value
:在 GPIO 配置为输出模式下,向 value 文件写入“0”控制 GPIO 引脚输出低电平,写入”1”则控制 GPIO 引脚输出高电平。在输入模式下,读取 value 文件获取 GPIO 引脚当前的输入电平状态。
2.基于libgpiod
此库也是基于Linux内核GPIO子系统来实现的,可以在用户态控制GPIO的状态,底层主要是通过与/dev/gpiochipX
设备节点通过ioctl()
进行I/O操作来控制这些硬件的
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.