h文件
/*NVIDIA Jetson Xavier NX 控制GPIO在linux系统中以文件io的方式控制GPIO示例,开发板为NVIDIA Jetson Xavier NX,其它公司的开发板也可使用。此代码功能:GPIO-09接入蜂鸣器,高电平开启,低电平关闭。
*/#ifndef NVIDIAGPIO_H
#define NVIDIAGPIO_H#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <unistd.h>
#include <fcntl.h>
#include <iostream>using namespace std;#define ON "1"              //开启
#define OFF "0"             //关闭
#define BUZZER "436"        //控制蜂鸣器引脚
#define DIRECTION_OUT "out"     //方向为输出
#define DIRECTION_IN "in"     //方向为输出class NvidiaGpio
{
public:NvidiaGpio();~NvidiaGpio();int openGpio(const char *port); //导入GPIOint closeGpio(const char *port); //导出GPIOint setGpioDirection(const char *port, const char *direction); //设置GPIO输入/输出模式int writeGpioValue(const char *port, const char *value); //设置GPIO值int readGpioValue(const char *port); //读取GPIO值
};#endif // NVIDIAGPIO_Hcpp文件
#include "nvidiagpio.h"NvidiaGpio::NvidiaGpio()
{}NvidiaGpio::~NvidiaGpio()
{}int NvidiaGpio::openGpio(const char *port)
{int fd = -1;const char *path = "/sys/class/gpio/export";if((fd = open(path, O_WRONLY)) == -1) {perror("Failed to open gpio! ");return -1;}write(fd, port, sizeof(port));close(fd);return 0;
}int NvidiaGpio::closeGpio(const char *port)
{int fd = -1;const char *path = "/sys/class/gpio/unexport";if((fd = open(path, O_WRONLY)) == -1) {perror("Failed to close gpio! ");return -1;}write(fd, port, sizeof(port));close(fd);return 0;
}int NvidiaGpio::setGpioDirection(const char *port, const char *direction)
{int fd = -1;char path[40] = {0};sprintf(path, "/sys/class/gpio/gpio%s/direction", port);if((fd = open(path, O_WRONLY)) == -1) {perror("Failed to set GPIO dirention! ");return -1;}write(fd, direction, sizeof(direction));close(fd);return 0;
}int NvidiaGpio::writeGpioValue(const char *port, const char *value)
{int fd = -1;char path[40] = {0};sprintf(path, "/sys/class/gpio/gpio%s/value", port);if((fd = open(path, O_WRONLY)) == -1) {perror("Failed to set GPIO value! ");return -1;}write(fd, value, sizeof(value));close(fd);return 0;
}int NvidiaGpio::readGpioValue(const char *port)
{int fd = -1;int value = 0;char path[40] = {0};sprintf(path, "/sys/class/gpio/gpio%s/value", port);if((fd = open(path, O_RDONLY)) == -1) {perror("Failed to set GPIO value! ");return -1;}char tmp[2] = {0};read(fd, tmp, 1);close(fd);value = atoi(tmp);return value;
}main文件
#include <iostream>
#include "nvidiagpio.h"using namespace std;int main()
{cout << "Hello World!" << endl;NvidiaGpio *gpio = new NvidiaGpio();if(gpio->openGpio(BUZZER) != 0) { //打开gpioexit(1);}usleep(10*1000);if(gpio->setGpioDirection(BUZZER, DIRECTION_OUT) != 0) { // 设置GPIO方向gpio->closeGpio(BUZZER);exit(1);}usleep(10*1000);if(gpio->writeGpioValue(BUZZER, ON) != 0) { //设置高电平为输出,开启蜂鸣器gpio->closeGpio(BUZZER);exit(1);}int ret = 0;ret = gpio->readGpioValue(BUZZER);cout<<"get gpio value: "<<ret<<endl;sleep(1);if(gpio->writeGpioValue(BUZZER, OFF) != 0) { //设置低电平为输出,关闭蜂鸣器gpio->closeGpio(BUZZER);exit(1);}ret = gpio->readGpioValue(BUZZER);cout<<"get gpio value: "<<ret<<endl;gpio->closeGpio(BUZZER);return 0;
}

注意GPIO文件位置

ubuntu GPIO口操作相关推荐

  1. 启明云端分享|ESP32学习笔记参考GPIO口操作

    提示:作为Espressif(乐鑫科技)大中华区合作伙伴及sigmastar(厦门星宸)VAD合作伙伴,我们不仅用心整理了你在开发过程中可能会遇到的问题以及快速上手的简明教程供开发小伙伴参考.同时也用 ...

  2. gpio-sunxi驱动应用gpio口终端操作

    内核里gpiolib可以操作gpio口,但基本只能作输入或输出功能.而全志的gpio控制器除这两种功能外,还提供了其它功能,如配置gpio的上下拉,输出电流等级大小等.所以全志提供了类似gpiolib ...

  3. GPIO口模拟I2C操作

    /*         作者:天空         日期:2014.5.12         功能:利用GPIO口模拟I2C总线,对传感器寄存器读取数据         注意:如果需要移植些文件到其他设 ...

  4. STM32笔记 GPIO介绍及IO口操作 STM32F0 利用C语言位域实现仿位带操作

    文章目录 GPIO简介 工作方式 相关寄存器介绍 IO 操作步骤 IO口三种操作细解 附录:C语言相关 偏移地址与绝对地址 GPIO简介 GPIO:每个连接到I/O总线上的设备都有自己的I/O地址集, ...

  5. STM8单片机GPIO口的驱动深度解析

    上一节给大家介绍了STM8标准库的移植,本节课开始学习我们单片机的外设的驱动,单片机基本的外设资料包括GPIO.外部中断.定时器.串口等,本节先给大家介绍一下STM8单片机的GPIO口. 我们先不介绍 ...

  6. Linux如何进行GPIO读写操作的?

    摘要:本文介绍GPIO的读写,介绍基本原理,以及不同读写方式的性能. 本文分享自华为云社区<Linux 基于sysfs的GPIO读写操作>,作者:一颗小树x . 前言 最近接触到Linux ...

  7. MTK 驱动开发(3)---GPIO口的使用方法汇总

    1简介 GPIO=General Purpose Input Output,通用输入输出.有时候简称为"IO口".通用,就是说它是万金油,干什么都行.输入输出,就是说既能当输入口使 ...

  8. stm32核心板可以点亮灯吗_二、STM32的GPIO输出操作

    这是我STM32F103C8T6开发笔记专栏的一部分.可以到专栏中查阅更多内容. STM32F103C8T6开发笔记整理​zhuanlan.zhihu.com [写在前面]: 这篇笔记的内容,主要是指 ...

  9. 番外篇:STM32之GPIO口速率配置究竟代表什么

    番外篇:STM32之GPIO口速率配置究竟代表什么 用过STM32的童鞋们都知道,STM32在GPIO配置时都需要选择一个GPIO速率,对于STM32F103系列芯片来说最快的配置应该是50Mhz左右 ...

最新文章

  1. IMXRT 分散加载文件 修改OCRAM,DTCM、ITCM大小
  2. Python,美国顶尖大学里最受欢迎的编程入门语言
  3. SDNU 1263.C语言程序设计教程(第三版)课后习题10.5(约瑟夫环)
  4. 小白学JAVA,与你们感同身受,JAVA---day6:抽象类接口的理解。鲁迅的一句话:总之岁月漫长,然而值得等待。
  5. KDD CUP 2018:中国团队包揽前三名,TOP1方案出炉
  6. JAVA-1011. A+B和C (15)
  7. g6-editor 使用
  8. 淘宝特价版注册“1元更香”商标,又一个新“节日”诞生了
  9. Java关键字、标识符及基本数据类型
  10. mui调本地相册上传图片
  11. Windows数据类型
  12. HDU3853:LOOPS
  13. 怎么下载python的各种库_各种Python库安装包下载地址与安装过程详细介绍(Windows版)...
  14. VUE 代码压缩优化
  15. matlab s域转时域,时域 S域 Z域转换
  16. 论文《Are We Really Making Much Progress? A Worrying Analysis of Recent Neural Recommendation ...》阅读
  17. 网站被百度提示安全风险拦截后如何快速申请解封
  18. 学术之声 | 专访北航教授洪晟:区块链应该管也能够管,而且要学会管
  19. mapStruct测试成功以及报错总结
  20. NOIP 2015 D1 T2 信息传递

热门文章

  1. 应用汇总|契约锁电子签章在各行各业的实际使用场景
  2. 【开机自启动】将一个程序设为开机自启动的4种方式 (亲测)
  3. 【Linux】一、Linux系统下安装Nvidia P1000显卡驱动、CUDA、cuDNN
  4. 普通域账户不能运行金山打字通的解决方案
  5. Linux 系统必备入门级自学手册!
  6. linux下java调用matlab方案
  7. (11)C#使用SunnyUI界面库的两个问题
  8. 招投标体统JAVA源代码,JSP 招投标管理系统(毕业设计)源码
  9. 各证件号码(身份证、护照、军官证、驾驶证、港澳台湾通行证、户口簿)正则表达式校验 完整正确
  10. 来给自己充电!推荐给程序员们的设计书目