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

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值