我的战队
【分享帖】DR16战车遥控器防错误处理
遥控器数据协议说明
遥控器发送的数据总为为18个字节,串口配置100kbps, 数据长度8,偶校验,结束位1,流控无。
多个开源代码中都有对遥控器的数据进行处理,接收数据的稳定对机器人的稳定性有着至关重要的影响,以下简单介绍遥控器接收上进行处理。
1、ICRA 机器人 接收处理方法
官方在github上开源代码,开源在这个网站上
https://github.com/RoboMaster/RoboRTS-Firmware

详细代码查看 bsp/boards/drv_dr16.c 主要通过开启串口空闲中断,使用DMA接收,在进入空闲中断的时候进行字节数判断为18 才进行解包。
中断处理过程为进入中断服务函数:第一步清除串口标志位,第二步 失能DMA,第三步判断接收包长度是否为18,成立进入解包函数。不成立跳出。

2、2019步兵代码 接收处理方法
官方在论坛上开源代码
详细代码查看
user/hardware/rc.c 进行硬件配置
user/app/remote_control 进行中断接收
主要通过开启串口空闲中断,使用DMA双缓冲接收,在进入空闲中断的时候先切换缓冲区,防止新来数据进入当前缓冲区,使新来的数据去另一个缓冲区,然后判断接收区缓冲区长度为18 才进行解包, 同时对解包的数据进行判断如果某个通道超过 RC_CHANNEL_ERROR_VALUE 会进行数据复位。
中断处理过程为:第一步判断中断类型;第二步如果是空闲中断,接收一个字节,目的是消除中断标志位;第三步判断几号接收缓冲区,第四步失能DMA,第五步计算当前缓冲区接收长度,第五步重新设置DMA接收长度,第六步设置缓冲区为另一个缓冲区,第六步清除DMA标志位,第七步使能DMA,第六判断当前缓冲区接收长度是否为18,成立进行解包,同时调用离线检测模块的钩子函数,在钩子函数中判断解包数据是不是正确的。



请问这篇文章对你有用吗?
【分享帖】DR16战车遥控器防错误处理
所有评论
暂无更多
关于作者
0 关注Ta
0 文章
0 经验值
0 获赞