ATK-DLMP135开发板点亮LED

一、LED设备的属性文件

        1、brightness:亮度,该属性文件可读可写;所以这个属性文件是用于设置 LED 的亮度等级或者获取当前 LED 的亮度等级,譬如 brightness 等于 0 表示 LED 灭,brightness 为正整 数表示 LED 亮,其值越大、LED 越亮;对于 PWM 控制的 LED 来说,这通常是适用的,因为它存在亮度等级的问题,不同的亮度等级对应不同的占空比,自然 LED 的亮度也是不同的;但对于 GPIO控制(控制 GPIO 输出高低电平)的 LED 来说,通常不存在亮度等级这样的说法,只有 LED 亮 (brightness 等于 0)和 LED 灭(brightness 为非 0 值的正整数)两种状态。

        2、max_brightness该属性文件只能被读取,不能写,用于获取 LED 设备的最大亮度等级。

        3、trigger触发模式,该属性文件可读可写,读表示获取 LED 当前的触发模式,写表示设置 LED 的 触发模式。不同的触发模式其触发条件不同,LED 设备会根据不同的触发条件自动控制其亮、灭状态,通过 cat 命令查看该属性文件,可获取 LED 支持的所有触发模式以及 LED 当前被设置的触发模式。可以使用cat命令查看。

        常用的触发模式包括:none(无触发)、mmc0 (当对 mmc0 设备发起读写操作的时候 LED 会闪烁)、 timer LED 会有规律的一 亮一灭,被定时器控制住)、heartbeat (心跳呼吸模式, LED 模仿人的心跳呼吸那样亮灭变化)。

二、编写 LED的程序

/*点亮led*/

#include 
#include 
#include 
#include 
#include 
#include 
#include 

//触发方式
#define LED_TRIGGER     "/sys/class/leds/sys-led/trigger"
//亮度等级
#define LED_BRIGHTNESS  "/sys/class/leds/sys-led/brightness"
#define USAGE()     fprintf(stderr,"usage:\n""   %s\n""   %s\n",\
                argv[0],argv[0])

int main(int argc,char* argv[])
{
    int fd1,fd2,ret;

    //检验传参
    if(argc < 2)
    {
        USAGE();
        exit(-1);
    }

    //打开文件
    fd1 = open(LED_TRIGGER,O_RDWR);
    if(fd1 == -1)
    {
        perror("open error1");
        exit(-1);
    }

    fd2 = open(LED_BRIGHTNESS,O_RDWR);
    if(fd2 == -1)
    {
        perror("open error2");
        ret = -1;
        goto out1;
    }

    //根据传参控制LED
    if(strcmp(argv[1],"on") == 0) //使用字符串比较函数,相等返回0
    {
        //修改触发方式,无触发none
        write(fd1,"none",4);
        //修改亮度等级为1
        write(fd2,"1",1);
    }
    else if(strcmp(argv[1],"off") == 0)
    {
        //修改触发方式,无触发none
        write(fd1,"none",4);
        //修改亮度等级为0        write(fd2,"0",1);
    }
    else if(strcmp(argv[1],"trigger") == 0)
    {
        //检验传参
        if(argc != 3)
        {
            USAGE();
            ret = -1;
            goto out2;
        }

        //修改触发方式
        if(write(fd1,argv[2],strlen(argv[2])) < 0)
        {
            perror("write error");
            ret = -1;
            goto out2;
        }
    }
    else
    {
        USAGE();
    }



out2:
    close(fd2);
out1:
    close(fd1);
    exit(-1);
}


 三、编译可执行文件

arm-linux-gnueabihf-gcc -o led led.c

编译完成可得到一个led的可执行文件。

四、上板测试

        在上板之前,将前面编译出来的可执行文件拷贝到开发板系统中,这里使用scp命令。

scp led [email protected]:/root

scp :拷贝命令。

led :可执行文件

root:开发板用户名

192.168.1.108: 开发板网络地址

/root:保存的路径。

在1处输入密码,这里默认不显示。

然后在开发板系统的路径下可以找到刚才拷贝的可执行文件。

ATK-DLMP135开发板点亮LED_第1张图片

然后执行led程序

./led on //打开led
./led off //关闭led
./led trigger heartbeat //使led以心跳的方式闪烁
./led trigger timer  //使led以一定时间进行闪烁

ATK-DLMP135开发板点亮LED_第2张图片

你可能感兴趣的:(linux,stm32,c语言)