步驟1:設(shè)置/填充文件
好吧。..第一步是獲取硬件。您可以單獨(dú)購(gòu)買零件,也可以使用工具包附帶足夠的零件。 LINK
此工具包隨附了設(shè)置raspberry pi 3以及更多內(nèi)容所需的一切!該套件中唯一沒(méi)有包括的是一張額外的迷你SD卡。等待!暫時(shí)不要再購(gòu)買。如果您不打算使用卡上預(yù)裝的linux安裝程序,則只需復(fù)制隨附的mini sd卡的內(nèi)容以備后用,然后重新格式化該卡即可(稍后再介紹)。重要提示:請(qǐng)確保將文件保存在隨附的卡上,以備日后使用!
接下來(lái)是時(shí)候安裝軟件了。本教程將不包括有關(guān)如何安裝軟件的詳細(xì)說(shuō)明。在線上有許多資源和教程,它們是如何安裝這些軟件的:
WINDOWS用戶:
下載并安裝gcc。
LINUX/MAC
Linux發(fā)行版預(yù)裝了gcc
下載并安裝GNU ARM嵌入式工具鏈。
好的,如果一切順利,那么您應(yīng)該可以打開(kāi)終端機(jī)(linux/mac)或cmd行(windows),然后嘗試輸入
arm-none -eabi-gcc
輸出應(yīng)類似于第一張圖片。這只是為了驗(yàn)證它是否已正確安裝。
現(xiàn)在,前提條件已不復(fù)存在,現(xiàn)在該開(kāi)始學(xué)習(xí)有趣的東西了。
步驟2:電路
電路時(shí)間!電路很簡(jiǎn)單。我們將在pi上連接一個(gè)led到GPIO 21(引腳40)(見(jiàn)圖2和3)。電阻也串聯(lián)連接,以防止損壞LED。電阻將連接到面包板上的負(fù)極,負(fù)極將連接到pi上的GND(引腳39)。連接LED時(shí),請(qǐng)確保將短端連接到負(fù)極??吹阶詈笠粡垐D片
步驟3:BOOTABLE Mini SD
有三個(gè)步驟可讓您的pi 3識(shí)別空白的迷你SD卡。我們需要找到并復(fù)制bootcode.bin,start.elf和fixup.dat。如果您購(gòu)買了canakit或?yàn)閘inux發(fā)行的pi 3制作了可啟動(dòng)的sd卡,則可以在隨附的mini sd卡上獲得這些文件。無(wú)論哪種方式,這些文件都是必需的,以允許pi將sd卡識(shí)別為可引導(dǎo)設(shè)備。接下來(lái),將mini sd格式化為fat32(大多數(shù)mini sd卡都格式化為fat32。我從sandisk使用了便宜的mini sd卡),將bootcode.bin,start.elf,fixup.dat移到sd卡上。完成了!好了一次,按照?qǐng)D片的順序,步驟是:
找到bootcode.bin,start.elf,fixup.dat。
確保您的SD卡格式化為fat32。
將bootcode.bin,start.elf和fixup.dat移至格式化的sd卡上。
這是我如何解決這個(gè)問(wèn)題,請(qǐng)鏈接。
第4步:檢查Mini SD
好的,我們有一個(gè)可引導(dǎo)的迷你SD卡,希望您此時(shí)有一個(gè)pi 3。因此,現(xiàn)在我們應(yīng)該對(duì)其進(jìn)行測(cè)試,以確保pi 3能夠識(shí)別出迷你sd卡是可啟動(dòng)的。
在pi上,靠近迷你USB端口的地方有兩個(gè)小led。一個(gè)是紅色的。這是電源指示燈。當(dāng)pi接通電源時(shí),該指示燈應(yīng)亮起。因此,如果您現(xiàn)在沒(méi)有任何迷你sd卡插入pi,它就會(huì)亮起紅色。好的,現(xiàn)在拔下pi的插頭,然后插入上一步中創(chuàng)建的可啟動(dòng)迷你sd卡,然后將pi插入。您是否看到另一盞燈?在紅色旁邊,應(yīng)該有一個(gè)綠色指示燈,指示它正在讀取SD卡。該指示燈稱為ACT指示燈。插入可行的sd卡時(shí),它會(huì)亮起。訪問(wèn)迷你SD卡時(shí),它將閃爍。
好吧,因此,在插入可引導(dǎo)的迷你sd卡并將pi插入后,應(yīng)該發(fā)生了兩件事:
紅色指示燈應(yīng)亮起,指示受電
》
綠色指示燈應(yīng)亮起,表明它已插入迷你SD卡中。
如果出現(xiàn)問(wèn)題,請(qǐng)嘗試重復(fù)上述步驟或單擊下面的鏈接以獲取更多信息。
鏈接是一個(gè)很好的參考。
步驟5:CODE1
該項(xiàng)目是用ARM匯編語(yǔ)言編寫的。本教程假定您對(duì)ARM匯編有基本的了解,但是您應(yīng)該了解以下幾點(diǎn):
.equ:為符號(hào)分配一個(gè)值,即abc .equ 5 abc現(xiàn)在代表五
ldr:從內(nèi)存中加載
str:寫入內(nèi)存
cmp:通過(guò)執(zhí)行減法比較兩個(gè)值。設(shè)置標(biāo)志。
b:分支到標(biāo)簽
添加:執(zhí)行算術(shù)
如果您對(duì)Arm組裝沒(méi)有任何經(jīng)驗(yàn),請(qǐng)觀看此文章視頻。它將使您對(duì)Arm匯編語(yǔ)言有很好的了解。
好吧,現(xiàn)在我們有一個(gè)連接到樹(shù)莓派3的電路,并且有一個(gè)pi可以識(shí)別的sd卡,所以我們的下一個(gè)任務(wù)是弄清楚如何通過(guò)加載樹(shù)莓派來(lái)與電路交互帶有可執(zhí)行程序的pi。通常,我們需要做的是告訴pi從GPIO 21(連接到紅線的引腳)輸出電壓。然后,我們需要一種方法來(lái)切換led使其閃爍。為此,我們需要更多信息。到目前為止,我們還不知道如何告訴GPIO 21輸出,這就是為什么我們必須閱讀數(shù)據(jù)手冊(cè)的原因。大多數(shù)微控制器都有數(shù)據(jù)表,這些數(shù)據(jù)表準(zhǔn)確指定了所有工作方式。不幸的是,pi 3沒(méi)有官方文檔!但是,有一個(gè)非正式的數(shù)據(jù)表。這是指向它的兩個(gè)鏈接:
https://github.com/raspberrypi/documentation/files 。..
https://web.stanford.edu/class/cs140e/docs/BCM2837 。..
在這一點(diǎn)上,您應(yīng)該花幾分鐘的時(shí)間才能進(jìn)入下一步瀏覽數(shù)據(jù)表,看看您能找到什么信息。
步驟6:CODE2:Turn_Led_ON

raspberry pi 3 53寄存器用于控制輸出/輸入引腳(外圍設(shè)備)。引腳分組在一起,每組分配給一個(gè)寄存器。對(duì)于GPIO,我們需要能夠訪問(wèn)SELECT寄存器,SET寄存器和CLEAR寄存器。要訪問(wèn)這些寄存器,我們需要這些寄存器的物理地址。在閱讀數(shù)據(jù)手冊(cè)時(shí),您只需要記下地址的偏移量(低字節(jié))并將其添加到基址即可。您必須執(zhí)行此操作,因?yàn)閿?shù)據(jù)表列出了Linux虛擬地址,這些地址基本上是操作系統(tǒng)分配的值。我們沒(méi)有使用操作系統(tǒng),因此我們需要使用物理地址直接訪問(wèn)這些寄存器。為此,您需要以下信息:
外圍設(shè)備的基地址:0x3f200000。 pdf(第6頁(yè))表示基本地址為0x3f000000,但是該地址不起作用。使用0x3f200000
FSEL2(SELECT)的偏移量而不是寄存器的完整地址。 pdf在0x7E20008處列出了FSEL2,但該地址是linux虛擬地址。偏移量將相同,因此我們要注意。 0x08
GPSET0(SET)的偏移量: 0x1c
O GPCLR0(CLEAR)的偏移量:0x28
因此,您可能會(huì)注意到數(shù)據(jù)表中列出了4個(gè)SELECT寄存器,2個(gè)SET寄存器和2個(gè)CLEAR寄存器,那么為什么選擇我所做的那些呢?這是因?yàn)槲覀円褂肎PIO 21,而FSEL2控制GPIO 20-29,SET0和CLR0控制GPIO 0-31。 FSEL寄存器為每個(gè)GPIO引腳分配了三個(gè)位。由于我們使用的是FSEL2,這意味著位0-2控制GPIO 20,位3-5控制GPIO 21,依此類推。 Set和CLR寄存器為每個(gè)引腳分配一個(gè)位。例如,SET0和CLR0中的位0控制GPIO1。要控制GPIO 21,您需要在SET0和CLR0中設(shè)置位21。
好的,所以我們已經(jīng)討論了如何訪問(wèn)這些寄存器,但是該怎么做呢?
FSEL2寄存器將用于將GPIO 21設(shè)置為輸出。要設(shè)置引腳輸出,您需要將三個(gè)位的lo順序位設(shè)置為1。因此,如果位3-5控制GPIO 21,則意味著我們需要將第一個(gè)位(位3)設(shè)置為1。這將告訴pi我們想要使用GPIO 21作為輸出。因此,如果要查看GPIO 21的3位,將其設(shè)置為b001后,它們應(yīng)該看起來(lái)像這樣。
GPSET0告訴pi開(kāi)啟引腳(輸出電壓)。為此,我們只需切換與所需GPIO引腳對(duì)應(yīng)的位即可。在我們的情況下,位21。
GPCLR0告訴pi關(guān)閉該引腳(無(wú)電壓)。要關(guān)閉該引腳,請(qǐng)將此位設(shè)置為相應(yīng)的GPIO引腳。在我們的示例中,第21位
在出現(xiàn)閃爍的led之前,首先讓我們編寫一個(gè)簡(jiǎn)單的程序,該程序只需打開(kāi)led。
首先,我們需要在源代碼的頂部添加兩個(gè)指令。
.section .init告訴pi將代碼放置在哪里
.global _start
接下來(lái),我們需要布置將要使用的所有地址。使用.equ為值分配可讀符號(hào)。
.equ GPFSEL2,0x08
.equ GPSET0,0x1c
.equ GPCLR0,0x28
.equ BASE,0x3f200000
現(xiàn)在,我們將創(chuàng)建掩碼以設(shè)置需要設(shè)置的位。
.equ SET_BIT3,0x08這將設(shè)置第三個(gè)位0000_1000
.equ SET_BIT21,0x200000
然后我們需要添加_start標(biāo)簽
_start:
將基地址加載到寄存器
ldr r0,= BASE
現(xiàn)在我們需要設(shè)置GPFSEL2的bit3
ldr r1,SET_BIT3
str r1,[r0,#GPFSEL2]該指令表示將位0x08寫回GPFSEL2
最后,我們需要通過(guò)將GPSET0寄存器中的位21置1來(lái)設(shè)置GPIO 21
ldr r1,= SET_BIT21
str r1,[r0,#GPSET0]
最終產(chǎn)品應(yīng)類似于所示的代碼。
下一步是編譯代碼并創(chuàng)建一個(gè).img pi可以運(yùn)行的文件。
下載附件makefile,kernel.ld,以及是否需要turn_led_on.s源代碼。
將所有文件放在同一文件夾中。
如果使用自己的源代碼,請(qǐng)編輯makefile并將代碼= turn_led_on.s替換為code = .s
保存makefile。
使用終端(linux)或cmd窗口(windows)導(dǎo)航至包含以下內(nèi)容的文件夾文件,然后鍵入make并按Enter鍵。
make文件應(yīng)生成一個(gè)名為kernel.img的文件。
將kernel.img復(fù)制到您的迷你SD卡中??ǖ膬?nèi)容應(yīng)如圖所示(圖3):bootcode.bin,start.elf,fixup.dat和kernel.img。
彈出迷你sd卡并將其插入pi
將pi插入電源中
LED應(yīng)該亮起?。?/p>
重要提示:顯然可指導(dǎo)人員遇到了問(wèn)題makefile沒(méi)有擴(kuò)展名,因此我將其擴(kuò)展名為.txt。
第7步:CODE3:BLINKY_LED

最后,是時(shí)候讓LED閃爍了!
與之前的步驟相比,這相對(duì)簡(jiǎn)單。我們需要做的就是編寫一個(gè)無(wú)限循環(huán),在該循環(huán)內(nèi)打開(kāi)LED,然后打開(kāi)DELAY,然后關(guān)閉LED延遲并循環(huán)。
打開(kāi)turn_led_on.s,然后將其另存為blinky_led .s
在.equ部分中添加.equ COUNTER,0xf0000。
在循環(huán)之前的下一個(gè)地方添加ldr r2,= COUNTER
在文件末尾添加新標(biāo)簽Inifinite_loop:
在下一行添加b Inifinite_loop。這意味著代碼將無(wú)限期地跳轉(zhuǎn)回Inifinite_loop標(biāo)簽。
在循環(huán)中打開(kāi)led:str r1,[r0,#GPSET0],然后將0放入r10:mov r10,#0
添加標(biāo)簽延遲:
在下一行上添加:添加r10,r10,#1,這將使r10在下一行上增加1
在下一行上添加:cmp r10 ,r2這會(huì)將r10與COUNTER的值進(jìn)行比較
延遲,這意味著程序?qū)⑾萑胙h(huán),直到r10遞增到COUNTER為止,這將延遲程序。
現(xiàn)在我們需要關(guān)閉LED:str r1,[r0,#GPCLR0]這會(huì)將CLEAR寄存器中的位21置1。關(guān)閉LED。
接下來(lái)從上方復(fù)制延遲循環(huán),并將delay更改為delay2
打開(kāi)makefile并將第4行的turn_on_led.s更改為blinky_led.s或您的文件名選擇。
執(zhí)行與上一步相同的操作。
用新的kernel.img
將SD卡插入pi并替換新卡上的kernel.img。通電!
LED應(yīng)該以大約每秒閃爍1次的速度閃爍!
略有重要的注意事項(xiàng):顯然,指示人員有問(wèn)題makefile沒(méi)有擴(kuò)展名,因此我將其擴(kuò)展名為.txt。下載擴(kuò)展程序后,請(qǐng)刪除該擴(kuò)展程序,以使其正常運(yùn)行。
步驟8:完成
就是這樣。希望您現(xiàn)在指示燈閃爍!
責(zé)任編輯:wv
-
led
+關(guān)注
關(guān)注
243文章
24596瀏覽量
690908 -
樹(shù)莓派
+關(guān)注
關(guān)注
122文章
2078瀏覽量
110474
發(fā)布評(píng)論請(qǐng)先 登錄
PI3HDMI511A HDMI應(yīng)用信息解讀
運(yùn)行 debian 69 紅色電源 LED 旁邊的綠色閃爍 LED 是什么意思?
合科泰教你如何焊接簡(jiǎn)單LED閃爍電路
【瑞薩RA6E2地奇星開(kāi)發(fā)板試用】串口下載燒錄程序使LED閃爍頻率變慢
基于芯源CW32 MCU的LED閃爍示例及代碼分析
Banana Pi BPI-CM6 – 一款與 Raspberry Pi CM4/CM5 載板兼容的 SpacemiT K1 RISC-V 系統(tǒng)模塊
Banana Pi BPI-CM6 – 一款與 Raspberry Pi CM4/CM5 載板兼容的 SpacemiT K1 RISC-V 系統(tǒng)模塊
Raspberry Pi攜手上海晶珩 助力工業(yè)與物聯(lián)網(wǎng)創(chuàng)新
Banana Pi BPI-R4 Lite:新型單板計(jì)算機(jī)比 Raspberry Pi 5 更具優(yōu)勢(shì)
【創(chuàng)龍TLT113-MiniEVM開(kāi)發(fā)板試用體驗(yàn)】T113開(kāi)發(fā)板LED閃爍控制終極教程
貿(mào)澤開(kāi)售Raspberry Pi用于嵌入式和IIoT應(yīng)用的RP2350微控制器
Raspberry Pi 計(jì)算機(jī)流行的工業(yè)用例
如何讓 Raspberry Pi 煥發(fā)網(wǎng)絡(luò)新生機(jī)?
怎樣用Raspberry Pi 3使LED閃爍
評(píng)論