1. 程式人生 > 其它 >實驗分享丨迅為IMX6ULL開發板點亮第一個led燈

實驗分享丨迅為IMX6ULL開發板點亮第一個led燈

本章內容對應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 命令用程式實現。


更多內容:嗶哩嗶哩搜尋北京迅為即可看更多實戰內容。