扩展板 LED 灯驱动移植

该文详细介绍了如何使用STM32MP157微处理器通过GPIO驱动LED灯。首先解释了LED灯的工作原理,然后阐述了内核配置、设备树修改的步骤,以及如何通过编写内核模块和更新设备树来控制LED的状态。最后,通过示例展示了如何在Linux命令行界面中动态改变LED的亮度以验证设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.实验原理

打开扩展板原理图对照扩展板可以看到扩展板有四个 LED 灯,其中 LED4 为底板电压指示灯,LD1 LD2 LD3 为可控 LED ,原理如下:
有图可知,当 LED1 为高电平是三极管 Q3 导通,这时发光二极管 LD1 会被点亮,同理 当 LED2 LED3 为高电平时 LD2 LD3 会被点亮。
查看原理图可知 LED1 LED2 LED3 分别对应 STM32MP157 芯片的 PE10 PF10 PE8 如下图:

 根据网络编号可最终追至 CPU 对应管脚,由于上图已经可以明确 LED 灯对应管脚。

2.实验步骤

1) 导入交叉编译工具链

linux@ubuntu:$ source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi

2) 内核配置

内核中对于 gpio 驱动 LED 提供了标准的驱动,只要在内核中配置对应选项即可,驱动路径为:
drivers/leds/leds-gpio.c

由于内核中已经配置 GPIO LED 驱动,这里列出配置选项供参考。

linux@ubuntu:$ make menuconfig
Device Drivers --->
    [*] LED Support --->
        <*> LED Class Support
        <*> LED Support for GPIO connected LEDs

3) 修改设备树

参考 linux 内核文档:
Documentation/devicetree/bindings/leds/leds-gpio.txt
修改设备树文件:
arch/arm/boot/dts/stm32mp157a-fsmp1a-extended.dts
在根节点下添加 led 相关内容,红色字体部分为添加内容:
/ {
    model = "HQYJ STM32MP157 FSMP1A EXTENDED Discovery Board";
    compatible = "st,stm32mp157", "st,stm32mp157a-fsmp1a-extended";
    led {
        compatible = "gpio-leds";
        led1 {
            label = "led1";
            gpios = <&gpioe 10 GPIO_ACTIVE_HIGH>;
            default-state = "off";
        };
        led2 {
            label = "led2";
            gpios = <&gpiof 10 GPIO_ACTIVE_HIGH>;
            default-state = "off";
        };
        led3 {
            label = "led3";
            gpios = <&gpioe 8 GPIO_ACTIVE_HIGH>;
            default-state = "off";
        };
    };
};

4) 重新编译内核和设备树文件

make -j4 uImage dtbs LOADADDR=0xC2000040

5) 更新系统内核和设备树

6) 测试

系统启动后可以查看目录 /sys/class/leds
root@fsmp1a:# ls /sys/class/leds/
led1 led2 led3
led1 led2 led3 三个目录分别和设备树种三个节点的名称一致,在这几个目录下内容
如下
root@fsmp1a:~# ls /sys/class/leds/led1/
brightness device max_brightness power subsystem trigger uevent
其中向 brightness 文件写入 1 0 即可实现 LED 灯的控制
root@fsmp1a:~# echo 0 > /sys/class/leds/led1/brightness
root@fsmp1a:~# echo 0 > /sys/class/leds/led2/brightness
root@fsmp1a:~# echo 0 > /sys/class/leds/led3/brightness

root@fsmp1a:~# echo 1 > /sys/class/leds/led3/brightness
root@fsmp1a:~# echo 1 > /sys/class/leds/led2/brightness
root@fsmp1a:~# echo 1 > /sys/class/leds/led1/brightness
观察 LED 灯状态变化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小徐的记事本

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值