STM32開發 UART應用層通訊協議分析

2021-08-16 05:03:34 字數 1050 閱讀 2353

拿到乙份uart的通訊協議,上手來操作之前先做一下分析。

先看一下它的幀格式說明:

1、 幀頭標誌head

不論是命令幀還是響應幀,幀頭標誌都是0x92。

2、 協議版本

協議版本號(4bit),目前值為1

加密方式(4bit),0表示採取「資料不加密+校驗和」方式。

所以,當前此欄位完整值為0x10

3、 控制欄位中的c/r位元

用於指示該幀是命令幀還是應答幀,1表示命令幀,0表示應答幀。

4、 控制欄位中的t/f位元

用於指示傳輸資料型別,1表示透明的非結構化資料,0表示正常的資料幀。

5、 虛擬通道

虛擬位址(4bit):代表資料幀的源位址標識。目前為保留位,取值為0。

通道序號(4bit):0表示虛通道0,1表示虛通道1,其他值暫不使用。

6、 幀序號

幀的編號一般由傳送節點填充,按遞增加一的原則(溢位後歸零重新開始)使用,不能重複,以保證「虛擬通道+幀序號」在某個相對時間段內是唯一的。但目的節點在應答主控節點的命令時仍使用源節點的幀序號,以實現命令與應答的一一對應。節點在主動上報時,幀序號由節點自己填充,但仍堅持遞增加一的原則。

7、 使用者資料長度指示

指「使用者資料部分」的總長度。一幀的總長度不超過64k。

8、 使用者資料幀

根據命令的不同而不同。

命令字由兩個位元組構成,分別稱為cmdhi和cmdlo,高8位元在前,低8位元在後。

9、 校驗和

指從幀頭開始到校驗和之前所有位元組的累加和,傳送方在傳送時,通過計算填充幀的校驗和部分;接收方在接收到乙個幀時,應通過計算並與校驗和部分進行比較,以確保接收到的幀是完整正確的。

10、使用者狀態字定義

應答狀態字說明 :0 成功

1 沒有此命令

2 幀長度錯誤

3 引數錯誤

4 設定失敗

5 忙,請等待

串列埠回環測試,就不做介紹了。

參看:日常生活小技巧 – uart 回環測試

校驗和計算工具

STM32通過UART使用printf列印資料

首先進行各項初始化,並新增stdio標頭檔案之後新增如下 庫函式 int fputc int ch,file f int getkey void 暫存器 int fputc int ch,file f fputc 是printf 的底層函式,通過fputc 來使告知微控制器列印資料到串列埠並將資料逐...

STM32初練總結(UART)

stm32中可以配置多個uart介面,管腳由使用者自己定義到gpio上,復用時需要開啟afio重對映功能。比如使用gpioa中的9 10腳來實現uart的tx rx管腳,需要初始化管腳 void uart pin init void 再main函式中呼叫上述傳送函式,時把uart dr暫存器新增到w...

STM32外部中斷模擬UART串列埠

串列埠資料幀傳送格式 1個起始位 8個資料位 1個停止位 思路 1.pa9做普通io推挽輸出,按照傳送格式用延時暫時作為該位的傳輸時間,波特率為9600 2.pa10做浮空輸入,外部共享中斷使用 可用其餘外部中斷 每接收到乙個資料就進中斷一次,迴圈接收判斷,當接收到 r n將接收標誌置為0x8000...