在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Arduino常用的三種通信協議 1

jf_78858299 ? 來源:愛上Arduino ? 作者:小B ? 2023-02-13 10:30 ? 次閱讀

UARTI2C和SPI是嵌入式世界里最常見的三種通信協議。在閱讀教程,或者購買模塊時常常看見“這個模塊是用I2C協議驅動的”, “兩個設備之間數據走SPI”諸如此類的描述,很多新手覺得是什么高階的知識就一知半解得略過去略了。今天小編簡略地為大家介紹一下這三種協議,以及它們各自的優缺點。

什么是通信協議

白話點說,通信協議就是通信時候雙方約定的規則。打個類比,就像你跟另外一個人交流,你們之間需要一種交流的約定,就是語言。要么都說中文,要么都說英文。通信協議就類似于硬件之間交流的語言。

串行通信和并行通信

在硬件通信里,一般有兩種通信方式:串行通信(Serial Communication)和并行通信(Parallel Communication)。這兩種通信方式的區別從字面理解也很簡單:串行就是數據一個接一個的發送;并行就是所有數據都同時發出。

圖片

但由于并行通信在線路成本和同步困難方面的問題使其在實際應用上面遠不如串口通信來得廣泛。本文介紹的UART, I2C和SPI三種通信協議都屬于串口通信。

單工,半雙工,雙工

根據串行數據的傳輸方向,我們可以將通信分為單工,半雙工,雙工。

  • 單工:

    是指數據傳輸僅能沿一個方向,不能實現反向傳輸。

  • 半雙工:

    是指數據傳輸可以沿兩個方向,但不能同時進行傳輸。

  • 全雙工:

    是指數據可以同時進行雙向傳輸。

圖片

同步通信和異步通信

根據串行數據傳輸方式,我們又可以分為:同步通信和異步通信。

圖片

同步通信是指發送端和接收端必須使用同一時鐘,是一種連續傳送數據的通信方式。由于發送和接收的雙方都采用同一時鐘,這樣接收方就可以通過時鐘信號來確定每個信息位。

異步通信不需要雙方使用同一時鐘,并且它是一種不連續的傳輸通信方式,一次通信只能傳輸一個字符數據(字符幀)。而字符幀之間的間隙可以是任意的。但由于不知道對方什么時候發送數據,所以發送方要在數據的開始后結束都要加一些輔助的信息,比如開始要有起始位,結束要有結束位等。

同步通信的通信效率比異步通信高,可以傳輸較大的數據量但對于時鐘同步要求比較高,而異步通信不需要同步時鐘,通信實現簡單,設備相對簡單,但是傳輸速率不高,某些通訊中還需要雙方約定數據的傳輸速率,以便更好地同步。

了解了上面的幾個基本概念,我們再來按個看一看UART、I2C和SPI三種協議。

圖片

UART協議

UART的全稱叫 Universal Asynchronous Reception and Transmission通用異步收發。從名字我們就可以知道,UART是異步串行通信的。利用UART協議傳輸數據時,需要兩個數據引腳,一個用于傳輸數據的TX,另一個用于接收的RX。

Arduino板上默認的RX和TX引腳分別是Pin0和Pin1。UART硬件層和軟件層的功能都是Arduino集成的,一般我們不需要從底層操作數據。一個UART口(一組RX和TX)只能連接一個UART設備進行通信,我們需要這樣就接線:

圖片

注意,一個設備的TX接的是另一設備的RX,反之RX接TX,最后需要將兩個設備共地,共地是讓它們的參考電壓一致。

下面,我們用兩塊Arduino實際實踐一下。如圖連接兩個Arduino:

圖片

我們在Arduino A里燒錄以下代碼:

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}
void loop() {
  // put your main code here, to run repeatedly:
    char s[]="I am Arduino A";//每隔1s發送一次字符數組s
    Serial.print(s);
    delay(1000);
}

再在Arduino B里燒錄以下代碼:

String a=""; //定義字符串,接收數據


void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}
void loop() {
   while(Serial.available())//當發現緩存中有數據時,將數據送至字符數組a中
   {
     a+=char(Serial.read());
     delay(3);
   }
   if (a.length() > 0){
      Serial.println(a)
      a = ""
   }
}

這樣就A就通過UART向B發送了“I am Arduino A”消息,B接收到以后輸出。當然你可以修改A的代碼實現雙向數據傳輸,這里我們就點到即止了。

UART是最常見的通信協議之一,它可以實現全雙工傳輸,但它的傳輸速度比較慢,而且只能支持一對一的設備。

I2C協議

I2C是Philips公司在1980年代發明的一種協議,全稱是Inter-Integrated Circuit。I2C最常被應用于模塊或者傳感器之間的通信,因為I2C基于二根傳輸線,同步通信的半雙工協議,而且協議也非常簡單可靠。I2C使用兩根傳輸線實現一個主設備與多個從設備,甚至是多個主設備與對應從設備之間的通信。 這兩根通訊線一根為控制時鐘線,稱之為SCL,用于同步設備間的數據傳輸時鐘; 另一根為數據線,稱之為SDA,用于攜帶數據。理論上,一條I2C總線上能支持掛載128臺設備。

圖片

Arduino UNO的I2C引腳是A4(SDA), A5(SDL)。Arduino對I2C協議也進行了庫封裝:

https://www.arduino.cc/en/Reference/Wire
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • SPI
    SPI
    +關注

    關注

    17

    文章

    1708

    瀏覽量

    91720
  • I2C
    I2C
    +關注

    關注

    28

    文章

    1489

    瀏覽量

    123961
  • uart
    +關注

    關注

    22

    文章

    1239

    瀏覽量

    101469
收藏 人收藏

    評論

    相關推薦

    局域網通信協議詳解及選擇原則

    通信協議實際上是一組規定和約定的集合,我們常用的計算機就離不開。本文將介紹局域網中的三種通信協議以及選擇網絡通信協議的原則。
    發表于 01-06 15:45 ?5739次閱讀

    常用的串口通信協議之SPI協議簡析

    SPI(serial peripheral interface)也是一同步串行通信協議。這里為啥要說“也”呢,回想上一篇介紹的PS/2不也是同步串行通信協議嗎。SPI由一個主設備和 一個或多個從
    發表于 07-07 09:33 ?4350次閱讀

    淺談Modbus通信協議

    Modbus通信協議是一工業現場總線協議標準,常用的Modbus協議有以下三種類型:Modbu
    發表于 09-20 15:56 ?4806次閱讀
    淺談Modbus<b class='flag-5'>通信協議</b>

    常用通信協議有哪些

    ;      TCP/IP是一可選擇路由的通信協議。它具有很強的靈活性,可支持任意規模的網絡
    發表于 06-03 15:21

    智能插座常用的兩通信協議是什么?

    智能插座常用的兩通信協議是什么?
    發表于 09-26 09:18

    單片機系統中最常用三種通信協議

    UART、 I2C 和 SPI 是單片機系統中最常用三種通信協議1、初步介紹SPI 是一高速的、全雙工、同步
    發表于 11-18 09:22

    嵌入式領域中常用的5通信協議是什么

    文章目錄嵌入式領域中常用的5通信協議嵌入式領域中常用的5通信協議串口
    發表于 12-14 06:22

    三種常見嵌入式設備通信協議是什么?

    三種常見嵌入式設備通信協議是什么?
    發表于 12-23 08:17

    單片機系統中最常用通信協議有幾種

    )、MOSI(主機輸出從機輸入Master Output/Slave Input)和MISO(主機輸入從機輸出Master Input/Slave Output)。單片機系統中最常用通信協議三種,分...
    發表于 02-17 07:43

    單片機系統中最常用三種通信協議是什么?

    單片機系統中最常用三種通信協議是什么?
    發表于 02-17 06:03

    串口通信協議的相關資料分享

    的建立、建立STM32與PC之間的通信基礎1、串口助手的使用2、效果呈現一、串口通信協議1、UART簡介嵌入式開發中,UART串口
    發表于 02-22 07:16

    STM32的三種串口通信協議介紹

    本文首先介紹了STM32串口硬件電路及串口編程,其次介紹了STM32的三種串口通信協議,最后介紹了STM32串口通信程序設計要點。
    發表于 05-25 09:33 ?3.8w次閱讀
    STM32的<b class='flag-5'>三種</b>串口<b class='flag-5'>通信協議</b>介紹

    Arduino UNO上的SPI通信協議

    電子發燒友網站提供《Arduino UNO上的SPI通信協議.zip》資料免費下載
    發表于 11-09 10:24 ?0次下載
    <b class='flag-5'>Arduino</b> UNO上的SPI<b class='flag-5'>通信協議</b>

    Arduino常用三種通信協議 2

    UART、I2C和SPI是嵌入式世界里最常見的三種通信協議。在閱讀教程,或者購買模塊時常常看見“這個模塊是用I2C協議驅動的”, “兩個設備之間數據走SPI”諸如此類的描述,很多新手覺得是什么高階的知識就一知半解得略過去略了。今
    的頭像 發表于 02-13 10:31 ?2905次閱讀
    <b class='flag-5'>Arduino</b><b class='flag-5'>常用</b>的<b class='flag-5'>三種</b><b class='flag-5'>通信協議</b> 2

    Arduino通信協議教程

    今天,我們將討論arduino通信協議的有關內容。設備往往需要相互通信以中繼所處環境相關信息,顯示其狀態變化,或請求執行輔助操作。
    的頭像 發表于 02-23 10:40 ?3232次閱讀
    <b class='flag-5'>Arduino</b><b class='flag-5'>通信協議</b>教程
    主站蜘蛛池模板: 日本加勒比在线播放| 丝袜美女被| 人人乳乳香蕉大免费| 午夜啪| 夜夜爱成人免费网站| 夜夜爽天天爽| 天天激情| 久久伊人影视| 综合五月天婷婷丁香| 久久精品韩国三级| 好看的一级毛片| 复古毛片| 天天干天天澡| 国产资源网| 可以在线看黄的网站| 狠狠插天天干| 久久久久免费| bbbb毛片免费看| 簧片免费视频| 欧美人与性另类| 日本欧美一区二区三区视频| 99久久精品费精品国产一区二| 婷婷天堂| 欧美一级日韩一级亚洲一级| 国产一级特黄全黄毛片| 五月花亚洲| 一本到在线观看视频不卡| 天天色天天干天天| 国产免费一级在线观看| 一级a级国产不卡毛片| h网站国产| av福利网址网站| 四虎最新在线| 久久青草91免费观看| 久久综合精品视频| 成年毛片| 久久97精品久久久久久久看片| 91拍拍在线观看| 亚洲人成伊人成综合网久久| 欧美人另类zooz| 仙踪林欧美另类视频|