打印

stm32 窜口发送和接收都开启DMA的话会丢失最后2字节数据。

[复制链接]
6357|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lixun00|  楼主 | 2011-10-13 17:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 lixun00 于 2011-10-14 14:26 编辑

同时开启同一个窜口接收和发送DMA,采用485发送(不采用485,也是一样)。
测试时发现会丢失最后发送的两字节数据。
经检查发现最后两字节没有发送。
后:
1,DMA发送+中断接收,没问题
2,中断发送+DMA接收,没问题

请问什么原因?
沙发
heroxx| | 2011-10-14 09:07 | 只看该作者
最好能贴一下DMA部分以及485中断与收发控制部分的代码。

使用特权

评论回复
板凳
lixun00|  楼主 | 2011-10-14 10:52 | 只看该作者
这个就不要了。网上都可以找到的。

1,DMA发送+中断接收,没问题
2,中断发送+DMA接收,没问题

这个说明没问题的

使用特权

评论回复
地板
lixun00|  楼主 | 2011-10-14 10:55 | 只看该作者
最新研究发现:

在发送的同时即使没有收到数据也会导致最后两字节丢失。

但是:
第一次(注意是第一次,以后不要)发送完后在中断里延迟一段时间(事实上我是下断点),以后收发正常

怪事!
是不是内部同步出了问题?

使用特权

评论回复
5
lixun00|  楼主 | 2011-10-14 10:59 | 只看该作者
DMA优先级情况,试了各种情况,一样。
中断情况,我只开了发送完DMA中断和字符发送完中断(stm32没有硬件485控制线,模拟关闭485)

此窜口为窜口2,我同时开了窜口1(中断接收,DMA发送),窜口3(中断接收,DMA发送),窜口4(中断接收,DMA发送)

其它DMA未开

使用特权

评论回复
6
lixun00|  楼主 | 2011-10-14 14:25 | 只看该作者
找到原因了。
原来是在DMA发送完后,开启发送完毕中断间,没有清空发送完标志。导致过早的关闭了485。
但是,我以前也没有清空,发送是OK的。
我又导入了以前的,切实是可以的,不知道什么原因

使用特权

评论回复
7
pkat| | 2011-10-14 18:38 | 只看该作者
楼主这发现问题的速度还是挺快的

使用特权

评论回复
8
smile99happytu| | 2016-12-13 11:40 | 只看该作者
lixun00 发表于 2011-10-14 14:25
找到原因了。
原来是在DMA发送完后,开启发送完毕中断间,没有清空发送完标志。导致过早的关闭了485。
但是 ...

楼主还记得你的接收完成中断是怎么写的吗?我现在遇到了和你一样的问题,但是我尝试清各种标志位,始终还是少最后两个字节。。。麻烦楼主给提示下,谢谢!

使用特权

评论回复
9
531259672| | 2017-5-18 20:58 | 只看该作者
楼主解决的问题不对吧,我也按照这个思路弄,是不行的,网上也有人解决了,但不是很好,也没有找到根本问题

使用特权

评论回复
10
st316| | 2019-2-20 11:20 | 只看该作者
Hello, 我也遇到了同样的问题,利用DMA往RS485发送数据,最后两个字节总是收不到。

昨天偷懒,在设置DMA待发送数据的长度时, 直接在实际长度上加了2个字节,就样就成功了。

这样一来,虽然能够工作,但总觉得不太好。待会再来看看其它解决方法。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

56

主题

683

帖子

3

粉丝