九鼎创展论坛中文版English
登录 | 立即注册 设为首页收藏本站 切换到宽版
查看: 3080|回复: 2
打印 上一主题 下一主题

gpio库

[复制链接]
跳转到指定楼层
楼主
发表于 2016-3-19 14:06:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
每次使用gpio比较麻烦,所以参考教程写了一个gpio的头文价和大家分享一下。
每次只需包含头文件即可调用gpio。
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <dirent.h>
#include <time.h>

/*******************************************************************
nanopi2 gpio库:
整理者:扎哥
*******************************************************************/
#define  A  0
#define  B  1
#define  C  2
#define  D  3
#define  E  4

/*******************************************************************
gpio初始化 gpio_init(B,29,0);
* 0  输出
* 1  输入
*******************************************************************/
void gpio_init( char port, char pin, char direc )
{
    char buf[100];
    int fd=-1,i=0;
    DIR *dir;
   
    fd = open( "/sys/class/gpio/export", O_WRONLY );
    snprintf( buf, sizeof( buf ), "/sys/class/gpio/gpio%d", port * 32 + pin );

    if( ( dir = opendir( buf ) ) == NULL )
    {
        snprintf( buf, sizeof( buf ), "%d", port * 32 + pin );
        write( fd, buf, sizeof( buf ) );
    }
    closedir( dir );
    close( fd );


    snprintf( buf, sizeof( buf ), "/sys/class/gpio/gpio%d/direction", port * 32 + pin );
    if( fd = open( buf, O_WRONLY ) )
    {
        printf("%d\n",fd);
        if( direc == 0 )
        {
            i=write( fd, "out", sizeof("out") );
            printf( "GPIO %d.%d Output\n", port, pin );
        }
        else
        {
           i= write( fd, "in", sizeof("in") );
            printf( "GPIO %d.%d Input\n", port, pin );
        }
    }
    close( fd );
    printf( "GPIO %d.%d Init Success..\n", port, pin  );
}

/*******************************************************************
gpio电平配置
实例:gpio_write(B,29,1);
*******************************************************************/
void gpio_write(char port, char pin, char value)
{
   char buf[100];
    int fd=-1,i=0;

    snprintf( buf, sizeof( buf ), "/sys/class/gpio/gpio%d/value", port * 32 + pin );
    if( fd = open( buf, O_WRONLY) )
    {
        if( value == 0 )
        {
            i=write( fd, "0", sizeof("0") );
            printf( "GPIO %d.%d Output low\n", port, pin );
        }
        else
        {
            i=write( fd, "1", sizeof("1") );
            printf( "GPIO %d.%d Output high\n", port, pin );
        }
        close(fd);
    }
}
/*******************************************************************
gpio输入读取
实例:int zhage=gpio_read(B,29);
0:低电平
1:高电平
*******************************************************************/
int gpio_read( char port, char pin )
{
    int keyValue=1;
    char buf[100];
    int fd=-1;

    snprintf( buf, sizeof( buf ), "/sys/class/gpio/gpio%d/value", port * 32 + pin );

    fd = open( buf, O_RDONLY );
    printf("%d\n",fd);
    if( read( fd, &keyValue, 1) == -1 )
    {
        printf( "PIN%d.%d read error\n", port, pin );
    }
    close(fd);
    return keyValue-48;
}
回复

使用道具 举报

沙发
 楼主| 发表于 2016-3-19 14:08:21 | 只看该作者
以后还会有其他的库,请等待更新。
回复 支持 反对

使用道具 举报

板凳
发表于 2016-8-23 15:37:19 | 只看该作者
可以给个实际的例子不??比如监测GPIOB9的输入为高/低电平,菜鸟表示看的不是很明白。。。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳市九鼎创展科技官方论坛 ( 粤ICP备11028681号-2  

GMT+8, 2024-5-18 13:08 , Processed in 0.019441 second(s), 16 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表