1. 程式人生 > >串口編程入門

串口編程入門

串口 林世霖

技術分享圖片

嵌入式系統中,諸多設備都可以通過串口來控制,比如WiFi、藍牙、RFID等等,因此在嵌入式設備中使用串口就顯得特別重要。

技術分享圖片

首先,有幾個概念簡單澄清一下。


RS232RS485TTL指的是電氣電平標準。一般而言,TTL使用0V表示低電平,+5V表示高電平。RS232使用負邏輯電平,即+3V ~ +15V表示低電平,-3V ~ -15V表示高電平。RS485和RS232一樣都是基於串口的通訊接口,數據收發的操作是一致的,RS485采用差分信號負邏輯,+2V~+6V表示低電平,- 6V~-2V表示高電平。


以上三個協議(RS232、RS485和TTL)是電氣特性,規定的是物理層接口要求。物理層標準的建設,就好比各種公路的建設,公路有了我們就可以在上面跑各種汽車,並制定各種汽車的不同行駛規則,這就是通信協議,UART

就是其中的一種通信協議,全稱是通用異步收發器,規範了在串行通信中,最常見的異步傳輸的通信模式,下面會有詳解。


平常說的串口COM口指的是物理接口,它們通常有9針和4針兩種樣式標準。4針串口標準中的四個管腳分別是:VCC、TXRX和GND,其中TX和RX分別是發送端(Transmit)和接收端(Receive)。一般而言兩個串行口互相收發信息的時候,需要讓他們的這兩個管×××互相連,即A口的TX接B口的RX,反過來A口的RX接B口的TX。

技術分享圖片

在左邊兒的D型9針接口中,一般而言實際用到的也是VCC、TX、RX和GND四個腳。



下面就來具體看看串口是怎麽回事。


串口通常指的是串行接口,這跟並行接口相對而言。比如有一個8-bits的數據從A發往B,並行和串行的區別分別如下面所示。

技術分享圖片

可以看到,串行傳輸只需要一根線纜就夠了,而並行的話需要8根線。他們各自的特點如下:


  1. 串行傳輸線纜少,因此信號衰減較慢,電磁兼容性較好,傳輸距離較長;並行傳輸線纜多,因此信號衰減較快,電磁兼容性較差,傳輸距離短。

  2. 串行傳輸速度乍看起來是並行傳輸的 1/N ,但實際上由於並行線纜的電磁幹擾的物理特性限制,導致並行傳輸的最高頻率(比如幾十MHz)要遠遠低於串行傳輸的最高頻率(高達幾十GHz),因此串行傳輸的速度並不比並行的慢。

  3. 串行傳輸硬件接口簡單,占用空間小,成本低;並行傳輸硬件接口復雜,占用空間大,成本稍高。

  4. 串行傳輸由於線纜少,因此數據的正常傳輸需要各種特定的算法,軟件設計復雜;並行傳輸每個數據位獨立,算法和軟件設計相對簡單。


簡單來看,串行傳輸比並行傳輸有更多優勢,實際上隨著各種設備的主頻越來越高,串行通信在現代計算機領域越來越大行其道。


那這一根線的串行通信,究竟是怎麽傳輸數據的呢?主要有下面兩種辦法。


1,同步傳輸

所謂同步傳輸,最核心的地方就是用統一的時鐘來控制發送方和接收方,然後規定一個同步起始字符,同時規定傳輸的每個字符包含的位數(一般是5-8位)就可以了。


由於同步傳輸必須要求收發雙方時鐘一致,甚至要求使用嚴格的同一時鐘源,而這在多數場合下都是無法達到的要求,因此雖然同步傳輸比異步傳輸速度高,但應用更為廣泛的還是異步傳輸。


2,異步傳輸

顧名思義,異步傳輸的本質是不要求收發雙方時鐘的同步性,這意味著他們可以各自有各自的時鐘(時鐘不需要同步,但頻率還得是一樣的,不然根本就雞同鴨講,即波特率必須得一致),這極大降低了工程實施的復雜性。因此著重要關註的是異步傳輸。


既然是異步傳輸,即發送方隨時可以發送數據過來,事先是沒有跟接收方有過任何協同商量的,那接收方很自然地就會有個疑問:你的數據究竟什麽時候過來?一般的做法是這樣:規定一個空閑的電位狀態(比如高電平),然後規定一個起始位(比如一個低電平時鐘間隔),然後接著就是正常的數據位(當然也可以規定長度,比如8-bits),然後是可選的校驗位(用來校驗數據傳輸過程中是否受到電磁環境的影響發生數位翻轉),然後是停止位(比如一個高電平時鐘間隔)。


說那麽多,來幾張直觀的圖說明問題吧。下面援引知乎的幾幅圖,配以實例加以說明。


原圖網址:www.zhihu.com/question/29033993


串口傳輸的典型例子就是鍵盤按鍵,當我們按下 'k' 時,實際上就是傳輸了該字符的ASCII碼值 01101011到了主機。

技術分享圖片


但在大部分時候,鍵盤可能根本沒有產生任何數據,那我們就要有一個能表達空閑狀態的電平,比如這樣。

技術分享圖片


沒數據(空閑)時,一直維持在高電平。那好,當我們按下字母 'k' 的時候,我們就立刻發去一個起始位,並緊跟著我們的數據 'k' ,就像這樣

技術分享圖片



主機接受了若幹個數據位(跟鍵盤預先商量好)之後就知道,鍵盤發送了一個 'k' 過來了。然後是可選的校驗位和停止位,然後將線纜電平恢復到空閑狀態

技術分享圖片


這樣一來,設備之間就是異步通信的,只要設置好一致的波特率即可,依靠起始位、數據位、校驗位、停止位來協調。以上這樣的異步串行通信方式,就是所謂的UART。相信聰明的你都get到了吧 ^_^

技術分享圖片


微信入口:https://mp.weixin.qq.com/s?__biz=MzAxNzYzMTU0Ng==&mid=2651289214&idx=1&sn=c55efbd2f94137eee67773a3bd5fcfed&chksm=8011462bb766cf3d0061ab8ee10ab01358aa92b862996349891a91443110204951ee474d241d#rd

串口編程入門