小强电脑与stm32底层串口通讯协议

串口波特率为115200,8个数据位,1个停止位,无奇偶校验。

第一部分是上位机对底层下发的控制指令:

每个指令构成一个数据帧,可以同时下发多个数据帧,帧内容是:包头+长度+内容,包头为3个u8字符:205 235 215 长度是1个u8字符,长度不包括包头和长度字符自身,内容为命令+参数。

单字符命令,即一个字符完成的命令: 调试模式 ‘T’ 运行模式 ‘R’ 软件复位 ‘I’

例如,让stm32软件复位,下发的数据帧hex内容为:0xcd 0xeb 0xd7 0x01 0x49

双字符命令,即一个字符加一个参数X完成的命令: 前进 'f‘X , X数值范围为0~100
后退 'b’X , X数值范围为0~100 刹车 's'X , X数值任意 左转 'c'X , X数值范围为0~100 右转 'd'X , X数值范围为0~100

例如:
以80%的制动量制动小车: 0xcd 0xeb 0xd7 0x02  0x73 0x50
以16%的速度左转:      0xcd 0xeb 0xd7 0x02  0x63 0x10
以16%的速度右转:      0xcd 0xeb 0xd7 0x02  0x64 0x10

多字符带参数命令: 设置电机 't'XXXXxxxx 命令说明:完整命令格式tABCDabcd,总共9个字符。t为命令标识,表示设置电机命令 ABCD分别为1--4个电机的状态,每个字符有三种状态,F:向前,B:向后,S:刹车, 其他字符无效。abcd为四个电机的速度等级,范围0~100,即以字符的数值表示速度

例如:

让四个电机全部以0%的制动量刹车 tSSSS0000 
对应帧内容为 0xcd 0xeb 0xd7 0x09 0x74 0x53 0x53 0x53 0x53 0x00 0x00 0x00 0x00 

对于小强硬件,只有前两个电机有效,第一个电机对应右轮,第二个电机对应左轮

第二部分是底层给上位机上传的数据:

也是数据帧的形式上传,上传频率为50HZ。帧格式和上面的命令帧一样,只是把命令内容换成了数据。 数据内容是由23个4字节小端模式二进制表示的数字组成,数字之间用空格0x20分开。这23个数字可以构成如下结构体,建议使用内存拷贝的方式直接将数据内容拷贝给这个结构体,然后以结构体形式访问数据,这样可以避免浮点数转换问题。具体代码请参考我们git开源仓库中的上位机ros驱动

typedef struct {
    int status;//小车状态,0表示未初始化,1表示正常,-1表示error
    float power;//电源电压【9 13】v
    float theta;//方位角,【0 360)°
    int encoder_ppr;//车轮1转对应的编码器个数
    int encoder_delta_r;//右轮编码器增量, 个为单位
    int encoder_delta_l;//左轮编码器增量, 个为单位
    int encoder_delta_car;//两车轮中心位移,个为单位
    int omga_r;//右轮转速 个每秒
    int omga_l;//左轮转速 个每秒
    float distance1;//第一个超声模块距离值 单位cm
    float distance2;//第二个超声模块距离值 单位cm
    float distance3;//第三个超声模块距离值 单位cm
    float distance4;//第四个超声模块距离值 单位cm
    float IMU[9];//mpu9250 9轴数据
    unsigned int time_stamp;//时间戳
}UPLOAD_STATUS;

results matching ""

    No results matching ""