STM32通訊相關介紹

序列/並行通訊

按照資料傳輸的方式,通訊可以分為序列通訊和並行通訊。序列通訊簡單地說就是資料依次傳輸,比如要傳輸0x11111111,一位一位的傳送,需要傳送8次。並行通訊則是幾個資料一起傳輸,同樣是0x11111111,如果8位一起傳送,只需要傳送1次,如圖 15。1。1 所示。

STM32通訊相關介紹

由此可見,序列傳輸佔用的通訊線更少,成本低,通訊速度相對較慢;並行傳輸佔用的通訊線多,成本高,通訊速度相對更快。但隨著對傳輸速度要求越來越高,並行傳輸開始出現訊號之間的干擾,序列通訊受干擾影響較小,之後又發展出差分傳輸等技術,極大的提高了序列傳輸速率,使得序列通訊速度可能比並行通訊速度更快。

序列通訊就像單車道,行駛的車輛需要依次行駛。並行通訊就像多車道,同時多輛汽車並排行駛。但當車速很快的時候,多車道上並列行駛的汽車之間會形成“氣流”相互干擾,單車道則受影響較小,速度能夠進一步提升。

全雙工/半雙工/單工傳輸

按照資料傳輸的方向,通訊可以分為全雙工、半雙工和單工。全雙工指雙方都可以同時收發資訊;半雙工雙方都可以收發資訊,但同一時刻只能一方傳送資訊;單工指只能一方發信息,一方接受資訊,通訊是單向的。

全雙工就像電話通訊,雙方任意時刻都可以同時收發資訊;半雙工就像對講機通訊,雙向都可得到資訊,但是同一時刻只能是一方發射另一方接收,發射和接收不能同時進行;單工就像收音機,只能由廣播站傳送給收音機,單向不可逆的,如圖 15。2。1 所示。

STM32通訊相關介紹

同步/非同步通訊

按資料同步的方式,通訊可以分為同步通訊和非同步通訊。資料在雙方之間傳輸時,需要制定規則保證資料傳輸的準確。同步通訊的做法是加一個時鐘訊號,傳送方和接收方在這個時鐘的節拍下傳輸資料,比如常見的SPI、I2C。而非同步通訊的做法是對資料進行封裝,在資料開頭加上起始訊號,在資料結尾加上終止訊號,雙方就按這個規則傳輸資料,比如UART、1-Wire。

因此,可以透過是否有時鐘訊號,初步判斷是何種資料同步方式。

通訊速率

對於同步通訊,通訊速率由時鐘訊號決定,時鐘訊號越快,傳輸速度就越快。

對於非同步通訊,需要收發雙方提前統一通訊速率,這也就是我們串列埠除錯時,波特率不對顯示亂碼的原因。

時鐘對通訊的重要性,這裡再舉個例子:假設傳送端時鐘頻率為1Mhz,對應時鐘週期則為1us, 接收端時鐘頻率為10Mhz,對應時鐘週期則為0。1us。現在傳送端傳送一個數據0x1,就會產生一個持續時間為1us高電平,接收端接收到這個1us的高電平時,會當作是10個0。1us的高電平,認為收到了10個0x1。這時雙方資料就亂套了,因此需要一個統一的時鐘標準。

通常使用位元率來描述通訊速率的快慢,與之容易混淆的是波特率。

位元率(Bitrate):系統在單位時間內傳輸的位元位(二進位制0或1)個數,通常用Rb表示,單位是位元/秒(bit/s),縮寫為bps;

波特率(Baudrate):系統在單位時間內傳輸的碼元個數,通常用RB表示,單位是波特(Bd);

100bit/s即是一秒鐘傳輸100個0或1,100Bd即是一秒鐘傳輸100個碼元。

碼元就是“承載資訊量的基本訊號單位”,以一條電線上傳輸的訊號為例,碼元就是電線上的電平值。

如果電線上電平只有0和3。3V兩種選擇,傳輸的訊號是這2種電平之一,碼元的狀態只有2種。接收方可以把0V認為是二進位制的0,把3。3V認為是二進位制1。即:傳輸1個碼元時,能用來表示1位資料。

如果電線上電平有0V、3。3V、5V、12V四種選擇,傳輸的訊號是這4種電平之一,碼元的狀態有4種。接收方可以把這4個電平認為是二級制的4個值:00、01、10、11。即:傳輸1個碼元時,能用來表示2位資料。

因此碼元狀態為2時,位元率等於波特率,碼元狀態越多,每次傳輸的碼元能攜帶的資訊越多,自然速率也越高。

碼元有N個狀態時,位元率與波特率的關係式:

STM32通訊相關介紹

串列埠電平標準

說到串列埠,經常提到TTL、RS232、RS422、RS485,簡單地說,就是為了適應不同的環境條件,使用了不同的電平標準。假如微處理器和板載的藍芽透傳模組通訊時,一般就使用TTL電平,引腳直接連線即可。假如微處理器在工業現場,需要連線一個幾十米外的裝置,則應該考慮將TTL電平轉為RS232、RS422、RS485。

STM32通訊相關介紹

如下表 15。5。1 是幾個通訊介面標準總結。可以發現為了加大傳輸距離,人們依次嘗試了增加電壓、差分傳輸等方式。

STM32通訊相關介紹

串列埠傳輸協議

以TTL電平的介面為例講解串列埠怎麼傳輸資料,對於RS232/RS422/RS485等介面,僅僅是把TTL電平轉換為不同的電平值,或者轉換為差分訊號。

TTL介面的串列埠,硬體連線如圖 15。6。1 所示。

STM32通訊相關介紹

串列埠傳輸中的一些概念如下:

波特率:一般選波特率都會有9600,19200,115200等選項。其實意思就是每秒傳輸這麼多個位元位數(bit);

起始位:先發出一個邏輯”0”的訊號,表示傳輸資料的開始;

資料位:可以是5~8位邏輯”0”或”1”,先傳輸bit 0,在傳輸bit 1,依次類推;

校驗位:資料位加上這一位後,使得“1”的位數應為偶數(偶校驗)或奇數(奇校驗),以此來校驗資料傳送的正確性。校驗位是可選的,可以不傳輸;

停止位:它是一個字元資料的結束標誌,資料線變回邏輯”1”;

怎麼傳送一位元組資料,比如“A”?“A”的ASCII值是0x41,二進位制就是01000001,怎樣把這8位資料傳送給對方呢?

雙方約定好波特率、資料格式(資料位個數、停止位個數、是否使用校驗位、奇校驗還是偶校驗),假設資料位是8,停止位是1,校驗位是1;

初始電平為邏輯1;

傳送方輸出邏輯0,並保持1位的時間;接收方檢測到邏輯0,就知道對方準備傳送資料了;

傳送方根據資料的bit 0設定引腳電平,並保持1位的時間;接收方讀取引腳電平,得到bit 0;

傳送方根據資料的bit 1設定引腳電平,並保持1位的時間;接收方讀取引腳電平,得到bit 1;

以此類推,發出8位資料;

傳送方計算出校驗值,設定引腳,並保持1位的時間;接收方讀取引腳電平,得到校驗值;注意,這步可以省略;

傳送方輸出邏輯1,並保持1位的時間;接收方讀取引腳電平,直到資料傳輸結束;

訊號的波形圖如圖 15。6。2 所示。

STM32通訊相關介紹

常見通訊協議

在嵌入式中,有眾多通訊協議,往往從效能、成本、穩定性、易用性等角度考慮選擇合適的協議。常見的通訊協議如表 15。7。1 所示。

STM32通訊相關介紹