[嵌入式] DR16战车遥控器防错误处理

[复制链接]
下士陈小豪右边童鞋
2019-5-16 18:17:24 显示全部楼层

马上注册,玩转Robomaster!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 民间科学家 于 2019-5-16 19:33 编辑

遥控器数据协议说明
  遥控器发送的数据总为为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,成立进行解包,同时调用离线检测模块的钩子函数,在钩子函数中判断解包数据是不是正确的。
  



跳转到指定楼层

本版积分规则

陈小豪右边童鞋的最新主题
触屏版 | 电脑版

Copyright © 2019 RoboMasters 版权所有

快速回复 返回顶部 返回列表