STM32串列埠2種通訊模式:非同步通訊與同步通訊
目錄
傳送資料暫存器TDR和傳送移位暫存器:傳送暫存器用來儲存要傳送的資料,一位暫存器用來將資料從LSB一位一位地移出去
接收資料暫存器RDR和接收移位暫存器:接受資料移位暫存器將資料從LSB一位一位移入接收資料暫存器中,並儲存在RDR中
傳送資料的過程
先將一個位元組的資料寫入TDR,然後移位暫存器一位位地傳輸。下一次傳輸之前,要確保之前一個數據已經發送出去了,不然會覆蓋之前還未傳送出去的部分,造成資料丟包。
接收資料的過程
串列埠一旦讀到了要接受資料的起始位,就開始將外界傳過來的資料從移位暫存器一位一位地移入RDR中。接受下個位元組之前,一定要將這次的資料讀出來,不然會發生覆蓋資料的現象。
非同步通訊
特點
1.以字元為單位傳送資訊。
2.相鄰兩字元間的間隔時間任意長。
3.非同步通訊沒有時鐘線的約束,通訊雙方都有自己的通訊頻率(波特率),且雙方的波特率要相同,但波特率的相位可能不同。
4.非同步通訊的資料傳輸格式:1個起始位+資料(1個字元)+奇偶校驗位+停止位。
也就是說,非同步通訊每傳送一個數據,都要傳送上面的一串格式,這就造成了資料傳輸的效率大大降低了,它不能用來大資料的傳輸。
那為什麼會是這種通訊傳輸格式呢?
由於非同步通訊沒有時鐘線SCLK的約束,使得通訊雙方的傳送與接受不同步(接收方根本不知道你什麼時候傳送資料過來,也 不知道你發來的一串字元哪些才是有效的)。所以你傳送每一個字元資料,你都得先發送一個起始位(告訴對方我要發資料 了),然後才是資料字元和奇偶校驗(可選擇),最後你要告訴對方我資料傳送完了(傳送停止位)。
由於接收方有自己的時鐘,所以在傳送字元的時候,傳送方傳送一位資料的時刻與接受一位資料的時刻很可能不是同一時刻(波特率相位不同),參考上圖。如果一次傳輸中連續傳送字元,就很可能出現一種現象:第一個字元還沒被接收完,第二個字元就來了,第二個字元會將移位暫存器中第一個字元還沒傳送出去的幾位給覆蓋掉!
所以一次傳輸中只能傳輸一個字元!
同步通訊
特點
1.資料傳送是以資料塊(多個字元組成資料塊流)
2.在一個數據塊(資訊幀)內,字元與字元間無間隔
3.因為一次傳輸的資料塊中包含的資料較多,所以接收時鐘與傳送進鍾嚴格同步,通常要有同步時鐘SCLK
4.通訊雙方的時鐘SCLK是連在一起的,提供同步時鐘。
5.通訊雙方接受與傳送是同步的(時刻相同)
資料傳輸格式
非同步與同步通訊的比較
1.非同步通訊雙方之間沒有SCLK的約束,同步通訊雙方的SCLK連在一起。
2.非同步通訊資料傳輸是以字元(一個位元組)傳輸的,同步通訊資料傳輸是以位元組塊(多個位元組)傳輸的。
3.非同步通訊傳輸效率低,同步通訊傳輸效率高(但複雜)。
4.非同步通訊位元組傳送的間隔是任意的,同步通訊的位元組傳輸是沒有間隔的