那曲檬骨新材料有限公司

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時,請確保將短端連接到負極??吹阶詈笠粡垐D片

步驟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應該亮起?。?/p>

重要提示:顯然可指導人員遇到了問題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
    +關注

    關注

    242

    文章

    23362

    瀏覽量

    663220
  • 樹莓派
    +關注

    關注

    117

    文章

    1710

    瀏覽量

    105880
收藏 人收藏

    評論

    相關推薦

    Raspberry Pi樹莓派新手指南

    電子發燒友網站提供《Raspberry Pi樹莓派新手指南.pdf》資料免費下載
    發表于 12-23 17:05 ?1次下載

    新品來襲!Raspberry Pi Compute Module 5

    今天,我們很高興地宣布推出備受期待的Raspberry Pi計算模塊5,這是我們旗艦Raspberry Pi 5單板計算機的模塊化版本,售價僅為45美元。 意外之旅 我們在2008年成
    的頭像 發表于 11-27 18:21 ?584次閱讀
    新品來襲!<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> Compute Module 5

    Raspberry Pi Pico 2 W 發布

    樹莓派官方今日宣布推出支持無線連接的新款 MCU(微控制器)主板 Raspberry Pi Pico 2 W,售價 7 美元, 較此前的有線版本高出 2 美元 。 ? ? Raspberry
    的頭像 發表于 11-25 18:25 ?620次閱讀
    <b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> Pico 2 W 發布

    Raspberry Pi Pico 2

    Raspberry Pi Pico 2顯著提升了性能,同時保持了與之前的Raspberry Pi Pico系列器件的兼容性。 Pico 2具有更高的內核時鐘速度、雙倍內存、更強大的Ar
    的頭像 發表于 11-25 15:10 ?706次閱讀
    <b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> Pico 2

    Banana Pi M5 與 Raspberry Pi 4 – 基準測試

    Banana Pi M5 基準測試已成為我的網站上最受歡迎的作品之一,而且似乎人們真正想看到的是它與其 Raspberry 口味的表親之間的直接比較,所以這里就是 Banana Pi M5 與
    的頭像 發表于 10-28 10:28 ?459次閱讀
    Banana <b class='flag-5'>Pi</b> M5 與 <b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> 4 – 基準測試

    e絡盟開售Raspberry Pi新款產品

    安富利旗下全球電子與工業系統設計、維護和維修產品及技術分銷商 e絡盟 現為客戶供應小巧、快速、多功能的 Raspberry Pi Pico 2。
    的頭像 發表于 10-12 16:57 ?728次閱讀

    e絡盟開售Raspberry Pi AI 攝像頭

    安富利旗下全球電子元器件產品與解決方案分銷商e絡盟開售全新 Raspberry Pi AI攝像頭,這是 Raspberry Pi 的最新產品,擴大了 e絡盟的人工智能設備范圍。
    的頭像 發表于 10-10 10:09 ?304次閱讀
    e絡盟開售<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> AI 攝像頭

    e絡盟發售功能強大的入門級 Raspberry Pi 5 2GB

    安富利旗下全球電子元器件產品與解決方案分銷商e絡盟日前開售極具性價比的全新 Raspberry Pi 5 2GB。
    的頭像 發表于 09-02 10:39 ?370次閱讀
    e絡盟發售功能強大的入門級 <b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> 5 2GB

    怎樣用THS3201實現輸出功率可調?

    怎樣用THS3201實現輸出功率可調?
    發表于 08-26 08:28

    名單公布!樹莓派5(Raspberry Pi 5)開發板免費試用?。。?/a>

    名單公布: jinsheng、華仔stm32 樹莓派5(Raspberry Pi 5)新主板采用2.4GHz四核64位Arm Cortex-A76處理器,擁有512KB的L2緩存和2MB的共享L3
    發表于 06-27 15:40

    如何將CYKIT-028 TFT模塊與Raspberry Pi和ESP32微控制器結合使用?

    我目前正在探索如何將 CYKIT-028 TFT 模塊與 Raspberry Pi 和 ESP32 微控制器結合使用。 不過,在選擇集成開發環境(IDE)和使用 PSOC Creator 的必要性
    發表于 05-21 07:36

    怎樣用STM8L的PB3/TIM2_TRIG的引腳測量脈寬?

    怎樣用STM8L的PB3/TIM2_TRIG的引腳測量脈寬?
    發表于 05-07 06:55

    stm32f100怎樣用重映射功能?

    的是stm32f100c8t6b芯片,現在想用將PB1映射為TIM1_CH3N,在調用GPIO_PinAFConfig(GPIOB,GPIO_PinSource1,GPIO_AF_TIM1)時, GPIO_PinAFConfig和GPIO_AF_TIM1都沒定義,st
    發表于 05-07 06:06

    STM32F412G-DISCO怎樣用MX生成fatfs的代碼?

    STM32F412G-DISCO怎樣用MX生成fatfs的代碼? SD卡例程能跑,但mx生成的代碼不能正常運行,我生成代碼后是不是還要配置一些東西?(我生成后只寫了測試代碼) 問題解決了,雖然我不知道我為什么不能直接使用mx生成的代碼去操作sd卡,但我通過復制粘貼例程的代碼完成了測試。
    發表于 03-12 08:15

    5分鐘內將Raspberry Pi Pico變成簡單的示波器+波形發生器

    5 分鐘內將 Raspberry Pi Pico(或任何 RP2040 板)變成簡單的示波器+波形發生器。
    的頭像 發表于 03-04 09:14 ?2375次閱讀
    5分鐘內將<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> Pico變成簡單的示波器+波形發生器
    澳门百家乐官网上下限| 大发888破解方法| 马德里百家乐的玩法技巧和规则| 真人百家乐软件云南景| 百家乐官网透视牌靴价格| 百家乐官网大赌场娱乐网规则| 查风水24山| 百家乐家居 | 百家乐网上娱乐场开户注册| 大发888信誉| 奇博| 366百家乐官网娱乐城| 电玩百家乐官网游戏机路单| 百家乐怎么打啊| 三公百家乐在线哪里可以玩| 德州扑克发牌员| 百家乐官网合理的投注法| 百家乐官网如何捕捉长龙| 百家乐网真人真钱群| 网上百家乐试玩网址| 智尊娱乐| 澳门百家乐官网会出千吗| 电脑百家乐官网的玩法技巧和规则| 百家乐的注码技巧| 凌龙棋牌官方下载| 百家乐官网真人游戏网上投注 | 百家乐视频小游戏| 威尼斯人娱乐赌博| 宁陵县| 网址百家乐官网的玩法技巧和规则| 百家乐打闲赢机会多| 云鼎娱乐场网址| 网络百家乐官网赌博赢钱| 网上百家乐博彩正网| 澳门百家乐走势图怎么看| 香港六合彩总公司| 爱赢百家乐现金网| 澳门百家乐官网怎么玩| 24山水口决阳宅| 百家乐什么叫缆| bet365体育投注心得|