RoboMaster

标题: 【原创】STM32复位后遥控数据出错的解决方法 [打印本页]

作者: TANGX    时间: 2015-3-9 16:29
标题: 【原创】STM32复位后遥控数据出错的解决方法
本帖最后由 TANGX 于 2015-6-5 18:14 编辑

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

[attach]660[/attach]

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

[attach]661[/attach]

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

[attach]662[/attach]

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

[attach]663[/attach]

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

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

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

[attach]664[/attach]

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


作者: z2138155    时间: 2015-3-9 17:09
收藏啦~~~哈哈哈~~~你这么多天才发出来啊~
作者: 哈哈哈    时间: 2015-3-9 17:33
已收藏~~~
作者: TANGX    时间: 2015-3-9 19:25
z2138155 发表于 2015-3-9 17:09
收藏啦~~~哈哈哈~~~你这么多天才发出来啊~

主要是不缺定有没有技术含量。。。。
作者: zzipeng    时间: 2015-3-9 22:53
我嚓。。不错不错
作者: 飞海    时间: 2015-3-13 11:07
可以借鉴借鉴
作者: dumingxiao    时间: 2015-3-14 23:01
借鉴看看~~
作者: ksc    时间: 2015-3-19 16:12
我按照楼主的方法打开uart接收中断,延时三毫秒后,配置DMA,却发现DMA并未正常工作。

作者: TANGX    时间: 2015-3-19 16:44
ksc 发表于 2015-3-19 16:12
我按照楼主的方法打开uart接收中断,延时三毫秒后,配置DMA,却发现DMA并未正常工作。
...

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

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

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

具体是哪个地方导致出错,我没细究,如果你发现了,麻烦告诉大家哈
作者: justdo    时间: 2015-3-21 11:24
赞一个,没用stm的飘过。。。
作者: XS30    时间: 2015-3-21 21:37
很好的东西,解决了大问题,感谢LZ~
作者: TANGX    时间: 2015-3-22 13:32
XS30 发表于 2015-3-21 21:37
很好的东西,解决了大问题,感谢LZ~

荣幸
作者: 风凌雪    时间: 2015-3-26 21:51
你好,我最近调试遥控器遇到些问题,我的示波器测波形,正常,也取反了,通过串口助手向串口发数,也可以通过进入DMA中断,这里是不是说明串口和DMA是正常的,但是我将接收器的信号接入PA10(我用的串口1),DMA就进不了中断,用的STM32F103的板子,100000Kbit,求助呀
作者: TANGX    时间: 2015-3-27 09:42
你单这样说我也搞不清楚状况哦
作者: jinzhong    时间: 2015-3-27 15:07
收藏看看·~~~
作者: u0uuuu    时间: 2016-11-15 20:55
这个不错,,,,,,




欢迎光临 RoboMaster (https://bbs.robomaster.com/) Powered by Discuz! X3.2