串口是最常用的外設了,串口基本都是單片機的標配。串口通信只需要3條線組成,分別爲RX、TX、GND。下面將重點分析串口數據幀組成。
一、 串口通信幀
串口通信幀數據如此,每幀由空閒位、起始位、數據位、校驗位、停止位組成
傳輸的數據是低位在前高位在後
l 空閒:
串口TX或RX數據線上沒有傳輸任何數據時,則該線處於爲空閒狀態。空閒是TX和RX都是處於高電平。
l 起始位:
標識數據起始,由一個邏輯0(低電平)的數據位表示。
l 數據位:
可以選擇的值有5,6,7,8這四個值,可以傳輸多個值爲0或者1的bit位。這個參數最好爲8,因爲如果此值爲其他的值時當你傳輸的是ASCII值時一般解析肯定會出問題。理由很簡單,一個ASCII字符值爲8位,如果一幀的數據位爲7,那麼還有一位就是不確定的值,這樣就會出錯。
l 校驗位:
保證數據傳輸的可靠性
數據位加上這一位後,使得“1”的位數應爲偶數(偶校驗)或奇數(奇校驗),以此來校驗數據傳送的正確性。就比如傳輸“A”(01000001)爲例。
1、當爲奇數校驗:”A”字符的8個bit位中有兩個1,那麼奇偶校驗位爲1才能滿足1的個數爲奇數(奇校驗)。
2、當爲偶數校驗:”A”字符的8個bit位中有兩個1,那麼奇偶校驗位爲0才能滿足1的個數爲偶數(偶校驗)。
此位還可以去除,即不需要奇偶校驗位。
校驗位一般都是硬件處理的,如STM32。但是51的校驗位是需要字節集手動處理,設置爲9位數據位即可收到校驗值。
校驗可選設置:
無校驗 (no parity):數據包不包含校驗位
奇校驗 (odd parity):如果字符數據位中"1"的數目是偶數,校驗位爲"1",如果"1"的數目是奇數,校驗位應爲"0"。保證數據位+校驗位的“1”爲奇數
偶校驗 (even parity):如果字符數據位中"1"的數目是偶數,則校驗位應爲"0",如果是奇數則爲"1"。保證數據位+校驗位的“1”爲偶數
mark parity:校驗位始終爲1
space parity:校驗位始終爲0
l 停止位:
它是一幀數據的結束標誌。可以是1bit、1.5bit、2bit個邏輯1的的數據位表示
二、 串口波特率(比特率)
uart中的波特率就可以認爲是比特率,即每秒傳輸的位數(bit)。
一般選波特率都會有9600,19200,115200等選項。
波特率其實意思就是每秒傳輸這麼多個比特位數(bit)。
波特率是串口傳輸速率的關鍵作用參數,9600bps就是每秒傳輸9600bit(位)的意思,也就相當於:1/9600=1.041666666666667e-4秒爲每個bit的傳輸時間
三、 抓波形(8-1-NONE)
l 串口發送數據
發送的配置:8位數據位、1位停止位、無校驗位
發送的數據:0x55 = 0101 0101
波形查看
0和11爲空閒電平(高電平)
1爲起始位(一個數據大小的低電平)
2、3、4、5、6、7、8、9組成8位數據,爲10101010,但是數據是低位在前,所以真是的數據位01010101
10爲停止位,高電平,可以選擇一個1、1.5、2個數據大小的時間
四、 抓波形(8-1-EVEN)
l 串口發送數據
發送的配置:8位數據位、1位停止位、偶校驗(數據+校驗的1爲偶數)
發送的數據:0x55 = 0101 0101
波形查看
0和12爲空閒電平(高電平)
1爲起始位(一個數據大小的低電平)
2、3、4、5、6、7、8、9組成8位數據,爲10101010,但是數據是低位在前,所以真是的數據位01010101
10爲校驗位,因爲是偶校驗計算方式是數據位+校驗位的1爲偶數即可
11爲停止位,高電平,可以選擇一個1、1.5、2個數據大小的時間
五、 抓波形(x-1-NONE)
l 串口發送數據
發送的配置:(8,7,6,5)位數據位、1位停止位、無檢驗
發送的數據:0x13 = 0001 0011
8位數據位
7位數據位
6位數據位
5位數據位
5位數據位,使用奇校驗(ODD)
分析:
* 數據的長度會根據奇偶校驗位選擇及數據位選擇動態變化。
* 數據位設置長度小於值本身的長度,將會出現截取現象,將自動截取低位,然後發送
* 校驗位只校驗真實發送的數據