**
**
关于实现PC机与Nano的远程通信和程序的交叉编译,有如下的教程:
1.PC与Nano远程通信
2.PC和Nano实现程序的程序编译
在学习完PC和Nano的通信和程序交叉编译后,开始学习使用Nano上的GPIO口,编写代码的软件是Vscode
在Linux上的GPIO口有现成的库可以调用无需自己编写底层代码,Linux是用过sysfs方式来驱动GPIO口,GPIO设备文件在/sys/class/gpio目录下,进入到/sys/class/gpio目录下,如下图所示。
export和unexport先不介绍,关键要注意gpiochip0和gpiochip504这两个文件夹,这两个文件夹分别管理Nano上的两组GPIO口,可以认为这两个文件夹就是GPIO口的管理器。(gpiochipx 文件夹命名并不唯一)
进入gpiochip0文件夹,有如下文件。
base:表示当前改组GPIO组中的最小的编号,可以通过cat base命令来查看,可知当前该GPIO组中最小的编号为0
label:表示该组GPIO所对应的标签,也就是名字。同样可以通过cat label命令来查看。
ngpio:表示该组GPIO的数量,同样可以通过cat ngpiol命令来查看。
回到GPIO目录,开始介绍export和unexport这两个文件。
export:是用于将指定GPIO编号引脚导出,在使用该 GPIO 引脚之前,需要将其导出,导出成功之后才能使用它。注意 export 文件是只写文件,不能读取,将一个指定的编号写入到 export 文件中即可将对应的 GPIO 引脚导出。
举个例子:导出编号为216的引脚,代码如下图:
echo 216 > export
当导出成功后,会发现gpio文件夹里多个一个gpio216的文件夹,。这个文件夹就是导出来的 GPIO 引脚对应的文件夹,用于管理、控制该 GPIO 引脚。
unexpoet:是将导出的GPIO 引脚删除。当使用完 GPIO 引脚之后,我们需要将导出的引脚删除,同样该文件也是只写文件、不可读,譬如:
echo 216 > unexpoet
打开导出的gpio216文件,在该文件夹目录下存在一些属性文件可用于控制 GPIO引脚的输入、输出以及输出的电平状态等。(需要注意的是,并不是所有 GPIO 引脚都可以成功导出,如果对应的 GPIO 已经在内核中被使用了,那便无法成功导出)
gpio216文件夹:里的文件如下图所示:
direction :配置 GPIO 引脚为输入或输出模式。该文件可读、可写,读表示查看 GPIO 当前是输入还是输出模式,写表示将 GPIO 配置为输入或输出模式;读取或写入操作可取的值为"out"(输出模式)和"in"(输入模式),如下所示:
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
光看Nano板子上的丝印是无法找到对于IO口的编号的,实际IO口所对应的编号如下图所示:
Sysfs GPIO就是IO口实际所对应的编号
总结一下在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_应用的代码在我的下一篇文章中。