一、UART定義
UART 通用異步收發傳輸器(Universal Asynchronous Receiver/Transmitter),通常稱作UART,是一種通用的串行異步全雙工數據收發傳輸器(總線)。
二、UART作用
UART的作用是:把“要傳輸的數據”在串行通信與並行通信之間轉換。在嵌入式領域,作為把並行信號轉成串行信號的硬件設備,UART通常被集成於MCU內部。
三、UART與USART
UART:universal asynchronous receiver and transmitter 通用異步收/發器,即串行異步全雙工收發器。
USART:universal synchronous asynchronous receiver and transmitter 通用同步/異步收/發器,即串行異步/同步全雙工收發器。
從名字上可以看出,USART在UART基礎上增加了同步功能,即USART是UART的增強型。其實當我們使用USART在異步通信的時候,它與UART沒有什么區別,但是用在同步通信的時候,區別就很明顯了。大家都知道同步通信需要時鍾來觸發數據傳輸,也就是說USART相對UART的區別之一就是能提供主動時鍾。
UART管腳定義:TX、RX、GND; USART管腳定義:TX、RX、GND、SCLK。
四、UART通信協議
1、波特率:此參數容易和比特率混淆,其實他們是由區別的。具體可以百度更清楚。但是我認為uart中的波特率就可以認為是比特率,即每秒傳輸的位數(bit)。一般選波特率都會有9600,19200,115200等選項。其實意思就是每秒傳輸這么多個比特位數(bit)。
2、起始位:先發出一個邏輯”0”的信號,表示傳輸數據的開始。
3、數據位:可以選擇的值有5,6,7,8這四個值,可以傳輸這么多個值為0或者1的bit位。這個參數最好為8,因為如果此值為其他的值時當你傳輸的是ASCII值時一般解析肯定會出問題。理由很簡單,一個ASCII字符值為8位,如果一幀的數據位為7,那么還有一位就是不確定的值,這樣就會出錯。
4、校驗位:數據位加上這一位后,使得“1”的位數應為偶數(偶校驗)或奇數(奇校驗),以此來校驗數據傳送的正確性。就比如傳輸“A”(01000001)為例。
(1)、當為奇數校驗:”A”字符的8個bit位中有兩個1,那么奇偶校驗位為1才能滿足1的個數為奇數(奇校驗)。圖-1的波形就是這種情況。
(2)、當為偶數校驗:”A”字符的8個bit位中有兩個1,那么奇偶校驗位為0才能滿足1的個數為偶數(偶校驗)。
(3)、此位還可以去除,即不需要奇偶校驗位。
5、停止位:它是一幀數據的結束標志。可以是1bit、1.5bit、2bit的空閑電平。可能大家會覺得很奇怪,怎么會有1.5位~沒錯,確實有的。所以我在生產此uart信號時用兩個波形點來表示一個bit。這個可以不必深究。。。
6、空閑位:沒有數據傳輸時線路上的電平狀態。為邏輯1。
7、傳輸方向:即數據是從高位(MSB)開始傳輸還是從低位(LSB)開始傳輸。比如傳輸“A”如果是MSB那么就是01000001(如圖-2),如果是LSB那么就是10000010(如下圖的圖-4)
8、uart傳輸數據順序:剛開始傳輸一個起始位,接着傳輸數據位,接着傳輸校驗位(可不需要此位),最后傳輸停止位。這樣一幀的數據就傳輸完了。接下來接着像這樣一直傳送。在這里還要說一個參數。
9、幀間隔:即傳送數據的幀與幀之間的間隔大小,可以以位為計量也可以用時間(知道波特率那么位數和時間可以換算)。比如傳送”A”完后,這為一幀數據,再傳”B”,那么A與B之間的間隔即為幀間隔。
圖-1
圖-2
上圖是uart協議傳輸一個”A”字符通過示波器的uart解碼而得到的波形示意圖。根據此圖來介紹一下uart的一些基本參數。
圖-3
圖-4
上兩圖和下兩圖傳送的數據和波特率都是一樣的,但是有幾個參數是故意設置反了從而形成對比。有助於更深入的理解UART。