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操作流程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章