?? 1. 概述
UART, Universal Asynchronous Receiver-Transmitter, 通用異步收發器;
串口:在嵌入式里指的是UART口,常用TTL電平即3.3V或者5.0V;
COM口:在臺式機上常用的口,DB9那種接口,接口協議只有兩種RS232和RS485;
RS232電平即負邏輯電平,定義+5V~+12V為邏輯0,-5V~-12V為邏輯1。
UART口、COM口指的是物理接口形式;
TTL、RS232和RS485指的是電平邏輯標準;
TTL電平和RS232電平轉換專用芯片有MAX232,TTL電平轉USB芯片有CP2102、PL2303、FT230等用USB來擴展串口數量。
?? 2. 硬件結構
與IIC、SPI 等接口一樣,都屬于串行通信接口,但是UART只有數據線收和發,并無時鐘線,故為異步串行通信接口,可以實現全雙工通信;在嵌入式系統中,常用與控制系統與外設通信,包括控制器與控制器,控制器與終端設備。線路簡單,成本低,傳輸距離遠,但傳輸速度慢。
VCC:供電pin,一般是3.3V,在實際使用中一般不接,不影響使用;
GND:接地pin,板內共地時可以不單獨接,板間通信時候必須接上;
RX:接收數據pin;
TX:發送數據pin;? 需要注意TX ?RX的參考系,不要接反了,電平需要兼容;
如果收發是有關聯關系的,很多情況下需要關注流控。
UART CTS/RTS用于硬流控,協調雙方收發,保證數據不丟失。Clear to send??? Request To Send
A---------B
TX --> RX
RX <-- TX
RTS ---> CTS
CTS <--- RTS
芯片A通過UART發送數據,當芯片B拉高RTS時,A就會暫停發送,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 當芯片B拉低RTS時,A又會繼續發送。
比如 WIFI模組與AP的串口連接:
? 3. 通信協議
UART使用的是異步串行通信;以字符為傳輸單位,一位一位的順序輸送;通信中兩個字符間的時間間隔是不固定的 ,然而同一個字符內兩個相鄰位之間的時間間隔是固定的。
數據的傳送速率用波特率來表示,即每秒鐘傳送的二進制位數;
一般選波特率都會有9600,19200,115200等選項。
傳輸時序如下:
起始位:先發一個邏輯0,表示傳輸字符的開始;
依靠檢測起始位來實現發送與接收方的時間自同步的。
數據位:可以是4、5、6、7、8位邏輯0或者1,構成一個字符,如ASCII碼8位數據位,從最低位開始傳送,靠時鐘定位;方向為LSB。
奇偶校驗位:數據位加上這一位后,使得“1”的位數為偶數(偶校驗)或奇數(奇校驗)以此來校驗數據傳送的正確性;
停止位:他是一個字符數據的結束標志,可以是1位、1.5位、2位的高電平。適用于停止位的位數越多,不同時鐘同步的容忍程度越大,數據傳輸率同時也越低。
空閑位:處于邏輯“1”狀態,表示當前線路上沒有數據傳送。
UART傳輸數據的順序:剛開始傳輸一個起始位,接著傳輸數據位,接著傳輸校驗位(可不需要此位),最后傳輸停止位。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 這樣一幀的數據就傳輸完了。
傳輸方向:數據位從高位(MSB)開始傳輸還是從低位(LSB)開始傳輸。比如傳輸A,
???????? ??????????如果MSB就是01000001,如果LSB就是10000010。協議規定為LSB方向。
幀間隔:即傳送數據的幀與幀之間的間隔大小,可以用位或者時間為計量。
歡迎加入硬件QQ群:101 808 3751,一起討論硬件問題,分享調試心得,共同成長。