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

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

[复制链接]
陈万垒 发布时间:2017-7-28 14:43
我需要用DMA发送,因为485需要设置方向,因此我先是在启动DMA发送前设置为发送模式,产生DMA传输完成中断中将485改为接收模式,这时候发送的数据会丢失最后两个字节。

原因是我后面发现是产生DMA 传输完成中断的时候,串口并没有完成数据传输,这时将485改成接收模式就发不出去后面的了。

然后我就在串口发送完成中断里面检测是不是发送完最后一个字节了,如果是,就将485改成接收,这时候就可以完成发送数据。

但是问题来了,串口的TC中断讲道理是每完成一个字节的传输就会产生,但是我用DMA的话  他是完成了一次buff里所有的数据传输才产生的传输完成的TC中断  , 这是怎么回事啊?
收藏 评论5 发布时间:2017-7-28 14:43

举报

5个回答
soga 回答时间:2017-10-19 13:35:19
我也遇到了同样的问题,有解决么
cloudcn 回答时间:2017-10-19 17:40:31
DMA 应该是把数据送到 UART_DR里就中断了,这时DR里有数据 移位寄存器里还有数据,估计丢的是这俩
可以在DMA中断后把 TC的中断打开,在TC的中断里再改RS485方向,再关掉TC中断,可以这样试试
soga 回答时间:2017-11-2 09:22:39
本帖最后由 soga 于 2017-11-2 10:14 编辑
cloudcn 发表于 2017-10-19 17:40
DMA 应该是把数据送到 UART_DR里就中断了,这时DR里有数据 移位寄存器里还有数据,估计丢的是这俩
可以在DM ...

之前我也用了串口发送完成中断,仍然数据丢失。但是在串口中断断点【一次】之后,数据就正常了。不知道原因。
zhy233090130 回答时间:2020-4-17 10:24:40
soga 发表于 2017-11-2 09:22
之前我也用了串口发送完成中断,仍然数据丢失。但是在串口中断断点【一次】之后,数据就正常了。不知道原 ...

出现同样情况,打断点后数据正常收发了。请问后然这么解决了?
Cortexxx 回答时间:2020-4-17 11:35:59
zhy233090130 发表于 2020-4-17 10:24
出现同样情况,打断点后数据正常收发了。请问后然这么解决了?

电路设计可以消除这个问题。 用三极管做一个开关电路。RE 和 DE 接到一起 。当有检测TX电平的时候,RE DE拉高。这样只有当TX有电平的时候,就会一直使能 DE。 程序设计上 如果TC中断不行的话,那就实时检测TC flag + 延时吧,最好跑个RTOS。

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版