fangkaixin 发表于 2023-12-24 22:00

【STM32MP135F-DK】硬件资源测试,点亮一个LED

<h2>LED资源概览</h2>

<div>在STM32MP135F-DK Discovery套件上,GPIO分配如下:</div>

<ul>
        <li>绿色&nbsp;LED&nbsp;位于&nbsp;IO&nbsp;扩展器引脚 GPB6 上</li>
        <li>红色&nbsp;LED&nbsp;和 USER2 按钮位于引脚 PA13 上</li>
        <li>蓝色&nbsp;LED&nbsp;和 USER1 按钮位于引脚 PA14 上</li>
        <li>橙色&nbsp;LED&nbsp;位于&nbsp;IO&nbsp;扩展器引脚 GPB7 上</li>
</ul>

<div>这一篇,我们将通过修改Linux源码来点亮一个LED。</div>

<h2>准备工作</h2>

<div>首先,我们阅读一下Linux内核源码的文档,阅读顺序Documentation/driver-api/gpio/using-gpio.rst --&gt; Documentation/driver-api/gpio/drivers-on-gpio.rst</div>

<div>通过扫览这两个文档,我们可以知道:</div>

<div>Linux内核的存在是为了向用户抽象和呈现硬件,我们需要通过内核硬件驱动程序去处理GPIO,Linux GPIO线也有用户空间ABI,也就是可以在文件系统中找到对这些硬件的控制接口,文档告诉我们源码中已经存在一些通用示例,如:</div>

<ul>
        <li><em><strong>leds-gpio:drivers</strong></em><em><strong>/</strong></em><em><strong>leds</strong></em><em><strong>/</strong></em><em><strong>leds-gpio.c</strong></em> 将gpio抽象为led设备,并在用户空间提供LED sysfs接口</li>
        <li><em><strong>ledtrig-gpio:drivers</strong></em><em><strong>/</strong></em><em><strong>leds</strong></em><em><strong>/trigger/</strong></em><em><strong>ledtrig-gpio.c</strong></em> 提供一个LED触发器</li>
        <li><em><strong>gpio-keys:drivers</strong></em><em><strong>/input/keyboard/</strong></em><em><strong>gpio_keys.c</strong></em> 可以根据按键产生中断,还支持消抖</li>
</ul>

<div>完成了初步了解,leds-gpio.c它会连接设备树中的硬件管脚,并且抽象出一个led字符驱动设备,提供到用户空间.应该就是我们需要的led通用驱动程序。我们找到这个文件的Makefile,可以看到,驱动文件之前已经编译到内核中了,</div>

<div></div>

<div>那么我们再回到led-gpio.c,可以看到,从设备树中匹配的是&rdquo;gpio-leds&rdquo;,对应的GPIO是PA14,默认作为心跳指示灯进行翻转亮灭</div>

<div></div>

<div></div>

<div>我们再去用户空间的sysfs交叉验证下,发现确实存在这个设备</div>

<div></div>

<h2>编写代码验证</h2>

<div>了解LED当前的大致框架,可以合理推测,目前led通用驱动程序已加载到内核中,设备树中目前只应用了蓝色的PA14作为心跳指示灯,那么我们只需要在设备树中添加红色PA13的硬件描述,那么通用驱动程序就会同时加载PA13作为特定功能的LED。</div>

<div>添加如下代码测试:</div>

<div></div>

<div>编译设备树文件</div>

<div>make ARCH=arm dtbs LOADADDR=0xC2000040</div>

<div></div>

<div>推送至开发板</div>

<div></div>

<div>在开发板中sync后reboot设备重新启动后,可以看到新增的led设备</div>

<div></div>

<div>用命令行打开红色led灯</div>

<div></div>

<div></div>

<div>用命令行关闭红色led灯</div>

<div></div>

<div></div>

<div>&nbsp;</div>

<div>除了简单的亮灭,心跳,还有一些其他有趣的LED功能,在COMMON.h中可以找到定义,感兴趣的同学可以试试</div>

<div> &nbsp;</div>
页: [1]
查看完整版本: 【STM32MP135F-DK】硬件资源测试,点亮一个LED