91视频免费?看_蜜芽MY188精品TV在线观看_国产免费无遮挡在线观看视频_深夜国产_亚洲精品欧洲精品_欧美黑人粗暴多交

程序小白
認(rèn)證:優(yōu)質(zhì)創(chuàng)作者
所在專題目錄 查看專題
初識(shí)Arduino:簡(jiǎn)單是簡(jiǎn)單了點(diǎn),還是蠻有意思的
基于ESP32快速搭建藍(lán)牙串口透?jìng)鲬?yīng)用(Arduino)
基于ESP32搭建的藍(lán)牙串口透?jìng)鲬?yīng)用代碼分析(Arduino)
基于ESP32搭建GPIO-Interrupt應(yīng)用及分析(Arduino)
基于ESP32例程分析Functional-Interrupt(C++淺析)及GPIO-API詳解
基于ESP32——FreeRTOS初識(shí)(Arduino)
作者動(dòng)態(tài) 更多
基于stm32采用PWM驅(qū)動(dòng)伺服控制器學(xué)習(xí)筆記
05-13 15:25
基于STM32驅(qū)動(dòng)TM1638學(xué)習(xí)筆記——軟件篇
04-19 12:42
基于TM1638驅(qū)動(dòng)8位數(shù)碼管設(shè)計(jì)分享
02-24 11:26
RT-Thread驅(qū)動(dòng)之路: Studio創(chuàng)建FAL分區(qū)⑤
01-02 08:30
RT-Thread驅(qū)動(dòng)之路: Studio 掛載通用SPI flash④
2024-12-23 13:41

基于ESP32搭建GPIO-Interrupt應(yīng)用及分析(Arduino)

      這一篇開(kāi)始我們通過(guò)一個(gè)簡(jiǎn)單的應(yīng)用來(lái)講解如何在Arduino開(kāi)發(fā)環(huán)境下,快速搭建一個(gè)GPIO中斷的應(yīng)用。

      我用的是ESP32-S的開(kāi)發(fā)板,這個(gè)開(kāi)發(fā)板上有兩個(gè)按鍵提供,一個(gè)是復(fù)位按鍵,另一個(gè)按鍵可以進(jìn)行配置使用。

      首先我們還是看一下ESP32-S開(kāi)發(fā)板的原理圖 有關(guān)按鍵的部分;

==== 接下來(lái)進(jìn)入我們的擼碼模式 ====

代碼擼完在Arduino中是這個(gè)樣子的:

但是他是一個(gè)INO類型的文件,并不利于我們的代碼分析:

這里有一個(gè)小技巧,把這個(gè)INO文件復(fù)制一份,并且把后綴改為.C的文件,然后把這個(gè)文件放到我們的Arduino安裝目錄中ESP32的文件夾下面,然后在這個(gè)目錄下,我們利用source Insight的代碼分析功能來(lái)分析我們的軟件。

在sourceInsight工具下,我們代碼將可以很容易的進(jìn)行分析,跳轉(zhuǎn)和查找,代碼總覽如下:

==== 源碼分析 ====

1.聲明并創(chuàng)建一個(gè)button結(jié)構(gòu):

2.創(chuàng)建中斷服務(wù)函數(shù),并在中斷函數(shù)中進(jìn)行計(jì)數(shù)處理:

在定義這個(gè)isr函數(shù)時(shí)候 用到了一個(gè)前綴,這個(gè)前綴的意思是,這個(gè)函數(shù)并不是存儲(chǔ)在flash中,而是被放到了IRAM里(先不要太深入到細(xì)節(jié)為什么要這么做,這和ESP32的構(gòu)架有關(guān),先照做就是):

3.在setup階段配置串口、GPIO引腳、以及中斷入口:

4.在loop循環(huán)中,實(shí)時(shí)查詢Button按鍵狀態(tài),引入系統(tǒng)運(yùn)行時(shí)間計(jì)數(shù)函數(shù),并設(shè)置在20s后解除GPIO的中斷功能:

====================實(shí)戰(zhàn)應(yīng)用==============================

1.將我們的ESP32開(kāi)發(fā)板接入電腦,并確認(rèn)好串口號(hào):

2.在Arduino軟件中將串口號(hào)變更為我們接入開(kāi)發(fā)板的串口號(hào),確認(rèn)串口無(wú)占用:

3.點(diǎn)擊編譯上傳按鈕等待軟件編譯完成,并燒錄到我們的ESP32開(kāi)發(fā)板中實(shí)際運(yùn)行:

4.在軟件運(yùn)行以后,開(kāi)發(fā)板的燒錄串口會(huì)自動(dòng)解除占用,并通過(guò)該串口輸出系統(tǒng)運(yùn)行信息以及應(yīng)用內(nèi)部打印信息,這時(shí)候我們需要配置一下串口調(diào)試工具,并打開(kāi)串口:

5.點(diǎn)擊開(kāi)發(fā)板的復(fù)位按鍵,復(fù)位已燒錄的程序:

6.點(diǎn)擊我們開(kāi)發(fā)板的button1按鍵,觀察串口輸出打印信息:

7.等待系統(tǒng)運(yùn)行20s后,觀察串口打印信息,并嘗試按下button1,觀察串口是否有信息輸出:

====================串口特別介紹篇==========================

ESP32的串口資源中有3個(gè)串口:分別為Serial 、Serial1、Serial2。

Serial串口的主要功能:

      1. 首先它是我們的軟件下載更新需要使用的串口。

      2. 他是系統(tǒng)運(yùn)行信息打印串口,以及我們APP內(nèi)置運(yùn)行打印信息輸出串口。

      3. 他的串口發(fā)送/接收引腳是固定的,是IO1和IO3。

Serial串口的實(shí)際工作流程:

      1.ESP32開(kāi)發(fā)板上電以后,會(huì)進(jìn)入APP運(yùn)行模式。

      2.ESP32內(nèi)置操作系統(tǒng)會(huì)在運(yùn)行階段,不斷檢測(cè)Serial串口的狀態(tài)。

      3.當(dāng)檢測(cè)到串口是未連接狀態(tài),并且這個(gè)時(shí)候有燒錄請(qǐng)求命令時(shí)(點(diǎn)擊Arduino軟件的燒錄上傳按鈕),這時(shí)Serial串口會(huì)轉(zhuǎn)換到程序下載模式,并且串口被占用進(jìn)行軟件燒錄操作。

      4.在軟件燒錄完成以后,系統(tǒng)自動(dòng)重啟運(yùn)行,又進(jìn)入到了APP運(yùn)行模式,并且輸出串口打印信息,并進(jìn)入到第2步串口監(jiān)測(cè)捕捉命令模式。

==== 總結(jié)篇 ====

總結(jié):基于Arduino的開(kāi)發(fā)方式和傳統(tǒng)的單片機(jī)開(kāi)發(fā)方式不太一樣。

      例如以前我們總是可以利用仿真環(huán)境IDE以及配合仿真器,進(jìn)行全仿真運(yùn)行,斷點(diǎn)運(yùn)行,watch查看變量等等方式去調(diào)試我們的軟件。在基于Arduino方式開(kāi)發(fā)的嵌入式軟件,我們無(wú)法進(jìn)行全仿真 斷點(diǎn)運(yùn)行等調(diào)試手段,我們只能內(nèi)嵌代碼到我們的軟件中,通過(guò)串口輸出打印的方式,來(lái)判斷我們的系統(tǒng)的運(yùn)行裝,這一點(diǎn)要慢慢的適應(yīng),其實(shí)并不是只有Arduino這個(gè)樣子,假如你接觸過(guò)嵌入式Linux的開(kāi)發(fā),那么你會(huì)知道,其實(shí)除了我們用的傳統(tǒng)的單片機(jī)開(kāi)發(fā),其它嵌入式開(kāi)發(fā)領(lǐng)域都是依靠出口輸出  debug信息的方式來(lái)完成軟件調(diào)試的。

聲明:本內(nèi)容為作者獨(dú)立觀點(diǎn),不代表電子星球立場(chǎng)。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請(qǐng)聯(lián)系:editor@netbroad.com
覺(jué)得內(nèi)容不錯(cuò)的朋友,別忘了一鍵三連哦!
贊 3
收藏 4
關(guān)注 151
成為作者 賺取收益
全部留言
0/200
成為第一個(gè)和作者交流的人吧
主站蜘蛛池模板: 宁海县| 德阳市| 黑山县| 库尔勒市| 罗甸县| 泸溪县| 南乐县| 岗巴县| 商都县| 肃宁县| 榆社县| 高青县| 南召县| 靖江市| 奉新县| 孝感市| 鄂托克旗| 高青县| 靖州| 平原县| 奉节县| 松滋市| 巴林左旗| 那坡县| 原阳县| 伽师县| 华宁县| 龙里县| 莎车县| 南开区| 宾阳县| 泾源县| 托里县| 翼城县| 怀仁县| 和静县| 汽车| 固镇县| 阆中市| 高平市| 兰考县|