15_内核led

一、内核led简介

​ linux 内核集成了 LED 的驱动(采用 platform框架),因此只要在设备树文件中添加相应的 LED 节点即可。

1、使能内核led驱动(配置图形化界面)

​ 打开图形化配置界面,按照以下路径配置内核:

make menuconfig
    -> Device Drivers 
    	-> LED Support (NEW_LEDS [=y]) 
    		->LED Support for GPIO connected LEDs

​ 保存退出后,在 .config 文件查看 “CONFIG_LEDS_GPIO=y" 这一配置项。

2、内核led驱动

​ led 驱动文件为 /drivers/leds/leds-gpio.c,在 /drivers/leds/Makefile 这个文件可以定义是否编译 led 的驱动文件。当 .config 文件中的 “CONFIG_LEDS_GPIO=y" 成立时,Makefile 中的编译目标被激活。

​ 内核驱动的 name 字段为:“leds-gpio”,因此设备树中的 compatible 属性要为 “leds-gpio”。

3、编写设备树节点

​ 文档 Documentation/devicetree/bindings/leds/leds-gpio.txt 介绍了 led 驱动设备树节点的编写。

  • 创建一个节点表示 LED 灯设备,比如 dtsleds,如果板子上有多个 LED 灯的话每个 LED 灯都作为 dtsleds 的子节点。

  • dtsleds 节点的 compatible 属性值一定要为 “gpio-leds”。

  • 设置 label 属性,此属性为可选,每个子节点都有一个 label 属性, label 属性一般表示 LED 灯的名字,比如以颜色区分的话就是 red、 green 等等。

  • 每个子节点必须要设置 gpios 属性值,表示此 LED 所使用的 GPIO 引脚。

  • 可以设置 “linux,default-trigger” 属性值,也就是设置 LED 灯的默认功能,介绍文档 Documentation/devicetree/bindings/leds/common.txt 详细介绍了可选功能,例如:

    backlight:LED灯作为背光。

    default-on:LED灯打开。

    heartbeat:LED灯作为心跳指示灯,可以作为系统运行提示灯。

    ide-disk:LED灯作为硬盘活动指示灯。

    timer:LED灯周期性闪烁,由定时器驱动,闪烁频率可以修改。

  • 可以设置 “default-state” 属性值,可以设置为 on、 off 或 keep,为 on 的时候 LED 灯默认打开,为 off 的话 LED 灯默认关闭,为 keep 的话 LED 灯保持当前模式。

设备树节点示例:

dtsled {
		compatible = "gpio-leds";

		led0 {
			label = "red";
			gpios = <&gpio1 3 GPIO_ACTIVE_LOW>;
			linux,default-trigger = "heartbeat";	//led心跳灯
			default-state = "on";	//默认打开led
		};
	};

4、运行测试

​ 启动后 led 会心跳闪烁。

​ 启动后查看 /sys/bus/platform/devices/dtsleds 这个目录是否存在,如果存在,进入 leds 目录下会找到一个 red 的子目录。

​ 查看 sys/class/leds/red/brightness 这个文件是否存在,如果没有设置 led 默认打开,可以使用如下命令打开:

echo 1 > sys/class/leds/red/brightness //打开 LED0
echo 0 > sys/class/leds/red/brightness //关闭 LED0
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是通过C语言代码使用 Cortex-M3 内核开发板点亮 LED 的步骤: 1. 确认你的开发板支持 GPIO 控制,并且你已经了解了开发板的硬件资源分配情况,确认可以将 LED 连接到开发板的 GPIO 引脚上。 2. 打开开发板的开发环境,创建一个新的工程。 3. 在工程中添加头文件 `stm32f10x.h`,该头文件包含了 STM32F10x 系列芯片的寄存器定义和相关函数定义。 4. 在代码中初始化 GPIO 引脚,设置为输出模式,并将 LED 引脚初始化为低电平。代码如下: ```c #include "stm32f10x.h" int main(void) { // 使能GPIOB时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // 初始化GPIOB的Pin.0为输出模式,初始电平为低电平 GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // LED连接的GPIO引脚为PB0 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出模式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // GPIO最大输出频率为50MHz GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_ResetBits(GPIOB, GPIO_Pin_0); // 初始电平为低电平 while(1) { // 点亮LED,将GPIO电平置为高电平 GPIO_SetBits(GPIOB, GPIO_Pin_0); // 延时一段时间 for(int i = 0; i < 1000000; i++); // 关闭LED,将GPIO电平置为低电平 GPIO_ResetBits(GPIOB, GPIO_Pin_0); // 延时一段时间 for(int i = 0; i < 1000000; i++); } } ``` 5. 编译并下载代码到开发板上,LED 就会开始闪烁。 注意事项: - 不同开发板的具体代码可能会有所不同,需要根据实际情况进行调整。 - 在使用 GPIO 控制 LED 时,需要注意电流大小,以免对开发板和 LED 造成损坏。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值