本章内容对应IMX6ULL开发板视频讲解链接(在线观看):

我们学 linux 、单片机的第一个操作硬件就是点亮第一个 led 灯。
在单片机上我们点亮一个 led 灯非常的简单,直接操作引脚就可以了。虽然 linux 听着比较高大上,但是点亮一个 led 灯是非常容易的。我们甚至不用去写驱动,直接命令操作就可以了,因为 linux 系统本身有好多成熟的驱动框架,使用这些框架的好处就是当我们更换平台的时候,比如换到 RK3399 平台,我们应用程序可以不用做任何改变,就可以直接在新的平台上运行。但是如果你在单片机上写一个点灯程序,比如说我在 32 上写了一个点灯我现在想把它移植到 51 上那这个移植过程是比较麻烦的,如果说用寄存器写的就要改寄存器,如果说用库函数写的移植到 51 上也要写对应的库函数,这就比较麻烦了,但是在 linux 上直接使用命令就可以了。对于 led 设备,linux 提供的是 led 子系统框架。
31.1 前置知识
1. 怎么控制 led 灯的亮灭?
以 IMX6ULL 终结者开发板为例,原理图如下图所示,我们给管脚 GPIO_3 低电平,电路导通,led2 亮,给 GPIO_3 高电平,电路不导通,led2 灭。R80 为限流电阻,保护 led 灯不被烧毁。

2. echo > 重定向命令
举例:
echo hello > test.txt
将字符串输出重定向,当前目录没有 test.txt,则创建 text.txt ,并将字符串输出到 test.txt 文件中。和直接使用 vi 编辑器打开 test.txt 然后输入 hello 的效果是一样的。如下图所示。

31.2 led 子系统的使用
我们在超级终端上使用命令 “cd /sys/class/leds/”即可进到被 led 子系统所展现的设备下。在这个目录下面都是以 led 设备命令的设备。其中 sys-led 就是我们要操作的用户灯,对应底板的 led2。如下图所示。

然 后 我 们 进 到 sys-led 这 个 具 体 的 设 备 下 面 。 如 图 31.2.2 所 示 , 在 这 个 图 中 , 我 们 需 要关心”brightness”, ”trigger”这几个参数,分别对应亮度,触发方式。

开发板上的 led2 默认的触发方式是 heartbeat,我们可以使用 cat 命令来查看,用”[]”圈出来的则为当前的触发方式。如下图所示。

我们使用命令 “echo none > trigger” 可以把触发方式设置成没有触发,led2 也就熄灭了。如下图所示。

点亮 led2 我们只需要设置 brightness 参数就可以了,设置为 1,则打开 led2 ,设置为 0,则关闭 led2。
打开 led2:
echo 1 > /sys/class/leds/sys-led/brightness
关闭 led2:
echo 0 > /sys/class/leds/sys-led/brightness

使用 led 子系统我们可以很方便的控制 led 灯,不管是什么平台,包括 3399 、4418/6818 、i.MX6ull都可以使用这个方法,这个方法是通用的。在单片机上是使用程序来控制的,我们在这里使用命令,其实我们也可以使用程序来控制,因为我们有的时候是在程序上点灯,而不是需要我们去手动输入命令。

31.3 使用 c 语言调用 shell 命令控制 led 灯
用命令来控制 led 灯没有感觉,那可以使用程序来控制,让程序帮我们输入这些命令,我们可以使用system 函数来完成。
头文件:#include
格式:system(要执行的命令)

代码实现:
#include
void main(void)
{
system(“echo none > /sys/class/leds/sys-led/trigger”);//设置触发方式
while(1)
{
system(“echo 1 > /sys/class/leds/sys-led/brightness”);//点亮 led2
sleep(5);
system(“echo 0 > /sys/class/leds/sys-led/brightness”);//关闭 led2
sleep(5);
}
}
我们来写一下这个程序,我们进到 samba 指定的这个路径下,我们在这个路径下创建 c 程序,名为 led.c,然后用 source insight 打开这个文件,因为这个程序非常简单,我直接复制程序,我们在进入 while 循环之前先设置了下 led 触发方式,把它设置成没有触发,这个就有点类似于 32 单片机上对管脚的初始化,也就是我们先初始化一下管脚,我们再进行管脚的操作,然后我们进入到 while 循环,我们不断的给 led2 进行置 0 置 1 ,我们把这个延迟改小一点,改成 1 秒,然后保存,如下图所示。

打开 ubuntu,进到 samba 指定的这个路径下,我们就可以在 samba 这个路径看到 .c 文件了,如下图所示。

然后我们把 .c 文件从 samba 指定的目录把它考到 ubuntu 的目录下,然后我们进到这个目录,如下图所示。

我们直接使用交叉编译器编译下 led.c ,因为是在开发板上运行的,所以就不能使用 gcc 了。我们使用静态编译,这样就得到了 led 这个可执行的程序。如下图所示。

把这个可执行文件拷贝到开发板,我们可以使用 U 盘或者 TF 卡也可以使用 NFS ,这个依据自己的习惯来就可以了,我这里使用 nfs 。进到开发板的控制终端,然后给开发板连下网,我先配置下无线密码,然后联网,因为我这里要使用 nfs, 然后我们来挂载下这个目录,然后我们把 led 这个可执行文件拷贝到 nfs共享的目录,这样就可以在开发板上看到 led 这个可执行文件了,我这里给他拷贝到开发板上,进到 opt 这个目录下,如下图所示。

ls 看一下,如下图所示。

我们来运行下这个可执行文件,如下图所示。

可以看到开发板现在 led2 这个灯的状态,来执行下这个可执行文件,这个灯就是一闪一闪的了,如下图所示。

使用 ctrl+c 打断这个程序的运行,这个灯现在已经不亮了,如下图所示。

然后我们在运行下,这样我们就使用程序成功控制了一个灯并实现了一个闪灯的程序,其实这个程序里面的方法和我们直接使用命令的方法是一样的,只不过我们是使用 c 语言来调用我们的 shell 命令来实现,就不用再人为的输入了。
在 led 设备的这个目录下,还有一个叫 beep 的蜂鸣器设备,蜂鸣器我们也可以使用这个方法来打开和关闭蜂鸣器,这就作为一个作业大家自己来试下,方法和点亮一个 led 灯方法是一样的,我们可以先用命令来试下,然后再用 system 调用 shell 命令用程序实现。

更多内容:哔哩哔哩搜索北京迅为即可看更多实战内容。

实验分享丨迅为IMX6ULL开发板点亮第一个led灯相关推荐

  1. 开发板实现645协议C语言,迅为-imx6ull开发板之C语言实现LED例程

    第九章我们使用汇编编写了 LED 灯的实验,在实际开发过程中大部分还是使用 C 语言,汇编只是用来完成 C 语言环境的初始化,本章我么就来实现用汇编完成 C 语言环境的初始化,然后用 C 语言实现 L ...

  2. [教程]北京迅为iMX6ULL开发板上配置 AP 热点

    本文转自迅为iMX6ULL开发板使用手册第九十九章,使用的资料已经放到了开发板网盘资料中,路径为:11_Linux 系统开发进阶\99_章节使用资料. 关注公众号"迅为电子" , ...

  3. 迅为iMX6ULL开发板-创建 ap 热点

    本文转自迅为iMX6ULL开发板使用手册第九十九章,使用的资料已经放到了开发板网盘资料中,路径为:11_Linux 系统开发进阶\99_章节使用资料. 关注公众号"迅为电子" ,  ...

  4. 北京迅为IMX6ULL开发板 DHT11网络编程实战练习

    转自:[北京迅为i.mx6ull终结者开发板使用手册]第六十三章 QT 实战项目 硬件平台:IMX6ULL开发板   63.1 DHT11&网络编程实战练习 本项目为阶段性练习,内容简洁实用, ...

  5. 迅为IMX6ULL开发板NFS服务器的搭建

    基于迅为IMX6ULL开发板 (1)在 ubuntu 安装 nfs 服务:在管理员的身份下运行 apt-get install nfs-kernel-server (2) 在/home 下创建一个名为 ...

  6. 【小月电子】安路国产FPGA开发板系统学习教程-LESSON2 LED灯闪烁

    LED灯闪烁例程讲解 若要观看该博客配套的视频教程,可点击此链接 根据多年工作经验,总结出的FPGA的设计流程,概括起来总共有以上12步,其中根据项目难易度可省去其中一些步骤.比如非常简单的项目,我们 ...

  7. Arduino嵌入式开发-如何点亮一盏LED灯

    随着人工智能的不断发展,各种各样的传感器层出不穷,传感器的存在和发展,让物体有了触觉.味觉和嗅觉等感官,让物体慢慢变得活了起来.而Arduino是一款便捷灵活.方便上手的开源电子原型平台.包含硬件(各 ...

  8. 迅为linux下串口,迅为IMX6ULL开发板Linux RS232/485驱动实验(上)

    在 arm 设备中串口是很常用的一个外设,不仅可以用来打印信息,还可以用于外接设备和其他传感器通信.根据不同的电平,串口分为 TTL 和 RS232,但是在Linux内核中的驱动程序是一样的,在串口上 ...

  9. 迅为IMX6ULL开发板Linux学习教程

    1800+页使用手册(持续更新)+入门视频教程+实战视频教程 关注VX公众号:迅为电子 ,  回复 :终结者,免费获取产品资料  让教程更细致,终结入门难! 所有教程由迅为原创,是迅为工作多年的工程师 ...

  10. 搭建Web服务器-迅为IMX6ULL开发板

    操作环境: 编译器:arm-2014.05编译器 文件系统:使用的busybox移植Qt5.7的文件系统. 硬件平台:IMX6ULL 本章用iTOP-IMX6ULL开发板搭建一个web服务器.需要用到 ...

最新文章

  1. Linux那些事儿 之 戏说USB(5)我是谁
  2. 生物识别最新进展:动态密码语音无监督身份认证系统通过科技成果鉴定
  3. jquery标签选择器应用示例
  4. idea怎么打包有依赖关系的项目_项目需求不明确,项目各模块逻辑关系不清晰,怎么排计划?...
  5. 我安装Microsoft SQLServer 2000时出现问题
  6. 引导页设计没有灵感,看这里!
  7. 徒手撸框架--高并发环境下的请求合并
  8. java变量和常量_java变量和常量的区别是什么
  9. version `GLIBCXX_3.4.22‘ not found
  10. C++ set find 找不到本来存在的元素
  11. 缺陷分析之缺陷引入与移除矩阵
  12. ubuntu18.04截图快捷键
  13. 云刷工具q币android版,交流电app下载2021-交流电交友手机版v3.2.4最新版-游吧乐下载...
  14. 安卓项目迁移androidX(为何需要迁移,迁移遇到的问题及解决),必须迁移,早动早省事
  15. 【office相关】excel 中使用 switch函数
  16. 华为、中兴短信网关最新3.0协议封装代码说明
  17. 泌阳县鸿蒙机器人编程,鸿蒙教育机器人编程课程开始招生了!!!
  18. Python的集合框架
  19. 微信小程序转头条/抖音小程序的方法
  20. 【红包雨】活动红包雨实现逻辑(ionic+springboot)

热门文章

  1. 2021年全球电力线通信(PLC)系统收入大约7385.8百万美元,预计2028年达到14530百万美元,2022至2028期间,年复合增长率CAGR为11.0%
  2. 数据结构与算法必知基础知识
  3. 好用的飞书版固定资产管理系统
  4. 2022考研计算机-软件工程教程
  5. 爱立信、EMC笔试面试
  6. 【高频电子线路】[模型]LC并联谐振回路(第2章 谐振功率放大器)
  7. 【lstm做文本分类保存】
  8. jmeter分布式部署
  9. 阿里巴巴菜鸟网络面试经历
  10. swftool pdf2swf使用