RPI4Mouse的串口通信協議 V1.0

一、串口通信協議的組成部分

1、起始幀頭

2、幀長(包含幀頭幀尾的長度)

3、指令位

4、數據位

5、校驗

6、結束幀尾

二、關於CRC循環冗餘校驗

將多項式按階數定義爲一串二進制數,與待校驗數做模二除法,得出餘數則爲CRC碼。

stm32自帶硬件CRC。

stm32硬件CRC的操作步驟(基於標準庫):

1、開啓CRC時鐘單元(具體掛載在哪條總線上請參考你使用的芯片。我用的是STM32F411,掛在AHB1上,所以初始化AHB1)

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_CRC, ENABLE)

2、復位CRC模塊。這個操作把CRC寄存器的餘數初始化爲0xFFFFFFFF

3、把要計算的數據寫入CRC_DR寄存器。

4、寫完數據後,從CRC_DR寄存器中讀出結果。

STM32F4XX中提供瞭如下函數:

void CRC_ResetDR(void) //復位CRC

uint32_t CRC_CalcCRC(uint32_t Data) //將一個數據寫入CRC

uint32_t CRC_CalcBlockCRC(uint32_t pBuffer[], uint32_t BufferLength)
//計算一個數組的CRC值

uint32_t CRC_GetCRC(void) //讀取CRC計算結果

void CRC_SetIDRegister(uint8_t IDValue)
uint8_t CRC_GetIDRegister(void)
//分別是寫CRC_IDR和讀 CRC_IDR 寄存器。

目前32的硬件 CRC校驗有個致命問題,就是得出來的結果我找遍全網竟然找不出一個和他結果一樣的CRC校驗。這樣的話沒法寫上位機的。

三、定義

1、起始幀頭 

當接收到0x77時開始判斷數據

2、功能位

指令名稱 數據
電機控制 0X38
LED控制

0x39

3、數據位

電機控制數據格式:

前進0x01+脈衝數

後退0x02+脈衝數

左轉0x03+角度

右轉0x04+角度

LED 控制:

 R:0x0A+亮度

G:0x0B+亮度

B:0x0C+亮度

4、校驗位

CRC校驗

5、結束幀0xAA

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章