串口通訊格式:
串口通訊可以分為同步通訊(Synchronous)和異步通訊(Asynchronous)。同步通訊時有一根時鍾信號,數據格式中沒有起始位和停止位;異步通訊中沒有時鍾信號,數據格式中包含起始位和停止位。此次記錄內容為使用STM32的異步通信配置學習。
串口異步傳輸一幀數據需要多個位,這些位的描述為 起始位+數據位+校驗位+停止位。起始位是固定的 1bit ,數據位、校驗位和停止位是可配置的,常見的配置類型如:數據位可配置格式為 5bit、6bit、7bit、8bit和9bit(PC端無法配置9bit),STM32好像不能配置5bit和6bit;校驗位1bit,可配置為無校驗、奇校驗、偶校驗、1校驗(Mark)和0校驗(Space),Mark校驗和Space校驗在STM32中好像不能直接配置;停止位可配置格式為1bit、1.5bit和2bit,STM32好像都是1bit停止位。重要的提示:平常使用中,校驗位會單獨拿出來配置和介紹,但是如果開啟了校驗功能,校驗位是填充在數據位的MSB位置。意思是如果你開起了校驗位,那么數據位需要設置為你所需要傳輸數據的位數加一,否則可能出問題。以幾張時序圖作為參考(第一次畫,看着別扭):
1、傳輸無校驗位
左圖中起始位占據1bit,數據位占據8bit(如果設為數據位7bit,那數據位只有7個方格,同理至5bit、6bit),停止位占據1bit,不含校驗位,兩端表示空閑狀態,這種數據格式配置是普通使用最常見的。右圖中起始位占據1bit,數據位占據9bit,停止位占據1bit,不含校驗位,兩端表示空閑狀態;一般我們都是以字節數據傳輸,這種配置時有9bit可用,MSB這一位通常用作校驗位,而且這個校驗位可以由用戶隨意指定;對於STM32使用者來說,雖然寄存器配置無法直接實現Mark校驗和Space校驗,但用戶可使用該格式手動設置MSB,充當Mark校驗或者Space校驗結果使用,因為真實的校驗結果也是放在數據位的MSB位置。
2、傳輸有校驗位
左圖配置起始位1bit、數據位8bit、停止位1bit,開啟了校驗功能,校驗結果1bit占據了數據位的MSB位置,如此當設置為8bit數據位而且開啟了校驗功能時,用戶可傳輸有效數據只有7bit,MSB會被校驗結果強行占據。右圖配置起始位1bit、數據位9bit、停止位1bit,開啟校驗功能,校驗結果1bit占據MSB,用戶可傳輸有效數據為8bit數據,恰好是常用的一個字節數據,所以當用戶打算開啟校驗功能而且要保留當前傳輸數據有效位不變,就要配置數據位加1。對於這個情況,從STM32H7xx參考手冊里截圖說明如下:
對於這一點通過程序設置串口為8bit數據位,開啟奇校驗,使用示波器探測波形進行驗證。使用串口發送0xFF數據時,示波器顯示傳輸數據為0x7F,因為0xFF經過校驗后會把MSB的1變成0;使用串口發送0x7F數據時,示波器顯示傳輸數據為0x7F。
碼元學習:
百度百科里面介紹:碼元,承載信息量的基本信號單位。在數字通信中常常用時間間隔相同的符號來表示一個二進制數字,這樣的時間間隔內的信號稱為(二進制)碼元。 而這個間隔被稱為碼元長度。值得注意的是當碼元的離散狀態有大於2個時(如M大於2個) 時,此時碼元為M進制碼元。
碼元傳輸速率,又稱為碼元速率或傳碼率。其定義為每秒鍾傳送碼元的數目,單位為"波特",又可以稱為波特率,常用符號"Baud"表示,簡寫為"B"。一個碼元可能由多個位組成,所以波特率不一定等於比特率。如果一個碼元只需要表示2個級別狀態(0和1),那么一個碼元就是一個位,此時波特率等於比特率;如果一個碼元需要表示4個級別狀態(0、1、2和3),那么一個碼元需要兩個位表示(即一個碼元占據兩個位,對數關系),此時波特率等於比特率的1/2。
MODBUS 超時時間:
1、兩幀之間超時時間為3.5字符 2、一幀數據中每個字符超時時間為1.5字符
MODBUS 中處理一個字符相當於串口處理一幀。
超時時間根據通信速率計算:
串口傳輸數據時,一個碼元只占據一個位,所以串口的波特率等於比特率。
bps = bit / s = 位 每 秒!
比如串口一幀數據常用的通信格式:起始位(1位) + 數據位(8位) + 校驗位(0位) + 停止位(1位) = 10(位)
9600bps 的比特率下,串口發送字節數據速度為 9600/10 = 960 字符/秒;
每個字符對應時間為 1s / 960 ,3.5字符時間為 3.5 * 1 / 960 = 0.0036458 s = 3.6458 ms
網上資料指明,在通信速率等於或低於 19200 bps 時,這兩個定時必須嚴格遵守;
對於比特率大於 19200 bps 的情形, 應該使用 2 個定時的固定值 :
字符間超時時間(t1.5)為 750µs ,
幀間的超時時間 (t3.5) 為 1.750ms 。