锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

嵌入式Linux开发|点亮那颗LED灯

时间:2022-10-01 13:00:01 546led二极管led驱动电路续流二极管

做嵌入式开发离不开LED,小小的LED可以作为系统状态指示,为调试带来方便。下面是典型的LED控制电路:
在这里插入图片描述
通过控制可以看到AA27和AF这两个引脚达到控制LED1和LED2这两个LED。

如果是单片机开发,控制一个LED步骤简单直接,直接配置GPIO功能,输出高,底电平可以控制LED了。

相对而言,在Linux在系统下,我想控制一个LED,比较费周折,有以下几种方法:

  1. 通过gpiolib子系统控制IO来驱动LED。
  2. 通过sys子系统控制IO来驱动LED,即通过/sys/class/gpio/来控制GPIO。
  3. 通过led子系统下leds-gpio驱动来控制LED。

第一和第二是直接控制的GPIO来达到控制LED,这更适合简单的应用场景,比如只控制LED打开和关闭。如果你想实现LED呼吸,闪烁,并且以不阻塞主程序的方式运行,那么,LED控制相对困难。此时,应选择使用leds-gpio驱动模式。

内核Documentation/devicetree/bindings/leds/leds-gpio.txt详细介绍了设备树如何配置LED。每个LED都是gpio-leds驱动子节点,并说明子节点的各种属性:

  • label:定义LED例如,名字sys-heartbeat;
  • gpios:定义LED关联的GPIO,并说明了gpio有效状态。
  • linux,default-trigger:定义了LED典型的触发方法有heartbeat、timer等。
  • default-state:定义LED默认状态。
  • 等等。

以下设备树定义了两个LED:sys-heartbeat、net-state。

  • sys-heartbeat定义为心跳模式,表示当前系统1min以前的负载状态;
  • user-led0定义为timer模式,表示LED以一定的可调频率闪烁。
  compatible = "gpio-leds";         pinctrl-names = "default";         pinctrl-0 = <&pinctrl_gpio_led>;                                                                                                                                                                                                                                                                                                    led@0 { 
                    label = "sys-heartbeat";             gpios = <&gpio1 0 GPIO_ACTIVE_HIGH>;             linux,default-trigger = "heartbeat";             default-state = "off";         };             led@1 { 
                    label = "user-led0";             gpios = <&gpio1 1 GPIO_ACTIVE_HIGH>;             linux,default-trigger = "timer";             default-state = "off";         };   

user-led0和sys-heartbeat位于两个节点/sys/class/leds。下面以user-led如何控制0例led。

  • brightness:表示LED普通发光二极管的亮度LED,只有两种状态:>0,LED亮,=0,LED灭;
  • trigger:表示LED目前的触发方法是timer。
  • delay_on/off:表示trigger为timer时,led亮灭的时间。
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章