這一篇開始我們通過一個簡單的應用來講解如何在Arduino開發(fā)環(huán)境下,快速搭建一個GPIO中斷的應用。
我用的是ESP32-S的開發(fā)板,這個開發(fā)板上有兩個按鍵提供,一個是復位按鍵,另一個按鍵可以進行配置使用。
首先我們還是看一下ESP32-S開發(fā)板的原理圖 有關按鍵的部分;
==== 接下來進入我們的擼碼模式 ====
代碼擼完在Arduino中是這個樣子的:
但是他是一個INO類型的文件,并不利于我們的代碼分析:
這里有一個小技巧,把這個INO文件復制一份,并且把后綴改為.C的文件,然后把這個文件放到我們的Arduino安裝目錄中ESP32的文件夾下面,然后在這個目錄下,我們利用source Insight的代碼分析功能來分析我們的軟件。
在sourceInsight工具下,我們代碼將可以很容易的進行分析,跳轉和查找,代碼總覽如下:
==== 源碼分析 ====
1.聲明并創(chuàng)建一個button結構:
2.創(chuàng)建中斷服務函數(shù),并在中斷函數(shù)中進行計數(shù)處理:
在定義這個isr函數(shù)時候 用到了一個前綴,這個前綴的意思是,這個函數(shù)并不是存儲在flash中,而是被放到了IRAM里(先不要太深入到細節(jié)為什么要這么做,這和ESP32的構架有關,先照做就是):
3.在setup階段配置串口、GPIO引腳、以及中斷入口:
4.在loop循環(huán)中,實時查詢Button按鍵狀態(tài),引入系統(tǒng)運行時間計數(shù)函數(shù),并設置在20s后解除GPIO的中斷功能:
====================實戰(zhàn)應用==============================
1.將我們的ESP32開發(fā)板接入電腦,并確認好串口號:
2.在Arduino軟件中將串口號變更為我們接入開發(fā)板的串口號,確認串口無占用:
3.點擊編譯上傳按鈕等待軟件編譯完成,并燒錄到我們的ESP32開發(fā)板中實際運行:
4.在軟件運行以后,開發(fā)板的燒錄串口會自動解除占用,并通過該串口輸出系統(tǒng)運行信息以及應用內部打印信息,這時候我們需要配置一下串口調試工具,并打開串口:
5.點擊開發(fā)板的復位按鍵,復位已燒錄的程序:
6.點擊我們開發(fā)板的button1按鍵,觀察串口輸出打印信息:
7.等待系統(tǒng)運行20s后,觀察串口打印信息,并嘗試按下button1,觀察串口是否有信息輸出:
====================串口特別介紹篇==========================
ESP32的串口資源中有3個串口:分別為Serial 、Serial1、Serial2。
Serial串口的主要功能:
1. 首先它是我們的軟件下載更新需要使用的串口。
2. 他是系統(tǒng)運行信息打印串口,以及我們APP內置運行打印信息輸出串口。
3. 他的串口發(fā)送/接收引腳是固定的,是IO1和IO3。
Serial串口的實際工作流程:
1.ESP32開發(fā)板上電以后,會進入APP運行模式。
2.ESP32內置操作系統(tǒng)會在運行階段,不斷檢測Serial串口的狀態(tài)。
3.當檢測到串口是未連接狀態(tài),并且這個時候有燒錄請求命令時(點擊Arduino軟件的燒錄上傳按鈕),這時Serial串口會轉換到程序下載模式,并且串口被占用進行軟件燒錄操作。
4.在軟件燒錄完成以后,系統(tǒng)自動重啟運行,又進入到了APP運行模式,并且輸出串口打印信息,并進入到第2步串口監(jiān)測捕捉命令模式。
==== 總結篇 ====
總結:基于Arduino的開發(fā)方式和傳統(tǒng)的單片機開發(fā)方式不太一樣。
例如以前我們總是可以利用仿真環(huán)境IDE以及配合仿真器,進行全仿真運行,斷點運行,watch查看變量等等方式去調試我們的軟件。在基于Arduino方式開發(fā)的嵌入式軟件,我們無法進行全仿真 斷點運行等調試手段,我們只能內嵌代碼到我們的軟件中,通過串口輸出打印的方式,來判斷我們的系統(tǒng)的運行裝,這一點要慢慢的適應,其實并不是只有Arduino這個樣子,假如你接觸過嵌入式Linux的開發(fā),那么你會知道,其實除了我們用的傳統(tǒng)的單片機開發(fā),其它嵌入式開發(fā)領域都是依靠出口輸出 debug信息的方式來完成軟件調試的。