Nvidia Jetson Nano学习笔记--使用C语言实现GPIO控制

**

嵌入式学习笔记三

C语言实现GPIO口控制

**

关于实现PC机与Nano的远程通信和程序的交叉编译,有如下的教程:
1.PC与Nano远程通信
2.PC和Nano实现程序的程序编译

文章目录

    • 嵌入式学习笔记三
    • C语言实现GPIO口控制
  • 前言
  • 一、Linxu应用层控制GPIO
  • 二、使用GPIO库实现IO口控制
  • 三、Nvidia Nano的GPIO编号
  • 总结


前言

在学习完PC和Nano的通信和程序交叉编译后,开始学习使用Nano上的GPIO口,编写代码的软件是Vscode


一、Linxu应用层控制GPIO

在Linux上的GPIO口有现成的库可以调用无需自己编写底层代码,Linux是用过sysfs方式来驱动GPIO口,GPIO设备文件在/sys/class/gpio目录下,进入到/sys/class/gpio目录下,如下图所示。
Nvidia Jetson Nano学习笔记--使用C语言实现GPIO控制_第1张图片
exportunexport先不介绍,关键要注意gpiochip0gpiochip504这两个文件夹,这两个文件夹分别管理Nano上的两组GPIO口,可以认为这两个文件夹就是GPIO口的管理器。(gpiochipx 文件夹命名并不唯一)

进入gpiochip0文件夹,有如下文件。
Nvidia Jetson Nano学习笔记--使用C语言实现GPIO控制_第2张图片
base:表示当前改组GPIO组中的最小的编号,可以通过cat base命令来查看,可知当前该GPIO组中最小的编号为0
在这里插入图片描述
label:表示该组GPIO所对应的标签,也就是名字。同样可以通过cat label命令来查看。
Nvidia Jetson Nano学习笔记--使用C语言实现GPIO控制_第3张图片
ngpio:表示该组GPIO的数量,同样可以通过cat ngpiol命令来查看。
在这里插入图片描述

回到GPIO目录,开始介绍export和unexport这两个文件。

export:是用于将指定GPIO编号引脚导出,在使用该 GPIO 引脚之前,需要将其导出,导出成功之后才能使用它。注意 export 文件是只写文件,不能读取,将一个指定的编号写入到 export 文件中即可将对应的 GPIO 引脚导出。

举个例子:导出编号为216的引脚,代码如下图:

echo 216 > export

当导出成功后,会发现gpio文件夹里多个一个gpio216的文件夹,。这个文件夹就是导出来的 GPIO 引脚对应的文件夹,用于管理、控制该 GPIO 引脚。
Nvidia Jetson Nano学习笔记--使用C语言实现GPIO控制_第4张图片
unexpoet:是将导出的GPIO 引脚删除。当使用完 GPIO 引脚之后,我们需要将导出的引脚删除,同样该文件也是只写文件、不可读,譬如:

echo 216 > unexpoet

二、使用GPIO库实现IO口控制

打开导出的gpio216文件,在该文件夹目录下存在一些属性文件可用于控制 GPIO引脚的输入、输出以及输出的电平状态等。(需要注意的是,并不是所有 GPIO 引脚都可以成功导出,如果对应的 GPIO 已经在内核中被使用了,那便无法成功导出)

gpio216文件夹:里的文件如下图所示:
Nvidia Jetson Nano学习笔记--使用C语言实现GPIO控制_第5张图片
direction :配置 GPIO 引脚为输入或输出模式。该文件可读、可写,读表示查看 GPIO 当前是输入还是输出模式,写表示将 GPIO 配置为输入或输出模式;读取或写入操作可取的值为"out"(输出模式)和"in"(输入模式),如下所示:

Nvidia Jetson Nano学习笔记--使用C语言实现GPIO控制_第6张图片
value:在 GPIO 配置为输出模式下,向 value 文件写入"0"控制 GPIO 引脚输出低电平,写入"1"则控制 GPIO 引脚输出高电平。在输入模式下,读取 value 文件获取 GPIO 引脚当前的输入电平状态。譬如:

# 获取 GPIO 引脚的输入电平状态
	echo "in" > direction
	cat value
# 控制 GPIO 引脚输出高电平
	echo "out" > direction
	echo "1" > value
# 控制 GPIO 引脚输出低电平
	echo "out" > direction
	echo "0" > value

active_low:这个属性文件用于控制极性,可读可写,默认情况下为 0

# active_low 等于 0
	echo "0" > active_low
	echo "out" > direction
	echo "1" > value
 #输出高
	echo "0" > value
 #输出低
	# active_low 等于 1
	$ echo "1" > active_low
	$ echo "out" > direction
	$ echo "1" > value
 #输出低
	$ echo "0" > value
 #输出高

edge:控制中断的触发模式,该文件可读可写。在配置 GPIO 引脚的中断触发模式之前,需将其设置为输入模式:
非中断引脚:echo “none” > edge
上升沿触发:echo “rising” > edge
下降沿触发:echo “falling” > edge
边沿触发:echo “both” > edge

三、Nvidia Nano的GPIO编号

光看Nano板子上的丝印是无法找到对于IO口的编号的,实际IO口所对应的编号如下图所示:
Sysfs GPIO就是IO口实际所对应的编号
Nvidia Jetson Nano学习笔记--使用C语言实现GPIO控制_第7张图片


总结

总结一下在Nano上使用GPIO口的步骤:
1.进入到/sys/class/gpio 目录下。
2.导出目标IO口的 GPIO文件(假设 目标IO口编号为216,实际对应Nano上的第7号管脚)

echo 216 > expoet

3.进入所导出的gpio216文件夹。
4.如果需要该引脚输出高低电平则

//设置direction为输出模式,默认为输入模式
echo "out" > direction

//输出高电平,
echo 1 > value

//输出低电平
echo 0 > value

//active_low 级性为0,表示 1--高电平,0--低电平, 极性为1则相反

关于在Vscode上编写GPIO_应用的代码在我的下一篇文章中。

你可能感兴趣的:(linux,学习,c语言,linux,nvidia,控制)