首页 > 编程语言 >8.100ASK_T113-PRO 应用程序驱动LED灯 (/sys/class/gpio)

8.100ASK_T113-PRO 应用程序驱动LED灯 (/sys/class/gpio)

时间:2024-11-11 19:47:35浏览次数:3  
标签:LED int 32 PRO sys gpio include class

前言

1.利用LINUX内核的GPIO子统驱动LED灯.

2. 编写应用程序控制LED灯的亮灭.

3.不用写驱动程序,只写应用程序.

1.原理图

使用的是PE12这个IO口,计算一个IO编号:   PE=4*32,   IO编号 = 4*32 +12= 140.

注解一下:

PAX =  0*32 + X

PBX =  1*32 + X

PCX =  2*32 + X

PDX =  3*32 + X

PEX =  4*32 + X

看上面大家一定都会了.不会的话,自己看文档吧.
 

     

2.查看是否有/sys/class/gpio这个目录
ls /sys/class


我已经有这个内核驱动程序.

3.重新配置内核
如果没有 gpio 这个项驱动,我们需要重新配置内核

 首先cd到buildroot目录下,对kernel单独进行编译,输入的命令如下:

make linux-menuconfig

选中它并保存,退出menuconfig,编译它
 

4. 应用程序 gpioctrl.c

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>

int fd;
int len;
int ret;

char gpio_path[100];

int gpio_export(char * argv)
{

    fd = open("/sys/class/gpio/export",O_WRONLY);
    if (fd <0)
    {
        printf("open /sys/class/gpio/export error\r\n");
        return -1;
    }

    len = strlen(argv);
    ret = write(fd,argv,len);
    if (ret < 0)
    {
        printf("write /sys/class/gpio/export error\r\n");
        close(fd);
        return -2;
    }

    close(fd);
}


int gpio_unexport(char * argv)
{
    fd = open("/sys/class/gpio/unexport",O_WRONLY);
    if (fd <0)
    {
        printf("open /sys/class/gpio/unexport error\r\n");
        return -1;
    }

    len = strlen(argv);
    ret = write(fd,argv,len);
    if (ret < 0)
    {
        printf("write /sys/class/gpio/unexport error\r\n");
        close(fd);
        return -2;
    }

    close(fd);
}


int gpio_ctrl(char * argv,char *val )
{
    char file_path[100];

    sprintf(file_path,"%s/%s",gpio_path,argv);

    fd = open(file_path,O_WRONLY);
    if (fd <0)
    {
        printf("open file_path error\r\n");
        return -1;
    }

    len = strlen(val);
    ret = write(fd,val,len);
    if (ret < 0)
    {
        printf("write file_path error\r\n");
        close(fd);
        return -2;
    }

    close(fd);
}

int main( int argc, char *argv[])
{
    sprintf(gpio_path,"/sys/class/gpio/gpio%s",argv[1]);
    if (access(gpio_path,F_OK))
    {
        gpio_export(argv[1]);
    }
    else
    {
        gpio_unexport(argv[1]);
    }

    gpio_ctrl("direction","out");
    gpio_ctrl("value",argv[2]);

    gpio_unexport(argv[1]);
}

         5.测试

# ./gpioctrl 140 0
# ./gpioctrl 140 1

标签:LED,int,32,PRO,sys,gpio,include,class
From: https://blog.csdn.net/weixin_43756274/article/details/143693786

相关文章

  • [SUCTF 2019]EasySQL
    当输入数字时返回array结构,且任意非0数字都是返回1。当输入字符串时无任何回显。那么我们可以猜测sql语句中存在逻辑或符号||,因为任意非0在mysql中相当于true且返回值为1,而字符及字符串会被当作变量处理,或运算时会报错。那么绕过的方法是将mysql的sql_mode参数设置为PIPES_AS_CO......
  • 【024B】基于51单片机自行车测速里程计(带超速报警)【Proteus仿真+Keil程序+报告+原理图
    ☆、设计硬件组成:51单片机最小系统+A3144霍尔感应+DS1302时钟芯片+LCD1602液晶显示+电机+按键设置+蜂鸣器。1、设计采用STC89C52、AT89C52、AT89S52作为主控芯片,采用LCD1602液晶实时显示信息;2、采用DS1302时钟芯片具有掉电保护时间日期功能,为了在骑自行车到外面能方便的......
  • 【024A】基于51单片机自行车测速里程计【Proteus仿真+Keil程序+报告+原理图】
    ☆、设计硬件组成:51单片机最小系统+A3144霍尔感应+DS1302时钟芯片+LCD1602液晶显示+电机+按键设置+蜂鸣器。1、设计采用STC89C52、AT89C52、AT89S52作为主控芯片,采用LCD1602液晶实时显示信息;2、采用DS1302时钟芯片具有掉电保护时间日期功能,为了在骑自行车到外面能方便的......
  • antD——Warning: `callback` is deprecated. Please return a promise instead.
    参考:1.https://blog.csdn.net/huochai770880/article/details/125925665 我的情况antD表单校验,代码未报错,但提交时控制台报错:Warning:`callback`isdeprecated.Pleasereturnapromiseinstead. 原报错代码:constvalidateParams=useCallback((_:RuleObjec......
  • 【双11最后一天】活动商品低至8折!DL32逻辑分析仪Pro、加热台、电烙铁、开发板等活动产
    【双11最后一天】活动商品低至8折!DL32逻辑分析仪、加热台、电烙铁、开发板等活动产品限时优惠!各种爆款产品火热售卖中!双11最后一天,全店活动商品低至8折!全新DL32逻辑分析仪、HP15加热台,还有爆款产品T80智能电烙铁、DS100Mini手持示波器,开发板等活动产品限时优惠!各种新品及爆款产......
  • apropos——在 whatis 数据库中查找字符串
    转自于:https://github.com/jaywcjlove/linux-command,后不赘述apropos在whatis数据库中查找字符串补充说明apropos命令在一些特定的包含系统命令的简短描述的数据库文件里查找关键字,然后把结果送到标准输出。如果你不知道完成某个特定任务所需要命令的名称,可以使用一个关......
  • vue3 provide的值 在回调函数中改变,inject 如何获取到最新的值?
    需求:父组件,通过provide传递了视频方向的响应式值,该值会有一个初始化的默认值,并在获取视频方向的回调函数中,来动态改变子组件,需要获取到父组件传递的视频方向,来执行一些逻辑。这里我们在子组件中通过父组件传递响应式的变量,子组件接受后,通过watch监听该变量的改变,来动态执......
  • 【云原生】Prometheus基础篇
    系列综述:......
  • 基于云服务器搭建个人网站,nginx:bind() to 0.0.0.0:80 failed解决方法
    前言我在搭建个人网站时出现下面情况nginx:[emerg]bind()to0.0.0.0:80failed(98:Unknownerror)nginx:[emerg]bind()to[::]:80failed(98:Unknownerror)如果你的也是这样,本帖应能帮到你解决方法首先确保安全组中的80端口是开放的查看端口占用情况命令(可......
  • nginx权限问题 failed( 13 Permission denied )
    使用nginx代理时,文件一直无法展示,查看nginx的error日志文件显示Permissiondenied,权限问题1.查看nginx启动用户和使用用户是否一致psaux|grepnginx输出的第一列就是用户名称2.打开nginx配置文件#查找nginx.conf文件的位置ps-aux|grepngxin输出记录中有/conf/n......