色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

uart通信的詳細講解

億佰特物聯網應用專家 ? 2023-09-22 08:22 ? 次閱讀


UART(Universal Asynchronous Receiver/Transmitter,通用異步收發器)是一種常用的串行通信協議,廣泛應用于單片機或各種嵌入式設備之間的通信。本文將詳細介紹UART通信的基本原理、工作模式、波特率計算以及常見使用方式,幫助有一定單片機開發能力的人群更好地理解和應用UART通信。

01

UART通信的異步通信機制

UART通信是一種異步串行通信方式,其基本原理是通過數據線上傳輸二進制數據位。UART通信系統主要由發送端和接收端兩部分組成,它們之間通過數據線進行數據傳輸。發送端將待發送的數據轉換為并行信號,然后通過驅動電路將并行信號轉換為串行信號,并通過發送電路將串行信號發送到數據線上。接收端則通過接收電路將數據線上的信號還原為并行信號,再通過解碼電路將并行信號轉換為原始數據位。

203bbdce-58de-11ee-9788-92fbcf53809c.jpg


UART通信采用異步通信方式,即發送端和接收端之間通過數據線進行數據傳輸。在異步通信中,發送端和接收端不需要同時處于激活狀態,而是通過起始位和停止位來標識數據幀的開始和結束。具體來說,當發送端產生起始位后,發送一個數據位;然后等待接收端的起始位,如果接收到起始位,則繼續發送下一個數據位;如果沒有接收到起始位,則認為數據幀傳輸失敗。同樣,當接收端產生停止位后,發送一個校驗位;然后等待發送端的停止位,如果接收到停止位,則認為數據幀傳輸成功。

204f10c2-58de-11ee-9788-92fbcf53809c.png

02

UART的波特率

波特率表示單位時間內通過線路傳輸的二進制數據的位數,通常用bps(bits per second)表示。例如,如果波特率為9600bps,則每秒鐘可以傳輸9600個比特位的數據。


串口傳輸數據的波特率是單片機的時鐘系統來產生的,因此它和單片機的系統時鐘存在算式關系。

波特率= (16 * 時鐘頻率) / (32 * 采樣時間) + (1 * 時鐘頻率) / (32 * 采樣時間) - (1 * 時鐘頻率) / (64* 采樣時間)

其中,采樣時間指從上一次起始位到本次起始位之間的時間間隔。例如,如果采樣時間為10ns,則波特率為9600bps。


常見的波特率有2400、4800、9600、19200、38400、57600、115200……它們都可是2400的整數倍,因此不同的波特率可以通過分頻器來產生。現在的單片機雖然都有著不同的頻率,常見的有32MHz、48MHz和144MHz,通常它們都會有一個外部系統時鐘為單片機的外圍設備提供基礎時鐘頻率(如1MHz),UART產生波特率也是從該時鐘產生時鐘信號。


需要注意的是,在實際使用中,時鐘頻率可能會受到一些因素的影響,如晶振漂移、電源噪聲等。因此,為了保證數據傳輸的正確性和可靠性,建議在設計UART通信系統時使用外部晶振或時鐘發生器,并對其進行校準和補償。

03

停止位和奇偶校驗

在UART異步通信中,停止位用于表示數據幀的結束。停止位可以是1個或2個比特位。當停止位為1個比特位時,每個數據字節的后面都添加一個額外的時間間隔,以補償時鐘抖動和其他因素引起的誤差。例如,如果波特率為9600bps,則每個字節的時間間隔為4ms,因此每個停止位的時間間隔為4ms / 8 = 0.5ms。

206cc13a-58de-11ee-9788-92fbcf53809c.png

當停止位為2個比特位時,每個數據字節的后面都添加兩個額外的時間間隔,即每個字節的時間間隔為4ms / (8 + 4) = 0.3125ms。這種模式適用于需要更高精度的數據傳輸場景。


奇偶校驗是一種常用的錯誤檢測方法,可以檢測數據傳輸過程中的錯誤和丟失。在UART通信中,可以通過設置奇偶校驗位來提高數據傳輸的正確性和可靠性。


需要注意的是,奇偶校驗位只能檢測數據傳輸過程中的錯誤和丟失,而不能保證數據的完整性和正確性。因此,在使用UART通信時,還需要采取其他措施來確保數據傳輸的正確性和可靠性。

04

UART的輪詢收發和中斷收發

前面我們講過,UART通信就是把一個字節的數據拆分成若干bit位,然后一個bit一個bit的發送。當一個字節的數據被送進UART發送器后,這個字節被轉換成bit位,UART發送這個字節后還要產生停止位,此時UART發送器已經空閑,可以繼續發送下一個字節。通常UART發送器發送完一個字節后會產生一個空閑狀態,輪詢式發送就是等待這個空閑狀態并發送下一個字節。


UART接收也是如此,UART接收器收完一個字節并收到停止位信號時,就會向單片機的UART數據寄存器保存剛收到的數據,并產生一個收到標志位,輪詢該標志位就可以接收到該字節數據。


但是在單片機系統中經常不止UART收發應用,這時就要用到中斷收發。通常單片機的UART收發都有RX收到中斷和TX完畢中斷。中斷發送時,UART發送器是空閑狀態,此時往發送器里面寫入第一個字節,該字節傳輸完畢后產生TX完畢中斷,在TX完畢中斷的服務函數中再填入后續字節并產生下一個中斷,最后直到把需要傳輸的字節都傳完為止。中斷接收時,UART接收器收到字節后會產生RX收到中斷,在RX收到中斷服務函數中讀取收到的字節,每次中斷時都讀取收到的字節。

207f10a6-58de-11ee-9788-92fbcf53809c.png

05

帶數據緩存的UART收發

在很多單片機系統中,都會提供UART Read和UART Write這樣的接口函數。一些高級的單片機甚至還有UART Read Callback和UART Write Callback這樣的回調函數來收發數據。通常很多單片機的數據處理能力相對UART通信來說要快得多,因此像采用上述接口函數的單片機系統都使用了數據緩存來輔助UART收發。常見的UART收發方式有這幾種:


數據隊列(Queue)收發

這種方式適合大多數單片機,只要有中斷就行。使用UART Write發送數據時,數據并不是直接寫入到UART發送器,而是放進了一個環形緩沖區中。然后在UART TX發送完畢中斷服務函數中讀取環形緩沖區并把讀到的字節送入UART發送器,然后等待TX發送完畢中斷服務函數再次執行時送入下一個字節,直到把環形緩沖區的數據送完為止。環形緩沖區通常有一個標記頭和尾的變量,只要頭和尾的變量值不相等就說明緩沖區有數據。使用UART Read接收數據時,也不是直接從UART接收器中獲取數據,而是從環形緩沖區中獲取數據。UART RX收到中斷服務函數中把UART接收器收到的字節送進環形緩沖區,單片機執行UART Read時獲取到的數據是環形緩沖區的數據,這樣可以保證單片機程序不用一直等待UART接收器。


這種設計的優點是可以有效地處理實時數據,避免了數據的丟失。但是,如果Queue的大小設置不當,可能會導致數據的溢出。因此,我們需要根據實際的應用場景來合理地設置Queue的大小。

帶硬件FIFO的UART收發

很多先進的單片機的UART收發用上了硬件FIFO。沒有硬件FIFO的單片機在收發數據時每收發一個字節就要執行一次中斷函數,在高波特率通信時單片機會頻繁進入中斷,從而影響單片機主任務的處理。而硬件FIFO則可以緩解這種矛盾。例如單片機的UART FIFO是16字節,單片機在發送數據時一次最多可以傳輸16字節數據,等16字節數據發送完畢后才產生UART TX發送完畢中斷。接收數據時通常是“半滿”中斷和“超時”中斷,即接收FIFO中的字節數超過8字節,或者接收FIFO不為空但是超過1字節的時間內沒有收到新的字節數據,產生一次UART RX接收中斷。通常帶硬件FIFO的UART會和數據隊列的方式相結合使用,在高波特率通信下傳輸效率更高。

DMA的UART收發

DMA(Direct Memory Access)是一種可以將計算機的某個存儲區域直接映射到內存地址空間的技術,從而實現對內存和其他外設的統一訪問。當UART接收到數據時,數據會被直接寫入到DMA控制的內存區域中,然后觸發中斷。在中斷服務程序中,我們可以從DMA控制的內存區域中取出數據,進行必要的處理,然后再通過UART發送出去。

20895778-58de-11ee-9788-92fbcf53809c.png

DMA傳輸


使用DMA進行UART傳輸對連續多條數據的傳輸幫助特別大,例如前面提到的UART Read Callback和UART Write Callback回調函數的方式。連續發送多條數據流時,可以把數據流放在單片機的多個不同的緩沖區,然后DMA直接指向緩沖區地址,待DMA傳輸完畢后產生UART Write Callback,然后在UART Write Callback中把DMA指向下一個緩沖區地址。接收數據時也可以預約一個接收緩沖區,DMA傳輸的數據傳輸到該緩沖區,傳輸滿了后產生UART Read Callback再指向下一個接收緩沖區,同時可以讓單片機主程序處理已收滿數據的緩沖區的內容。

本文詳細介紹了UART通信的基本原理、波特率計算、工作模式以及常見的使用方式,幫助有一定單片機開發能力的人群更好地理解和應用UART通信。掌握UART通信技術,可以為單片機控制系統的設計和應用帶來很大的便利。

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

    關注

    6039

    文章

    44579

    瀏覽量

    636436
  • 收發器
    +關注

    關注

    10

    文章

    3438

    瀏覽量

    106067
  • 通信
    +關注

    關注

    18

    文章

    6042

    瀏覽量

    136140
  • uart
    +關注

    關注

    22

    文章

    1240

    瀏覽量

    101490
收藏 人收藏

    評論

    相關推薦

    芯片封裝工藝詳細講解

    芯片封裝工藝詳細講解
    發表于 11-29 14:02 ?1次下載

    通信技術:UART串口通信開源代碼實操!

    今天我們分享的是關于UART串口通信示例,歡迎大家探討
    的頭像 發表于 11-05 11:56 ?3102次閱讀
    <b class='flag-5'>通信</b>技術:<b class='flag-5'>UART</b>串口<b class='flag-5'>通信</b>開源代碼實操!

    UART串口通信示例:開啟通信寶藏之門的定位模組LuatOS入門

    今天我們要講解的是UART串口通信示例,關于Air201資產定位模組LuatOS入門,我會從搭建環境、代碼燒錄、示例效果等來細說:
    的頭像 發表于 11-03 19:55 ?959次閱讀
    <b class='flag-5'>UART</b>串口<b class='flag-5'>通信</b>示例:開啟<b class='flag-5'>通信</b>寶藏之門的定位模組LuatOS入門

    UART通信協議介紹和數據傳輸工作流程

    UART是一種通用串行數據總線,用于異步通信。該總線雙向通信,可實現全雙工傳輸和接收。UART通常用來實現與PC之間數據通信,命令和控制信息
    的頭像 發表于 10-24 14:20 ?832次閱讀
    <b class='flag-5'>UART</b><b class='flag-5'>通信</b>協議介紹和數據傳輸工作流程

    uart波特率和傳輸頻率的關系 UART串口的常用波特率為多少

    UART(Universal Asynchronous Receiver/Transmitter)是一種廣泛使用的異步串行通信技術,它允許兩臺設備之間進行雙向數據傳輸。在UART通信
    的頭像 發表于 10-06 16:12 ?3145次閱讀
    <b class='flag-5'>uart</b>波特率和傳輸頻率的關系 <b class='flag-5'>UART</b>串口的常用波特率為多少

    電感技術的講解

    詳細講解電感的原理及計算
    的頭像 發表于 09-06 02:07 ?2240次閱讀
    電感技術的<b class='flag-5'>講解</b>

    UART協議的工作原理和應用場景

    UART(Universal Asynchronous Receiver/Transmitter,通用異步收發傳輸器)協議是一種廣泛使用的串行通信協議,它允許計算機與外部設備之間通過串行接口進行數據傳輸。以下是對UART協議的
    的頭像 發表于 08-25 17:15 ?3362次閱讀

    簡單認識UART通信協議

    模塊等多種設備之間的數據傳輸。以下是對UART通訊協議的詳細簡述,內容將涵蓋其基本原理、工作方式、配置參數、常見應用以及與其他通信協議的比較。
    的頭像 發表于 07-25 18:07 ?1489次閱讀

    如何為UART通信配置TC375?

    我是 AURIX 的初學者,想學習如何配置 TC375 以進行 UART 通信。 但使用 ASCLIN 對我來說似乎很難理解。 還有其他 UART 通信方式嗎?
    發表于 05-31 08:06

    簡單認識UART串行通信協議

    的數據通信,特別是在嵌入式系統、計算機外設以及微控制器等場景中。本文將對UART串行通信協議進行詳細的介紹,包括其基本原理、工作方式、參數設置、錯誤檢測與糾正以及應用實例等方面。
    的頭像 發表于 05-27 16:09 ?2171次閱讀

    UART串口通信實驗及工作原理

    UART通信過程需要設置波特率、數據長度、開始/停止位等參數。波特率決定了發送數據的速度,而數據長度和開始/停止位則用于確保數據的正確傳輸和接收。
    的頭像 發表于 03-21 17:10 ?4036次閱讀
    <b class='flag-5'>UART</b>串口<b class='flag-5'>通信</b>實驗及工作原理

    UART串口通信協議是什么?

    UART (Universal Asynchronous Receiver/Transmitter) 是一種通信接口協議,用于實現串口通信。它是一種簡單的、可靠的、廣泛應用的串口通信
    的頭像 發表于 03-19 17:26 ?1459次閱讀

    淺談UART通信的異步通信機制

    波特率表示每秒鐘傳送的碼元符號的個數,它是對符號傳輸速率的一種度量。在UART通信中,波特率用于描述通信速度,其單位是bps(每秒鐘傳輸的bit的數量)。
    發表于 02-19 16:19 ?913次閱讀
    淺談<b class='flag-5'>UART</b><b class='flag-5'>通信</b>的異步<b class='flag-5'>通信</b>機制

    uart與usart區別 usart可以當uart用嗎

    USART實際上包含了UART的功能,并增加了支持同步通信的能力。在大多數微控制器中,UART通常是USART功能的一部分,USART可以配置為UART模式進行異步
    發表于 01-17 15:46 ?1.9w次閱讀
    <b class='flag-5'>uart</b>與usart區別 usart可以當<b class='flag-5'>uart</b>用嗎

    詳細UART通訊協議分析在這里

    。在19世紀60年代,為了解決計算機和電傳打字機通信,Bell發明了UART協議,將并行輸入信號轉換成串行輸出信號。因為UART簡單實用的特性,其已經成為一種使用非
    的頭像 發表于 01-12 14:15 ?1.7w次閱讀
    最<b class='flag-5'>詳細</b>的<b class='flag-5'>UART</b>通訊協議分析在這里
    主站蜘蛛池模板: 夜夜精品视频一区二区| 国产亚洲精品久久777777| 亚洲字幕在线观看| 在线视频 国产 日韩 欧美| 一区精品在线| 伊人久久精品99热超碰| 91精品欧美一区二区三区| 99久久综合精品免费| 成人在免费观看视频国产| 国产极品白嫩超清在线观看| 国产在线中文字幕| 久久青草免费91线频观看站街| 老子午夜伦不卡电影院| 日韩欧美中文字幕一区| 一本之道高清www在线观看| 99视频久久精品久久| 国产人妻麻豆蜜桃色69| 伦理片qvod| 小sao货ji巴cao死你视频| 2017日日干| 精品国产自在现线拍国语| 免费国产精品视频| 乡村教师电影版| H揉捏娇喘乳叫床NP调教视频| 国产最新精品亚洲2021不卡| 欧美国产一区二区三区激情无套| 亚洲成熟人网站| 处88XXX| 欧美末成年videos丨| 在线观看免费国产成人软件| 国产精品高潮呻吟AV久久96| 免费国产成人高清在线观看视频| 无套日出白浆在线播放| 办公室中文BD| 人人做人人干| qvod在线观看| 秋霞伦理机在线看片| av亚洲色天堂2017| 美女被爽cao免费漫画| 综合人妻久久一区二区精品| 九九九色成人网|