<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > 老宇哥帶你玩轉ESP32:03 GPIO數字輸入與數字輸出

老宇哥帶你玩轉ESP32:03 GPIO數字輸入與數字輸出

發(fā)布人:芯片之大家 時(shí)間:2023-07-06 來(lái)源:工程師 發(fā)布文章
image.png


今天我們來(lái)點(diǎn)燈。

多路復用器與GPIO矩陣

ESP32芯片有34個(gè)物理 GPIO Pad,每個(gè)Pad可以當作通用IO,也可以當作外設的引腳,GPIO 引腳通過(guò)非常復雜的 GPIO 矩陣互連,這基本上就是是一個(gè)多路復用器,我們可以非常靈活的選擇哪些GPIO引腳在內部路由到哪個(gè)外設的信號,大家可以看下圖:

image.png


IO_MUX 中每個(gè) GPIO pad 有一組寄存器。每個(gè) pad 可以配置成 GPIO 功能(連接 GPIO 交換矩陣)或者 直連功能。

有一些高速信號如以太網(wǎng)、SDIO、SPI、JTAG、UART 等會(huì )旁路 GPIO 交換矩陣以實(shí)現更好的高頻數字特性。所以高速信號會(huì )直接通過(guò) IO_MUX 輸入和輸出,這樣比使用 GPIO 交換矩陣的靈活度要低。

不同于STM32的簡(jiǎn)單復用,ESP32的多路復用器,使設計人員可以靈活地更改芯片內部的 GPIO 引腳連接并將其路由到任何信號,這樣硬件設計上,布線(xiàn)也方便的多。

image.png


通過(guò) IO_MUX、GPIO 交換矩陣的外設輸入

image.png


通過(guò) GPIO 交換矩陣輸出信號

ESP32還有18個(gè) GPIO 管腳具有低功耗(低功耗 RTC)和模擬功能,這個(gè)我們后面設計到具體案例再細說(shuō)。

完整管腳說(shuō)明需要去參考的樂(lè )鑫官方《ESP32 技術(shù)規格書(shū)》

特別提醒

ESP32的IO12上電時(shí)的電平會(huì )決定外部flash的工作電壓,上電時(shí)該腳為高則認為flash工作于1.8V,為低則認為flash工作于3.3V。常用的模塊該腳內部已下拉,即flash是工作于3.3V的,若外部使用強上拉模塊就可能工作異常了。

硬件連接
image.png


數字輸出功能

這里我們就以一個(gè)LED燈來(lái)演示,首先,我們需要在setup()中初始化對應的IO在輸出模式,使用pinMode函數,第一個(gè)參數上對應的IO序號,第二個(gè)是IO的模式

pinMode(4, OUTPUT);

然后可以通過(guò)digitalWrite()函數改變數字引腳的電平狀態(tài),HIGH輸出高平,LOW輸出低電平

digitalWrite(4, HIGH); // 輸出高電平digitalWrite(4, LOW);  // 輸出低電平

所有 ESP32 GPIO 引腳都可以在輸入或輸出模式下運行。引腳34-39只能用于輸入。還有其他一些引腳也有其它特性,這個(gè)我們現在也沒(méi)必要太糾結,用到的時(shí)候再去看就好了。

數字輸入功能

在輸入模式下,我們可以通過(guò)IO來(lái)讀取外部數字信號,我們這里用按鍵來(lái)表示。

跟輸出模式一樣,我們在setup()中初始化對應的IO在輸入模式,也使用pinMode函數

pinMode(2, INPUT);

然后通過(guò)digitalRead(GPIO_pin)就可以讀取對應IO的電平了。

代碼示例

下面的代碼我們定義了2個(gè)GPIO引腳。GPIO2用于按鍵輸入,GPIO4用于LED輸出。

初始化之后,我們在loop()中不斷的讀取按鍵的電平狀態(tài),并賦值給LED,實(shí)現按鍵下去燈熄滅,松開(kāi)燈點(diǎn)亮的效果。

#define LED_GPIO 4#define BTN_GPIO 2
 int BTN_State = 0; //按鍵狀態(tài)
 void setup(){
  pinMode(LED_GPIO, OUTPUT);
  pinMode(BTN_GPIO, INPUT);
} 
void loop(){  // 讀取按鍵狀態(tài)
  BTN_State = digitalRead(BTN_GPIO);  // 把按鍵狀態(tài)做為L(cháng)ED燈的輸出
  digitalWrite(LED_GPIO, BTN_State);
}

我們按照前面的教程編譯程序,刷入開(kāi)發(fā)板,看下效果:


接下來(lái)我們用中斷的方式實(shí)現一下:

attachInterrupt(uint8_t pin, void ()(void), int mode)函數用來(lái)配置中斷功能:

  • 參數一,GPIO引腳號

  • 參數二,中斷回調函數

  • 參數三,中斷觸發(fā)模式(RISING、FALLING、CHANGE等)

參數三這個(gè)可以設置各種模式,例如上升沿觸發(fā),下降沿出發(fā),任意沿觸發(fā),電平信號等等模式。

我們用上面的例子改一下:

#define LED_GPIO 4#define BTN_GPIO 2
 int BTN_State = 0; //按鍵狀態(tài)//中斷回調函數void bt_callBack(void){
  BTN_State = digitalRead(BTN_GPIO); // 讀取按鍵狀態(tài)
  digitalWrite(LED_GPIO, BTN_State); // 把按鍵狀態(tài)做為L(cháng)ED燈的輸出} 
void setup(){
  pinMode(LED_GPIO, OUTPUT); //LED輸出模式
  pinMode(BTN_GPIO, INPUT); //輸入上拉模式
  attachInterrupt(BTN_GPIO, bt_callBack, CHANGE); //使能中斷} 
void loop(){  
}

主程序中不用做任何事情了,中斷檢測到有按鍵按下或松開(kāi)(任意跳變沿),就會(huì )觸發(fā)執行中斷回調函數,然后把結果在LED上輸出。

ESP32的GPIO外設相對其它單片機,功能還是略微復雜的,但是不管是SDK的開(kāi)發(fā)還是Arduino方式,官方都幫我們寫(xiě)好相應的庫了,復雜的配置都已經(jīng)定義好了,我們直接調用即可,怎么樣,是不是非常簡(jiǎn)單?

感興趣的同學(xué)也可以打開(kāi)官方的庫,看看是怎么配置寄存器的,會(huì )有一個(gè)更深的理解。

感謝大家,關(guān)于ESP32的學(xué)習,希望大家Enjoy!


*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。



關(guān)鍵詞: 芯片

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>