你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F1X RS485使用DMA发送丢失数据的处理方法。

[复制链接]
大坤哥 发布时间:2017-7-28 14:43
我需要用DMA发送,因为485需要设置方向,因此我先是在启动DMA发送前设置为发送模式,产生DMA传输完成中断中将485改为接收模式,这时候发送的数据会丢失最后两个字节。
- \7 ]2 X9 B+ b3 }( _) [( g% S# I  ~8 \3 c! O
原因是我后面发现是产生DMA 传输完成中断的时候,串口并没有完成数据传输,这时将485改成接收模式就发不出去后面的了。3 s5 t- c+ Q  f) H

* R" Z& I+ i; Y* V; B然后我就在串口发送完成中断里面检测是不是发送完最后一个字节了,如果是,就将485改成接收,这时候就可以完成发送数据。
- z$ H: T& d5 W: y; K
) v$ r& ^  T& i8 v" w9 ^但是问题来了,串口的TC中断讲道理是每完成一个字节的传输就会产生,但是我用DMA的话  他是完成了一次buff里所有的数据传输才产生的传输完成的TC中断  , 这是怎么回事啊?- _6 ~2 O6 |$ o6 a
赞 收藏 评论5 发布时间:2017-7-28 14:43

举报

5个回答
jianghang 回答时间:2017-10-19 13:35:19
我也遇到了同样的问题,有解决么
cloudcn 回答时间:2017-10-19 17:40:31
DMA 应该是把数据送到 UART_DR里就中断了,这时DR里有数据 移位寄存器里还有数据,估计丢的是这俩" `' {8 [' I, V5 C) s6 q
可以在DMA中断后把 TC的中断打开,在TC的中断里再改RS485方向,再关掉TC中断,可以这样试试
jianghang 回答时间:2017-11-2 09:22:39
本帖最后由 soga 于 2017-11-2 10:14 编辑
/ _) S* T+ K5 @$ y$ s: X
cloudcn 发表于 2017-10-19 17:40
2 p9 n4 {7 t: d& W/ [/ _DMA 应该是把数据送到 UART_DR里就中断了,这时DR里有数据 移位寄存器里还有数据,估计丢的是这俩2 Y* Q; V3 W1 @
可以在DM ...
6 q  S" M+ r$ T0 c) i$ n
之前我也用了串口发送完成中断,仍然数据丢失。但是在串口中断断点【一次】之后,数据就正常了。不知道原因。
zhy233090130 回答时间:2020-4-17 10:24:40
soga 发表于 2017-11-2 09:220 D" k4 t/ }' [0 Q/ W3 P
之前我也用了串口发送完成中断,仍然数据丢失。但是在串口中断断点【一次】之后,数据就正常了。不知道原 ...

, w; U& d* m3 T: @4 y出现同样情况,打断点后数据正常收发了。请问后然这么解决了?
Cortexxx 回答时间:2020-4-17 11:35:59
zhy233090130 发表于 2020-4-17 10:24
1 j7 O1 U9 D) Q% {6 L- f# w出现同样情况,打断点后数据正常收发了。请问后然这么解决了?

9 l; ]/ `1 B! l* Q& q6 A$ G1 [: @4 C电路设计可以消除这个问题。 用三极管做一个开关电路。RE 和 DE 接到一起 。当有检测TX电平的时候,RE DE拉高。这样只有当TX有电平的时候,就会一直使能 DE。 程序设计上 如果TC中断不行的话,那就实时检测TC flag + 延时吧,最好跑个RTOS。

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版