上篇文章【Maker電子學】認識UART界面#1—訊號格式,我們聊了 UART 界面的訊號格式,以及它爲什麼不需要 clock 就能收送訊號,這次我們要繼續來探討 UART 界面與實體世界之間許多通訊標準的關係。
UART 與 RS-232C
在開發 MCU 程式時,常常要把 MCU 的 UART 連接到 PC 來燒錄程式或 debug,但 MCU 上的串列通訊界面是 UART,PC 上的串列通訊界面是 RS-232C,這兩者到底有什麼關係,它們又有什麼不同呢?
如同上一次說明的,UART 是邏輯電路上的概念,它會隨著邏輯電路的電壓位準不同而改變。在 3.3 V 的邏輯電路上,UART 的 1 是 3.3 V,0 是 0 V;但是在 5 V 的邏輯電路中,UART 的 1 是 5 V,0 是 0 V。
邏輯電路的訊號是設計用在短距離、小尺寸的電路板上的,它其實無法跑太長的纜線。爲了解決這個問題,美國的電子工業聯盟 EIA 指定了一系列可以讓 UART 的訊號傳送較長距離的通訊規格標準,而這其中最爲人熟知的就是 RS-232C 這個標準。
最早的 RS-232 標準是由 EIA 在 1960 年制定,之後經過幾次修改,在 1969 年公佈的 RS-232C 成爲個人電腦上最普及的通訊界面(在 USB 界面席捲全世界之前,幾乎每一部電腦都有至少一個 9-pin 的 D 型連接器,那就是 RS-232C)。
RS-232C(圖片來源:Bird 提供)
RS-232C 標準誕生距今剛好 50 年,雖然已是一個老舊的技術,但它對這個世界的影響之深遠仍然餘韻不絕。RS-232C 的電氣特性標準簡單來說是這樣:
- 邏輯 0:傳送端 +5 V ~ +15 V / 接收端 +3 V ~ +15 V
- 邏輯 1:傳送端 -5 V ~ -15 V / 接收端 -3 V ~ -15 V
換句話說,它是用電壓的正、負來代表邏輯的 0 和 1,而且它能容許的電壓範圍相當大。在正常狀況下,RS-232C 上不會出現接近 0 V 的電壓,因爲就算沒有在傳送資料,它的邏輯準位也會維持在 0(就是 UART 的 idle high),傳送端因此會發送 +5 V ~ +15 V 的電壓,接收端也會收到 +3 V ~ +15 V 的電壓;如果 RS-232C 的線上出現 0 V 左右的電壓,就代表線可能根本沒接(這個特性可讓接收端用來偵測纜線是否脫落)。
那麼 UART 和 RS-232C 之間要如何轉換呢?有一顆歷史悠久的 IC 可以來幫我們做這件事。
話說 MAX232/MAX3223
MAX232 是 Maxim 在 1987 年推出的一顆 RS-232C 的傳送/接收器 IC,它的傳送器可以將 5 V 邏輯準位的訊號轉換到 RS-232C 的訊號,而接收器則可以將 RS-232C 的訊號轉換爲 5 V 邏輯準位的訊號。
只需不到短短一分鐘...
輸入您的信箱與ID註冊即可享有一切福利!
會員福利
免費電子報
會員搶先看
主題訂閱
好文收藏
2020/01/28
請問文中提到 『 UART 的 0 是 3.3 V,1 是 0 V;但是在 5 V 的邏輯電路中,UART 的 0 是 5 V …….』和一般使用是波器來量測UART訊號 debug時是相反的。利如此文章裡波形圖(https://makerpro.cc/2019/08/the-difference-between-rs232-and-uart/)的讀值就應該完全反轉。
又是否在UART界面下的資料傳送當 bit 為 High 時應該量到(或傳送為Low 電位)。煩請釋疑?感恩!!
2020/02/07
UART 的邏輯是 0 是低電位,1 是高電位,但 RS-232 剛好相反,因此假設當你送 0x0A 時,二進位是 00001010,在 UART 線上不管 start 和 stop bit,看到的就是 LLLLHLHL,但在 RS-232 上看到的會是 HHHHLHLH。