BBB学习(八):操作BBB普通IO口

一、前言

在linux系统中,一切设备都是以文件形式存在,因此其有一个中心思想是“一切都是文件”(当然除了网络设备是用套接字方式之外)。在接下来的文章中会操作BBB相关硬件接口(gpio\i2c\spi等),此时对这个思想的理解会更深刻。每一个硬件接口在/dev或/sys/class下都有对应的文件,通过对该硬件接口的open\write\read实现对其的操作。

本节将对BBB普通IO口进行操作,以控制一个gpio口输出高低电平及输入高低电平检测。

二、shell命令控制IO口

主要路径及命令

GPIO文件位置:/sys/class/gpio

shell主要命令:
cat命令:读取文件内容。echo: 写入文件内容

主要流程:
1. 打开该GPIO44目录:cd /sys/class/gpio
2. 查看文件当前文件:ls。查看有无gpio44这个文件夹。如果没有 ,输入:echo 44 > export ,就可以出现。出现后输入cd gpio44

image

  1. 查看GPIO44当前状态: cat direction
    可以看出gpio44默认是输入状态。我们可以把它置成输出 echo out > direction.
  2. 设置GPIO44输出高电平:echo 1 > value
    设置GPIO44输出低电平:echo 0 > value
  3. gpio44在BBB板子上是P8_12,可以通过接led或测量电平查看其电平状态。

image

三、c++编程实现输入状态查询

#include <stdio.h>
#include <unistd.h>
#include<iostream>

using namespace std;

#define GPIO_DIR "/sys/class/gpio/gpio44/"
int main()
{
    FILE *fp=NULL;
    int i=0;
    char ioStatus = 0;

    fp=fopen(GPIO_DIR"direction","r+");   /*读写模式打开direction*/
    if (fp == NULL) {
        cout << "open failed!"<< endl;
        return 0;
    }
    fwrite("in",sizeof(char),2,fp);    /*设置为输入模式*/
    fclose(fp);

    for (i=0;i<5;i++)
    {       
        fp=fopen(GPIO_DIR"value","r+");
        if (fp == NULL) {
             cout << "open failed!" << endl;
             return 0;
        }
        fread(&ioStatus, sizeof(char),1,fp);  /*读取引脚输入电平*/
        cout << "gpio44 input status:" <<ioStatus<< endl;
        sleep(1);    /*延时一秒*/
        fclose(fp);
    }
    return 0;
}

主要流程:

  1. 打开xshell连接到BBB板,输入命令:nano testIO.cpp,将上述程序粘贴到该文件中。

image

image

  1. 此时ctrl+o保存,此时会出现下图,接着回车就保存完成。保存后ctrl+x退出。

image

  1. 输入以下命令进行编译。
g++ -c testIO.cpp
g++ testIO.o -o test
  1. 运行命令执行程序:./test
    通过查询IO可知,gpio44为P8_12,可以通过将BBB本身接口的3.3V或地接到P8_12,可以检测其输入状态。

image

image

image

image

四、总结

本节主要介绍了BBB作为普通IO口的操作流程,主要是通过对文件的读写实现对gpio的简单控制。本节作为入门,直接在BBB上对程序进行编译,不涉及交叉编译的知识。可以简单了解BBB操作流程。

猜你喜欢

转载自blog.csdn.net/b5w2p0/article/details/79211043
bbb
今日推荐