0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎样用Raspberry Pi 3使LED闪烁

454398 来源:网络整理 作者:佚名 2019-11-05 09:17 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

步骤1:设置/填充文件

好吧。..第一步是获取硬件。您可以单独购买零件,也可以使用工具包附带足够的零件。 LINK

此工具包随附了设置raspberry pi 3以及更多内容所需的一切!该套件中唯一没有包括的是一张额外的迷你SD卡。等待!暂时不要再购买。如果您不打算使用卡上预装的linux安装程序,则只需复制随附的mini sd卡的内容以备后用,然后重新格式化该卡即可(稍后再介绍)。重要提示:请确保将文件保存在随附的卡上,以备日后使用!

接下来是时候安装软件了。本教程将不包括有关如何安装软件的详细说明。在线上有许多资源和教程,它们是如何安装这些软件的:

WINDOWS用户:

下载并安装gcc。

接下来,下载并安装GNU ARM嵌入式工具链。

LINUX/MAC

Linux发行版预装了gcc

下载并安装GNU ARM嵌入式工具链。

好的,如果一切顺利,那么您应该可以打开终端机(linux/mac)或cmd行(windows),然后尝试输入

arm-none -eabi-gcc

输出应类似于第一张图片。这只是为了验证它是否已正确安装。

现在,前提条件已不复存在,现在该开始学习有趣的东西了。

步骤2:电路

电路时间!电路很简单。我们将在pi上连接一个led到GPIO 21(引脚40)(见图2和3)。电阻也串联连接,以防止损坏LED。电阻将连接到面包板上的负极,负极将连接到pi上的GND(引脚39)。连接LED时,请确保将短端连接到负极。看到最后一张图片

步骤3:BOOTABLE Mini SD

有三个步骤可让您的pi 3识别空白的迷你SD卡。我们需要找到并复制bootcode.bin,start.elf和fixup.dat。如果您购买了canakit或为linux发行的pi 3制作了可启动的sd卡,则可以在随附的mini sd卡上获得这些文件。无论哪种方式,这些文件都是必需的,以允许pi将sd卡识别为可引导设备。接下来,将mini sd格式化为fat32(大多数mini sd卡都格式化为fat32。我从sandisk使用了便宜的mini sd卡),将bootcode.bin,start.elf,fixup.dat移到sd卡上。完成了!好了一次,按照图片的顺序,步骤是:

找到bootcode.bin,start.elf,fixup.dat。

确保您的SD卡格式化为fat32。

将bootcode.bin,start.elf和fixup.dat移至格式化的sd卡上。

这是我如何解决这个问题,请链接。

第4步:检查Mini SD

好的,我们有一个可引导的迷你SD卡,希望您此时有一个pi 3。因此,现在我们应该对其进行测试,以确保pi 3能够识别出迷你sd卡是可启动的。

在pi上,靠近迷你USB端口的地方有两个小led。一个是红色的。这是电源指示灯。当pi接通电源时,该指示灯应亮起。因此,如果您现在没有任何迷你sd卡插入pi,它就会亮起红色。好的,现在拔下pi的插头,然后插入上一步中创建的可启动迷你sd卡,然后将pi插入。您是否看到另一盏灯?在红色旁边,应该有一个绿色指示灯,指示它正在读取SD卡。该指示灯称为ACT指示灯。插入可行的sd卡时,它会亮起。访问迷你SD卡时,它将闪烁。

好吧,因此,在插入可引导的迷你sd卡并将pi插入后,应该发生了两件事:

红色指示灯应亮起,指示受电

绿色指示灯应亮起,表明它已插入迷你SD卡中。

如果出现问题,请尝试重复上述步骤或单击下面的链接以获取更多信息。

链接是一个很好的参考。

步骤5:CODE1

该项目是用ARM汇编语言编写的。本教程假定您对ARM汇编有基本的了解,但是您应该了解以下几点:

.equ:为符号分配一个值,即abc .equ 5 abc现在代表五

ldr:从内存中加载

str:写入内存

cmp:通过执行减法比较两个值。设置标志。

b:分支到标签

添加:执行算术

如果您对Arm组装没有任何经验,请观看此文章视频。它将使您对Arm汇编语言有很好的了解。

好吧,现在我们有一个连接到树莓派3的电路,并且有一个pi可以识别的sd卡,所以我们的下一个任务是弄清楚如何通过加载树莓派来与电路交互带有可执行程序的pi。通常,我们需要做的是告诉pi从GPIO 21(连接到红线的引脚)输出电压。然后,我们需要一种方法来切换led使其闪烁。为此,我们需要更多信息。到目前为止,我们还不知道如何告诉GPIO 21输出,这就是为什么我们必须阅读数据手册的原因。大多数微控制器都有数据表,这些数据表准确指定了所有工作方式。不幸的是,pi 3没有官方文档!但是,有一个非正式的数据表。这是指向它的两个链接:

https://github.com/raspberrypi/documentation/files 。..

https://web.stanford.edu/class/cs140e/docs/BCM2837 。..

在这一点上,您应该花几分钟的时间才能进入下一步浏览数据表,看看您能找到什么信息。

步骤6:CODE2:Turn_Led_ON

raspberry pi 3 53寄存器用于控制输出/输入引脚(外围设备)。引脚分组在一起,每组分配给一个寄存器。对于GPIO,我们需要能够访问SELECT寄存器,SET寄存器和CLEAR寄存器。要访问这些寄存器,我们需要这些寄存器的物理地址。在阅读数据手册时,您只需要记下地址的偏移量(低字节)并将其添加到基址即可。您必须执行此操作,因为数据表列出了Linux虚拟地址,这些地址基本上是操作系统分配的值。我们没有使用操作系统,因此我们需要使用物理地址直接访问这些寄存器。为此,您需要以下信息:

外围设备的基地址:0x3f200000。 pdf(第6页)表示基本地址为0x3f000000,但是该地址不起作用。使用0x3f200000

FSEL2(SELECT)的偏移量而不是寄存器的完整地址。 pdf在0x7E20008处列出了FSEL2,但该地址是linux虚拟地址。偏移量将相同,因此我们要注意。 0x08

GPSET0(SET)的偏移量: 0x1c

O GPCLR0(CLEAR)的偏移量:0x28

因此,您可能会注意到数据表中列出了4个SELECT寄存器,2个SET寄存器和2个CLEAR寄存器,那么为什么选择我所做的那些呢?这是因为我们要使用GPIO 21,而FSEL2控制GPIO 20-29,SET0和CLR0控制GPIO 0-31。 FSEL寄存器为每个GPIO引脚分配了三个位。由于我们使用的是FSEL2,这意味着位0-2控制GPIO 20,位3-5控制GPIO 21,依此类推。 Set和CLR寄存器为每个引脚分配一个位。例如,SET0和CLR0中的位0控制GPIO1。要控制GPIO 21,您需要在SET0和CLR0中设置位21。

好的,所以我们已经讨论了如何访问这些寄存器,但是该怎么做呢?

FSEL2寄存器将用于将GPIO 21设置为输出。要设置引脚输出,您需要将三个位的lo顺序位设置为1。因此,如果位3-5控制GPIO 21,则意味着我们需要将第一个位(位3)设置为1。这将告诉pi我们想要使用GPIO 21作为输出。因此,如果要查看GPIO 21的3位,将其设置为b001后,它们应该看起来像这样。

GPSET0告诉pi开启引脚(输出电压)。为此,我们只需切换与所需GPIO引脚对应的位即可。在我们的情况下,位21。

GPCLR0告诉pi关闭该引脚(无电压)。要关闭该引脚,请将此位设置为相应的GPIO引脚。在我们的示例中,第21位

在出现闪烁的led之前,首先让我们编写一个简单的程序,该程序只需打开led。

首先,我们需要在源代码的顶部添加两个指令。

.section .init告诉pi将代码放置在哪里

.global _start

接下来,我们需要布置将要使用的所有地址。使用.equ为值分配可读符号。

.equ GPFSEL2,0x08

.equ GPSET0,0x1c

.equ GPCLR0,0x28

.equ BASE,0x3f200000

现在,我们将创建掩码以设置需要设置的位。

.equ SET_BIT3,0x08这将设置第三个位0000_1000

.equ SET_BIT21,0x200000

然后我们需要添加_start标签

_start:

将基地址加载到寄存器

ldr r0,= BASE

现在我们需要设置GPFSEL2的bit3

ldr r1,SET_BIT3

str r1,[r0,#GPFSEL2]该指令表示将位0x08写回GPFSEL2

最后,我们需要通过将GPSET0寄存器中的位21置1来设置GPIO 21

ldr r1,= SET_BIT21

str r1,[r0,#GPSET0]

最终产品应类似于所示的代码。

下一步是编译代码并创建一个.img pi可以运行的文件。

下载附件makefile,kernel.ld,以及是否需要turn_led_on.s源代码。

将所有文件放在同一文件夹中。

如果使用自己的源代码,请编辑makefile并将代码= turn_led_on.s替换为code = .s

保存makefile。

使用终端(linux)或cmd窗口(windows)导航至包含以下内容的文件夹文件,然后键入make并按Enter键。

make文件应生成一个名为kernel.img的文件。

将kernel.img复制到您的迷你SD卡中。卡的内容应如图所示(图3):bootcode.bin,start.elf,fixup.dat和kernel.img。

弹出迷你sd卡并将其插入pi

将pi插入电源中

LED应该亮起!!

重要提示:显然可指导人员遇到了问题makefile没有扩展名,因此我将其扩展名为.txt。

第7步:CODE3:BLINKY_LED

最后,是时候让LED闪烁了!

与之前的步骤相比,这相对简单。我们需要做的就是编写一个无限循环,在该循环内打开LED,然后打开DELAY,然后关闭LED延迟并循环。

打开turn_led_on.s,然后将其另存为blinky_led .s

在.equ部分中添加.equ COUNTER,0xf0000。

在循环之前的下一个地方添加ldr r2,= COUNTER

在文件末尾添加新标签Inifinite_loop:

在下一行添加b Inifinite_loop。这意味着代码将无限期地跳转回Inifinite_loop标签。

在循环中打开led:str r1,[r0,#GPSET0],然后将0放入r10:mov r10,#0

添加标签延迟:

在下一行上添加:添加r10,r10,#1,这将使r10在下一行上增加1

在下一行上添加:cmp r10 ,r2这会将r10与COUNTER的值进行比较

延迟,这意味着程序将陷入循环,直到r10递增到COUNTER为止,这将延迟程序。

现在我们需要关闭LED:str r1,[r0,#GPCLR0]这会将CLEAR寄存器中的位21置1。关闭LED。

接下来从上方复制延迟循环,并将delay更改为delay2

打开makefile并将第4行的turn_on_led.s更改为blinky_led.s或您的文件名选择。

执行与上一步相同的操作。

用新的kernel.img

将SD卡插入pi并替换新卡上的kernel.img。通电!

LED应该以大约每秒闪烁1次的速度闪烁!

略有重要的注意事项:显然,指示人员有问题makefile没有扩展名,因此我将其扩展名为.txt。下载扩展程序后,请删除该扩展程序,以使其正常运行。

步骤8:完成

就是这样。希望您现在指示灯闪烁!

责任编辑:wv

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    243

    文章

    24434

    浏览量

    687376
  • 树莓派
    +关注

    关注

    122

    文章

    2069

    浏览量

    109686
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Banana Pi BPI-CM6 – 一款与 Raspberry Pi CM4/CM5 载板兼容的 SpacemiT K1 RISC-V 系统模块

    Banana Pi BPI-CM6 系统模块 (SoM) 采用 SpacemiT K1 八核 RISC-V 处理器,并且与大多数 Raspberry Pi CM4 或 CM5 模块的载板兼容。 它
    发表于 11-28 16:59

    Banana Pi BPI-CM6 – 一款与 Raspberry Pi CM4/CM5 载板兼容的 SpacemiT K1 RISC-V 系统模块

    Banana Pi BPI-CM6 系统模块 (SoM) 采用 SpacemiT K1 8 核 RISC-V 处理器,并且与大多数为 Raspberry Pi CM4 或 CM5 设计的载板兼容
    的头像 发表于 11-28 16:57 1878次阅读
    Banana <b class='flag-5'>Pi</b> BPI-CM6 – 一款与 <b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> CM4/CM5 载板兼容的 SpacemiT K1 RISC-V 系统模块

    Banana Pi BPI-R4 Lite:新型单板计算机比 Raspberry Pi 5 更具优势

    Raspberry Pi 5(亚马逊售价 66 美元起)的替代品。 然而,它的侧重点略有不同,尤其适合网络应用。例如,它可以作为 OpenWrt 路由器的基础。Banana Pi 最新的 SBC
    的头像 发表于 08-26 16:46 1018次阅读
    Banana <b class='flag-5'>Pi</b> BPI-R4 Lite:新型单板计算机比 <b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> 5 更具优势

    贸泽开售Raspberry Pi用于嵌入式和IIoT应用的RP2350微控制器

    2025 年 5 月 23 日 – 提供超丰富半导体和电子元器件™的业界知名新品引入 (NPI) 代理商贸泽电子 (Mouser Electronics) 即日起开售Raspberry Pi的新款
    发表于 05-27 14:50 1371次阅读

    如何在Raspberry Pi OS上安装SDK?

    Raspberry Pi OS 上安装 SDK
    发表于 04-30 06:45

    贸泽开售适用于AI和嵌入式应用的 全新Raspberry Pi Compute Module 5

    2025 年 3 月 20 日 – 专注于推动行业创新的知名新品引入 (NPI) 代理商™贸泽电子 (Mouser Electronics) 即日起供应Raspberry Pi的全新Compute
    发表于 03-24 15:09 426次阅读

    Raspberry Pi上使用IR v11及OpenVINO™ 2021.3后不兼容怎么办?

    PYTHONPATH=\"$PWD\" && python export.py --weights--img 512 --include openvino 转换后的 IR v11 模型与 Raspberry Pi 上的 OpenVINO™ 2021.3
    发表于 03-06 07:14

    Raspberry Pi上从源代码构建OpenVINO™ ARM插件失败了,怎么解决?

    Raspberry Pi* 上从源代码构建OpenVINO™ ARM 插件。 cmake -DCMAKE_BUILD_TYPE=Release -DOPENVINO_EXTRA_MODULES
    发表于 03-06 06:19

    OpenVINO™是否与TensorFlow集成支持Raspberry Pi

    无法确定OpenVINO™是否与 TensorFlow* 集成支持 Raspberry Pi
    发表于 03-05 08:26

    Raspberry Pi 4上为OpenVINO™ 2021.4.2安装DL工作台,加载人脸检测-0200模型时遇到错误怎么解决?

    Raspberry Pi* 4 上为 OpenVINO™ 2021.4.2 安装的 DL 工作台 加载人脸检测-0200 模型时遇到错误: Unknown model format
    发表于 03-05 07:57

    无法在Raspberry Pi 4中通过PyPI OpenVINO™安装2022年运行时软件包,为什么?

    无法在 Raspberry* Pi 4 中通过 PyPI* 安装OpenVINO™ 2022 运行时软件包。
    发表于 03-05 07:31

    安装OpenVINO™适用于Raspberry Pi64位操作系统的工具套件2022.3.1,配置英特尔®NCS2时出错怎么解决?

    安装OpenVINO™适用于 Raspberry Pi* 64 位操作系统的工具套件 2022.3.1。 配置英特尔® NCS2时出错: CMake Error at CMakeLists.txt
    发表于 03-05 07:27

    基于Raspberry Pi 5的情感机器人设计

    Raspberry Pi 5相较于上一代搭载了更强的处理器和硬件性能,为情感机器人的开发提供了前所未有的可能性。其支持多任务处理和实时计算,为语音交互和情感判断提供了坚实的基础。此外配合高性能的摄像头模块和传感器,机器人能够捕捉环境信息,真正做到 “知人知面” 。
    的头像 发表于 02-26 14:28 1566次阅读
    基于<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> 5的情感机器人设计

    贸泽电子开售Raspberry Pi Hailo 8L AI套件

    近日,全球电子元器件和工业自动化产品的领先授权代理商贸泽电子(Mouser Electronics)正式宣布开售Raspberry Pi的Hailo 8L AI套件。这一创新产品的推出,标志着贸泽
    的头像 发表于 01-15 14:25 801次阅读

    Raspberry Pi树莓派新手指南

    电子发烧友网站提供《Raspberry Pi树莓派新手指南.pdf》资料免费下载
    发表于 12-23 17:05 4次下载