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

本文介绍如何在BBB板上使用Shell命令控制GPIO口输出高低电平,并通过C++编程查询输入状态。涵盖GPIO文件操作流程,从命令行控制到编程实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值