簡介
HardwareSerial 庫是c++編寫的,應用于esp32 Arduino應用環境的串口驅動庫,我們在安裝好ESP32的Arduino開發環境后就已經集成了這個串口操作庫,在實際應用時直接引用就可以了。
注意:ESP32共有3個UART端口, 其中UART1用于Flash讀/寫,我們使用串口1時需要注意,需要將串口1映射到其他GPIO上即可,我測試了一下GPIO12、GPIO13,使用串口1時可以完美運行
串口名 | Arduino名 | TX | RX |
---|---|---|---|
UART0 | Serial | pin1 | pin3 |
UART1 | Serial1 | pin10 | pin9 |
UART2 | Serial2 | pin17 | pin16 |
效果演示
demo程序,將串口0接收到的數據傳個串口1,再將串口1接受到的數據傳輸得串口0
#include //初始化串口0 Serial.begin(SERIAL_BAUD); //初始化串口1 cardSerial.begin(SERIAL_BAUD,SERIAL_8N1,12,13); //初始化串口2 Serial2.begin(SERIAL_BAUD);}void loop() { while (cardSerial.available() > 0) { uint8_t byteFromSerial = cardSerial.read(); Serial.write(byteFromSerial); } while (Serial.available() > 0) { uint8_t byteFromSerial1 = Serial.read(); cardSerial.write(byteFromSerial1); }} 上圖中通過HardwareSerial庫實現了對串口1的使用,具體說明見下文。 API函數詳細說明 使用HardwareSerial庫需要先聲明一個對象,例如上文圖中的HardwareSerial mySerial1(1);; HardwareSerial類在聲明對象時接收一個輸入參數(0、1、2),分別代表Serial、Serial1、Serial2; 聲明對象后就可以按一般串口的方法使用了,方法說明如下: 初始化串口 void HardwareSerial::begin(unsigned long baud, uint32_t config=SERIAL_8N1, int8_t rxPin=-1, int8_t txPin=-1, bool invert=false, unsigned long timeout_ms = 20000UL); 使能串口,參數如下: baud:串口波特率,該值寫0則會進入自動偵測波特率程序; config:串口參數,默認SERIAL_8N1為8位數據位、無校驗、1位停止位; rxPin:接收管腳針腳號; txPin:發送管腳針腳號; invert:翻轉邏輯電平,串口默認高電平為1、低電平為0; timeout_ms:自動偵測波特率超時時間,如果超過該時間還未獲得波特率就不會使能串口; 關閉串口 void HardwareSerial::end(); 失能串口,釋放資源; 重新設置波特率 void updateBaudRate(unsigned long baud); 設置接收緩存區大小 size_t HardwareSerial::setRxBufferSize(size_t new_size) 設置接收緩存大小(默認為256字節); ESP32默認有128字節的硬件RX FIFO,在RX FIFO收到數據后會移送到上面的接收緩存中; 返回接收緩存數據長度 int HardwareSerial::available(void); 返回發送緩存區可寫長度 int HardwareSerial::availableForWrite(void); ESP32默認有128字節的硬件TX FIFO,該方法返回TX FIFO空閑字節數; 讀取接收緩存區一個字節數據(1) int HardwareSerial::peek(void); 返回接收緩存中第一個字節數據,但并不從中刪除它; 讀取接收緩存區一個字節數據(2) int HardwareSerial::read(void); 返回接收緩存中第一個字節數據,讀取過的數據將從接收緩存中清除; 等待串口收發完畢 void HardwareSerial::flush(); 發送數據 size_t HardwareSerial::write(uint8_t c)size_t HardwareSerial::write(const uint8_t *buffer, size_t size) 寫數據到TX FIFO,在發送FIFO中的數據會自動輸出到TX端口上; 該方法有很多重載,可以用來發送字符串、長整型、整形; 如果TX FIFO已滿,則該方法將阻塞; 返回當前串口波特率 uint32_t HardwareSerial::baudRate() 日志輸出設置 void HardwareSerial::setDebugOutput(bool en); 設置該串口打印Debug信息(默認為0,失能后也會置為0); 除上面方法外,因為繼承自Stream類所以也可以用該類的方法:如size_t readBytes(char *buffer, size_t length);和size_t readBytes(uint8_t *buffer, size_t length)等。
上一篇:ESP32 官方 Xmodem 代碼移植問題
下一篇:最后一頁
推薦閱讀最新更新時間:2025-06-09 10:28




設計資源 培訓 開發板 精華推薦
- LT1172HVCT、5V/1.25A 正降壓轉換器的典型應用
- 【訓練營】四條腿機器狗
- SG3525A 推挽式脈寬調制器控制電路的典型應用
- LT1108CS8-12掌上電腦邏輯電源微功率DC/DC轉換器典型應用電路
- AM2M-1515DH30-NZ ±15 Vout、2W 雙路輸出 DC-DC 轉換器的典型應用
- LTC2945HMS 具有高達 200V 浪涌保護的堅固型 4V 至 70V 高壓側功率監視器的典型應用
- 常用MCU全能燒錄器
- 【航順訓練營】國產航順MCU開發學習板
- LTC3624EMSE-25 5V 輸出電壓、2A 同步降壓型穩壓器的典型應用,具有 1MHz、突發模式操作
- 具有備用電源監控功能的 LTC4420IMSE 18V 雙輸入微電源路徑優先器的典型應用電路