0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ESP32學(xué)習(xí)筆記:串口

CHANBAEK ? 來源:跳動的字節(jié) ? 作者:曉宇 ? 2023-07-13 17:09 ? 次閱讀

今天我們來玩兒串口。

概述

ESP32 芯片有3 個UART 接口,UART0,UART1,UART2,支持異步通信和 IrDA,通信速度最高可達(dá) 5Mbps,3 個接口可以被 DMACPU 直接訪問,3 個串口帶發(fā)送接收 FIFO,共享 1024*8bit 的 RAM,通過串口,我們可以非常方便的跟其它外設(shè)進(jìn)行通信或者打印數(shù)據(jù)。

硬件

圖片

上圖是硬件參考設(shè)計,我把默認(rèn)的串口標(biāo)注出來了,我們可以在Arduino的庫中看到默認(rèn)的引腳,如下圖:

圖片

圖片

UART0 引腳直接在函數(shù)里面定義了,UART1、UART2使用宏定義,大家還記得我們在GPIO章節(jié)中說的嗎,ESP32有GPIO矩陣,外設(shè)都可以隨意映射到絕大部分的引腳,比如我們想把UART2的引腳改變到GPIO26 GPIO27這兩個上,我們直接調(diào)用相關(guān)函數(shù)就行了,這些都是可以實現(xiàn)的,硬件上非常靈活。

U0TXD 線上需串聯(lián) 499 ? 電阻用于抑制 80 MHz 諧波。ESP32 UART 串口電路如下圖所示:

圖片

這里還需要注意下,UART1的默認(rèn)引腳為GPIO9,、GPIO10,這兩個接口一般用于連接外部Flash,程序中默認(rèn)使用這兩個引腳的,所以我們在用的時候一定記得改到別的IO口。

軟件

關(guān)于串口的一些概念,包括原理,波特率,停止位,奇偶校驗,流控等概念,這些概念非?;A(chǔ),這里就不展開篇幅說了,需要的小伙伴自行了解,不同芯片,原理都是一樣的。

我們講一下基礎(chǔ)的使用:

首先我們需要在setup()中對串口進(jìn)行初始化,非常簡單,就一行代碼搞定:

Serial.begin(115200);

這里默認(rèn)是UART0的,將UART0波特率初始化為115200,其它參數(shù)都是默認(rèn)的,如果我們想將UART0的TX RX改一下呢,我們看下面:

Serial.begin(115200,SERIAL_8N1,26,27);

通過上面的函數(shù),我們就把RX改到了26,TX改到了27,第一個參數(shù)為波特率設(shè)置,如果輸入0就會自動監(jiān)測波特率,第二個為串口配置參數(shù),SERIAL_8N1為8位數(shù)據(jù)位,無校驗位,1位停止位的意思,還有其它參數(shù),大家可以自行到源碼中看看,加深印象。

看到這里才體會到GPIO矩陣的妙處,硬件設(shè)計大大的簡化??!

關(guān)于串口的函數(shù),我們這里介紹幾個常用的,完整的可以在HardwareSerial類中看到。

void 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); //串口初始化
void end();//失能串口
void updateBaudRate(unsigned long baud);//重新設(shè)置波特率
int available(void);//返回串口接收緩沖區(qū)中的數(shù)據(jù)
int read(void);//返回串口接收緩沖區(qū)的一個字節(jié)的數(shù)據(jù),之后將緩沖區(qū)中的本字節(jié)刪除
void flush(void);//等待串口收發(fā)數(shù)據(jù)完畢
size_t write(uint8_t);//寫數(shù)據(jù)到TX緩沖區(qū)
size_t setRxBufferSize(size_t);//設(shè)置接收緩沖區(qū)的大小

這里只是簡單展示幾個函數(shù),具體的用法有不懂的,或者想了解全部函數(shù)的,可以在arduino-esp32中打開具體的庫看用法,只有這樣,大家才能深刻了解,老宇哥這里只是帶大家進(jìn)門。

庫函數(shù)中有標(biāo)準(zhǔn)輸入輸出函數(shù),所以打印函數(shù)必不可少的了,我們常用的打印函數(shù)如下:

Serial.print("芯片之家!"); //打印數(shù)據(jù)
Serial.println("This is a uart0 demo!"); //打印并換行

當(dāng)然,也可以各種格式化打印,大家可以自行嘗試!

Serial.println(data) //從串行端口輸出數(shù)據(jù),跟隨一個回車(ASCII 13, 或 'r')和一個換行符(ASCII 10, 或 'n')。這個函數(shù)所取得的值與 Serial.print()一樣。
Serial.println(b) //以十進(jìn)制形式輸出b的ASCII編碼值,并同時跟隨一個回車和換行符。
Serial.println(b, DEC)// 以十進(jìn)制形式輸出b的ASCII編碼值,并同時跟隨一個回車和換行符。
Serial.println(b, HEX) //以十六進(jìn)數(shù)據(jù)形式輸出b的ASCII編碼值,并同時跟隨一個回車和換行符。
Serial.println(b, OCT)//以八進(jìn)數(shù)據(jù)形式輸出b的ASCII編碼值,并同時跟隨一個回車和換行符。
Serial.println(b, BIN)//以二進(jìn)數(shù)據(jù)形式輸出b的ASCII編碼值,并同時跟隨一個回車和換行符。
Serial.print(b, BYTE)//以單個字節(jié)輸出b,并同時跟隨一個回車和換行符。
Serial.println(str)//如果 str是一個字符串或數(shù)組,輸出整個 str的 ASCII編碼字符串。
Serial.println()//僅輸出一個回車和換行符。

完整程序1:

void setup()
{
  Serial.begin(115200);
}
 
void loop()
{
  Serial.print("芯片之家!"); 
  Serial.println("This is a uart0 demo!"); 
  delay(1000);
}

圖片

完整程序2:

int recData; //接收的數(shù)據(jù)
 
void setup() {
  Serial.begin(115200); 
}
 
void loop() {
  // 收到什么發(fā)什么數(shù)據(jù)
  if (Serial.available() > 0) {
    // 讀取一個字節(jié)
    recData = Serial.read();
    Serial.print("received: ");
    Serial.println(recData,HEX);
  }
}

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • fifo
    +關(guān)注

    關(guān)注

    3

    文章

    389

    瀏覽量

    43768
  • 串口
    +關(guān)注

    關(guān)注

    14

    文章

    1557

    瀏覽量

    76724
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1242

    瀏覽量

    101535
  • Arduino
    +關(guān)注

    關(guān)注

    188

    文章

    6473

    瀏覽量

    187423
  • ESP32
    +關(guān)注

    關(guān)注

    18

    文章

    971

    瀏覽量

    17410
收藏 人收藏

    評論

    相關(guān)推薦

    ESP32單片機(jī)學(xué)習(xí)筆記

    ESP32 單片機(jī)學(xué)習(xí)筆記 - 03 - MCPWM脈沖輸出/PCNT脈沖計數(shù)前言,繼續(xù)上一篇的內(nèi)容。因為上一篇剛好實驗了iic和spi,形成一對。接下來講pwm另起一篇。一、電機(jī)PWM輸出
    發(fā)表于 08-23 08:47

    ESP32ESP-IDF學(xué)習(xí)筆記

    ESP32ESP-IDF 學(xué)習(xí)筆記(六)【I2C數(shù)據(jù)總線(I2C)】文章目錄ESP32ESP
    發(fā)表于 02-22 07:30

    ESP32 開發(fā)筆記(四)LVGL控件學(xué)習(xí) Window 窗口控件 X

    ESP32 開發(fā)筆記(四)LVGL控件學(xué)習(xí) Window 窗口控件 X
    發(fā)表于 11-14 09:06 ?6次下載
    <b class='flag-5'>ESP32</b> 開發(fā)<b class='flag-5'>筆記</b>(四)LVGL控件<b class='flag-5'>學(xué)習(xí)</b> Window 窗口控件 X

    ESP32ESP-IDF 教學(xué)(九)—— 串口通信(UART)

    ESP32ESP-IDF 教學(xué)(九)—— 串口通信(UART)文章目錄ESP32ESP-IDF 教學(xué)(九)——
    發(fā)表于 11-26 13:21 ?44次下載
    <b class='flag-5'>ESP32</b> 之 <b class='flag-5'>ESP</b>-IDF 教學(xué)(九)—— <b class='flag-5'>串口</b>通信(UART)

    [ESP32]學(xué)習(xí)筆記02

    [ESP32學(xué)習(xí)筆記02]使用ViusalStudio2017開發(fā)ESP32、按鍵輸入檢測前言一、安裝Visual Studio 2017二、配置開發(fā)環(huán)境1.安裝ViusalGDB2.
    發(fā)表于 12-03 17:36 ?23次下載
    [<b class='flag-5'>ESP32</b>]<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>02

    ESP32學(xué)習(xí)記錄<三>串口通信

    ESP32學(xué)習(xí)記錄串口通信文章目錄ESP32學(xué)習(xí)記錄串口通信前言一、通過
    發(fā)表于 12-20 19:34 ?17次下載
    <b class='flag-5'>ESP32</b><b class='flag-5'>學(xué)習(xí)</b>記錄<三><b class='flag-5'>串口</b>通信

    [ESP32]學(xué)習(xí)筆記04

    Analog-to-Digital Converter(模數(shù)轉(zhuǎn)換器)的使用今天我們學(xué)習(xí)ESP32提供的ADC外設(shè)的使用,ESP32的每個ADC單元都支持兩種模式,單次讀取和連續(xù)讀取(DMA),本次
    發(fā)表于 12-22 19:02 ?9次下載
    [<b class='flag-5'>ESP32</b>]<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>04

    SPI主線協(xié)議——ESP32學(xué)習(xí)筆記

    目錄SPI主線協(xié)議——ESP32學(xué)習(xí)筆記零、前言一、什么是SPI?二、通信過程?三、極性和相位四、總結(jié)SPI主線協(xié)議——ESP32學(xué)習(xí)
    發(fā)表于 12-22 19:23 ?18次下載
    SPI主線協(xié)議——<b class='flag-5'>ESP32</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>

    ESP32 單片機(jī)學(xué)習(xí)筆記 - 04 - ADC和定時器

    ESP32 單片機(jī)學(xué)習(xí)筆記 - 04 - ADC和定時器一、模擬數(shù)字轉(zhuǎn)換器 ADC編程指南:Analog to Digital Converter。數(shù)據(jù)手冊: ESP32 技術(shù)參考手冊
    發(fā)表于 01-17 13:18 ?11次下載
    <b class='flag-5'>ESP32</b> 單片機(jī)<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b> - 04 - ADC和定時器

    ESP32芯片模組機(jī)器學(xué)習(xí)算法運行的應(yīng)用

    強(qiáng)大的機(jī)器學(xué)習(xí)算法。 ESP32集天線開關(guān)、射頻巴倫、功率放大器、低噪聲放大器、濾波器以及電源管理模塊于一體,占用較小的PCB空間,即可最大化滿足實際應(yīng)用多樣的功能需求。 使用EdgeImpulse在ESP32上運行機(jī)器
    發(fā)表于 03-15 17:23 ?1278次閱讀

    ESP32上的深度強(qiáng)化學(xué)習(xí)

    電子發(fā)燒友網(wǎng)站提供《ESP32上的深度強(qiáng)化學(xué)習(xí).zip》資料免費下載
    發(fā)表于 12-27 10:31 ?0次下載
    <b class='flag-5'>ESP32</b>上的深度強(qiáng)化<b class='flag-5'>學(xué)習(xí)</b>

    Arduino Uno與ESP32串口通信

    電子發(fā)燒友網(wǎng)站提供《Arduino Uno與ESP32串口通信.zip》資料免費下載
    發(fā)表于 02-03 14:11 ?8次下載
    Arduino Uno與<b class='flag-5'>ESP32</b><b class='flag-5'>串口</b>通信

    ESP32學(xué)習(xí)筆記:雙核

    今天我們來說說ESP32 for Arduino 的雙核。
    的頭像 發(fā)表于 07-15 16:16 ?5178次閱讀
    <b class='flag-5'>ESP32</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>:雙核

    ESP32學(xué)習(xí)筆記:WiFi

    今天我們來說說ESP32 的WiFi。
    的頭像 發(fā)表于 07-15 16:20 ?4098次閱讀
    <b class='flag-5'>ESP32</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>:WiFi

    esp32s3使用多串口

    esp32s3使用多串口 我按照別人博客中設(shè)置串口2,串口打印有問題,因為沒有看到esp32s3 多串口
    的頭像 發(fā)表于 11-06 11:29 ?5484次閱讀
    <b class='flag-5'>esp32</b>s3使用多<b class='flag-5'>串口</b>