- 前言 -
開發(fā)中經(jīng)常用到串口通訊,串即串行,顧名思義,是指數(shù)據(jù)在一根數(shù)據(jù)線上按照二進制的數(shù)位,從低到高位一位一位的傳輸。單片機中的串口有UART,USART。
UART/USART 在許多 DIY 電子項目中用于將 GPS 模塊、藍牙模塊、 RFID 讀卡器模塊等連接到Raspberry Pi、Arduino 或其他微控制器。
- UART -
UART介紹:
我們今天要介紹的UART,全稱Universal Asynchronous
Receiver/Transmitter,通用異步收發(fā)傳輸器。使用TTL電平信號,和電腦的COM口(遵循RS-232)不同。它們之間不能直接通訊,需要在之間加入轉換器(如MAX232)。
Tips:
采用二進制來表示數(shù)據(jù)時:
TTL(晶體管-晶體管邏輯電平)電平信號規(guī)定,+5V等價于邏輯“1”,0V等價于邏輯“0”。
RS-232規(guī)定邏輯“1”的電平為-5V~-15 V,邏輯“0”的電平為+5 V~+15 V
UART工作原理:
和其它串口一樣,數(shù)據(jù)按照二進制從低位到高位一位一位的傳輸,能將要傳輸?shù)臄?shù)據(jù)在串行通信與并行通信之間加以轉換,能夠靈活地與外部設備進行全雙工數(shù)據(jù)交換。例如要傳輸一個字節(jié)的數(shù)據(jù)10001110,它是從低位0開始,一位一位的傳輸過去。
在 UART 通信中,兩個 UART 直接相互通信。發(fā)送端將來自控制設備(如 CPU)的并行數(shù)據(jù)轉換為串行形式,接著將其串行傳輸?shù)浇邮斩?,然后接收端將串行?shù)據(jù)轉換回并行數(shù)據(jù)以供接收設備使用。
數(shù)據(jù)從一個UART的發(fā)送引腳(Tx) 流向另一個UART的接收(Rx) 引腳:
UART通訊分類:
單工:UART只用Tx或Rx其中一根線進行通訊,也就是只作接收或發(fā)送;
半雙工:UART在同一時間,只用作發(fā)送或接收;
全雙工:UART在發(fā)送的同時,也可以接收;
UART波特率:
UART的波特率是指每秒傳輸?shù)亩M制位數(shù)(單位bps),比如9600bps,意思就是每秒鐘可以傳輸9600個位(bit)。
例如:設字符傳輸?shù)乃俾蕿?20字符/秒,而每1個字符為10位(bit),那么傳送的波特率為:10位/字符 * 120 字符/秒 = 1200 /秒 = 1200bps。那么每1位二進制位(bit)的傳送時間:
T = 1/1200 = 0.833ms
UART要求發(fā)送與接收兩個UART的波特率配置相同。如果發(fā)送與接收波特率不同,相差很大,接收端采樣點跨過多個電平,造成接收丟失,或者造成波特率不匹配,接收失敗,如下圖:
常見的波特率有9600、115200、128000、256000等。
- 通訊 -
通訊過程:
UART屬于異步傳輸數(shù)據(jù),這意味著沒有時鐘信號將發(fā)送的位輸出與接收的位采樣同步,也就是發(fā)送與接收使用各自的時鐘。發(fā)送端將開始和停止位添加到傳輸?shù)臄?shù)據(jù)幀中,通過數(shù)據(jù)幀中定義的開始位和結束位,接收端知道何時開始讀取這些位。
每個數(shù)據(jù)幀包含 1 個起始位、5 到 9 個數(shù)據(jù)位(取決于 UART的設置,如果有奇偶校驗位是5到8,沒有則是5到9)、一個可選的奇偶校驗位和 1 個或 2 個停止位:
起始位:UART 數(shù)據(jù)傳輸線在不傳輸數(shù)據(jù)時通常保持在高電平。要開始發(fā)送數(shù)據(jù)時,發(fā)送端UART先在一個時鐘周期內(nèi)將傳輸線從高電平拉到低電平。當接收端UART 檢測到從高到低的電壓轉換時,它開始以設置好的波特率的頻率讀取數(shù)據(jù)幀中的位。
數(shù)據(jù):數(shù)據(jù)幀包含正在傳輸?shù)膶嶋H數(shù)據(jù)。如果使用奇偶校驗位,它可以是 5 位到 8 位。如果不使用奇偶校驗位,則數(shù)據(jù)幀可以是 9 位。在大多數(shù)情況下,首先發(fā)送的數(shù)據(jù)是最低有效位。
校驗:奇偶校驗位是接收端UART 判斷數(shù)據(jù)在傳輸過程中是否發(fā)生變化的一種方式。位會因電磁輻射、不匹配的波特率或長距離數(shù)據(jù)傳輸而發(fā)生改變。接收端 UART 讀取數(shù)據(jù)幀后,檢查數(shù)據(jù)部分值為1的個數(shù)是奇數(shù)還是偶數(shù)。當奇偶校驗位與數(shù)據(jù)匹配時,UART 知道傳輸沒有錯誤。
停止:發(fā)送端UART 將數(shù)據(jù)傳輸線從低電平拉到高電平持續(xù)至少兩個位的時間來表示整個數(shù)據(jù)包的傳輸已經(jīng)結束。
發(fā)送接收過程:
1.UART 從數(shù)據(jù)總線并行接收數(shù)據(jù):
2.發(fā)送 UART 將起始位、奇偶校驗位和停止位添加到數(shù)據(jù)幀:
3.整個數(shù)據(jù)包從發(fā)送 UART 串行發(fā)送到接收 UART。接收 UART 以預配置的波特率對數(shù)據(jù)線進行采樣:
4.接收 UART 丟棄數(shù)據(jù)幀中的起始位、奇偶校驗位和停止位:
5.接收端 UART 將串行數(shù)據(jù)轉換回并行,并將其傳輸?shù)浇邮斩说臄?shù)據(jù)總線:
-
微控制器
+關注
關注
48文章
7458瀏覽量
150859 -
單片機
+關注
關注
6030文章
44491瀏覽量
632007 -
串口通訊
+關注
關注
1文章
258瀏覽量
24813 -
UART接口
+關注
關注
0文章
124瀏覽量
15256 -
RFID讀卡器
+關注
關注
0文章
57瀏覽量
11334
發(fā)布評論請先 登錄
相關推薦
評論