【原创】STM32复位后遥控数据出错的解决方法

[复制链接]
步兵TANGX
2015-3-9 16:29:29 显示全部楼层

马上注册,玩转Robomaster!

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

x
本帖最后由 TANGX 于 2015-6-5 18:14 编辑

DR16接收机的Dbus取反后接到STM32串口的RX脚,使用官方遥控器控制协议V1.4.pdf 中提供的参考代码接收数据,可以正常接收。在DMA中断里面加上IO翻转后,可以通过逻辑测试仪看到如下波形:

1.png

如上图所示,18个字节发送约2ms多,周期约14ms(和手册里的7ms有出入),18个字节接收完毕后进入DMA中断,解析各个字节的信息。另一个串口打印出的解析后的遥控数据如下(四个通道摇杆均在中位,S1、S2中位,未接入键鼠信息):

1_1.png

但经过测试,在接收机一直上电的情况下,复位STM32,有时会出现如下图的波形,DMA在18个字节未传输完成的时候就中断了:

2.png

另一个串口打印出的解析后的遥控数据如下(四个通道摇杆均在中位,S1、S2中位,未接入键鼠信息):

2_2.png

究其原因,是复位并配置好串口后,串口收到的第一个字节有可能不是一帧(18个字节)中的第一个字节,而DMA只管18个字节中断一次,所以就会出错。出错的概率大约为2/14,14%。

解决的方法就是让串口接收到的第一个字节是一帧中的第一个字节,可以算好时间后让接收机和STM32同时上电,保证接收数据正确。但在调试过程中,难免会经常复位,所以最好能在代码里面解决这个问题。

由于Dbus的数据中不包含帧头或帧尾之类的标识信息,所以不能通过识别标识信息的方法来解决这个问题。笔者解决这个问题的思路大致为:首先开启串口的接收中断,当串口收到第一个字节的时候进入中断服务函数,在中断服务函数里面重置串口(重置后不会再进入串口接收中断),延时3ms,延时结束的时候肯定就是在两帧信息的间隔里面,然后再配置并开启DMA,这样DMA传输的第一个字节必然就是一帧的首字节。经笔者的测试,这种方法效果良好:

3.png

如上图所示,就算串口收到的第一个字节不是帧首字节,DMA也能正确的接收后续的数据。

跳转到指定楼层

【原创】STM32复位后遥控数据出错的解决方法

[复制链接]
步兵TANGX
 楼主| 2015-3-19 16:44:52 显示全部楼层
ksc 发表于 2015-3-19 16:12
我按照楼主的方法打开uart接收中断,延时三毫秒后,配置DMA,却发现DMA并未正常工作。
...

用我那个试试嘛,然后对比下

STM32的手册里说了串口接收中断和串口DMA不能同时用,同时用会出错,我之前也遇到了

所以我在串口中断里重置了整个串口,然后重新配置的串口和DMA,这样没问题的

具体是哪个地方导致出错,我没细究,如果你发现了,麻烦告诉大家哈

【原创】STM32复位后遥控数据出错的解决方法

[复制链接]
梯队队员风凌雪
2015-3-26 21:51:47 显示全部楼层
你好,我最近调试遥控器遇到些问题,我的示波器测波形,正常,也取反了,通过串口助手向串口发数,也可以通过进入DMA中断,这里是不是说明串口和DMA是正常的,但是我将接收器的信号接入PA10(我用的串口1),DMA就进不了中断,用的STM32F103的板子,100000Kbit,求助呀

【原创】STM32复位后遥控数据出错的解决方法

[复制链接]
步兵TANGX
 楼主| 2015-3-9 19:25:44 显示全部楼层
z2138155 发表于 2015-3-9 17:09
收藏啦~~~哈哈哈~~~你这么多天才发出来啊~

主要是不缺定有没有技术含量。。。。

【原创】STM32复位后遥控数据出错的解决方法

[复制链接]
工程z2138155
2015-3-9 17:09:08 显示全部楼层
收藏啦~~~哈哈哈~~~你这么多天才发出来啊~

【原创】STM32复位后遥控数据出错的解决方法

[复制链接]
前哨站哈哈哈
2015-3-9 17:33:07 显示全部楼层
已收藏~~~
回复

使用道具 举报

【原创】STM32复位后遥控数据出错的解决方法

[复制链接]
英雄zzipeng
2015-3-9 22:53:49 显示全部楼层
我嚓。。不错不错

【原创】STM32复位后遥控数据出错的解决方法

[复制链接]
正式队员飞海
2015-3-13 11:07:22 显示全部楼层
可以借鉴借鉴

【原创】STM32复位后遥控数据出错的解决方法

[复制链接]
梯队队员dumingxiao
2015-3-14 23:01:24 显示全部楼层
借鉴看看~~
回复

使用道具 举报

【原创】STM32复位后遥控数据出错的解决方法

[复制链接]
正式队员ksc
2015-3-19 16:12:03 显示全部楼层
我按照楼主的方法打开uart接收中断,延时三毫秒后,配置DMA,却发现DMA并未正常工作。
捕获.JPG

【原创】STM32复位后遥控数据出错的解决方法

[复制链接]
步兵justdo
2015-3-21 11:24:04 显示全部楼层
赞一个,没用stm的飘过。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

触屏版 | 电脑版

Copyright © 2022 RoboMasters 版权所有 备案号 粤ICP备12022215号

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