找回密码
 立即注册
查看: 705|回复: 13

请教在串口DMA时,如何控制RS485的发送使能脚?

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2025-02-15 22:45:37

12

主题

96

回帖

604

积分

高级会员

积分
604
发表于 2024-9-1 10:58:25 | 显示全部楼层 |阅读模式
主板控制外部设备,该设备的波特率是定死的9600,不能改变,数据量又大,并且不是定长的,如果直接发送太占CPU的时间,想用DMA的方式发送;整个板子共用了4路485,一路CAN,其中一路485是9600,一路485是38400,另外两路是115200,想把9600这一路通过DMA传输,每次发送数据前,要用单片机的一个引脚拉高485芯片的发送使能脚,发送完成后要拉低,如果正常发送的情况倒是好办,如果是用DMA方式的话,该如何处理?发送前需要拉高,发送完成后需要立即拉低,不然从机设备返回的数据会收不到,芯片使用的是STC32G12K64。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2024-9-1 11:04:45 | 显示全部楼层
截图202409011104092064.jpg


截图202409011104425740.jpg

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:239
  • 最近打卡:2025-05-02 03:42:37

22

主题

283

回帖

905

积分

高级会员

积分
905
发表于 2024-9-1 11:11:21 | 显示全部楼层
在DMA发送完成中断里拉低
REMOVEUNUSED
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2025-02-15 22:45:37

12

主题

96

回帖

604

积分

高级会员

积分
604
发表于 2024-9-1 12:16:13 | 显示全部楼层

之前用过这种方式,后来发现,这样的方式出来的信号会有一定的误差,
用逻辑分析仪看过,如果低速的还行,如果是高速的,会有丢信号的问题。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2025-02-15 22:45:37

12

主题

96

回帖

604

积分

高级会员

积分
604
发表于 2024-9-1 12:17:17 | 显示全部楼层
邮*** 发表于 2024-9-1 11:11
在DMA发送完成中断里拉低

在开始发送前要拉高,发送完成后要拉低,要处理两次,要怎么操作呢?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:93
  • 最近打卡:2025-05-01 20:59:58

13

主题

53

回帖

775

积分

高级会员

积分
775
发表于 2024-9-1 13:08:28 来自手机 | 显示全部楼层
深山老妖 发表于 2024-9-1 12:16
之前用过这种方式,后来发现,这样的方式出来的信号会有一定的误差,用逻辑分析仪看过,如果低速的还行, ...

你的从机难道没有延时机制吗?
每次你主动发送数据肯定知道字节、那dma发送完可以中断中处理,还不能里面立马切换接收,可能会最后一个字节从机接收错误.
如果从机没延时只能计算一下一个位时间来测试下停止位发送完再使能接收,stc指令速度太快了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2025-02-15 22:45:37

12

主题

96

回帖

604

积分

高级会员

积分
604
发表于 2024-9-1 13:11:49 | 显示全部楼层
wnag*** 发表于 2024-9-1 12:22
先拉高,然后启动DMA,DMA完成后中断中拉低

谢谢,了解了。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2025-02-15 22:45:37

12

主题

96

回帖

604

积分

高级会员

积分
604
发表于 2024-9-1 13:18:38 | 显示全部楼层
wxd*** 发表于 2024-9-1 13:08
你的从机难道没有延时机制吗?
每次你主动发送数据肯定知道字节、那dma发送完可以中断中处理,还不能里面 ...

与延时机制没有关系,我是说波形会有一定的误差,用三极这种形式的电路,如果真正商业化应用,会有问题,做测试可能还好,之前做的工控板,就是用反相器做的,确实可以省下一个端口,但是现场发现,会经常出现数据错误的问题,最后用逻辑分析仪观察发现,信号的高低电平,与发送端会有一定的误差,如果现场再有干扰的情况下,就有可能会出现数据错误的问题,后来全部改用多用一个端口专门控制485的使能脚,就没有再出问题了。

点评

我不推荐用三极管做RS485自动方向控制,因为这样会导致输出驱动极其不对称,用于测试可以,但是用于做产品,最好由MCU来控制收发,或者用可重触发的单稳态电路做方向切换。  详情 回复 发表于 2024-9-2 11:30
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:93
  • 最近打卡:2025-05-01 20:59:58

13

主题

53

回帖

775

积分

高级会员

积分
775
发表于 2024-9-1 13:45:57 来自手机 | 显示全部楼层
深山老妖 发表于 2024-9-1 13:18
与延时机制没有关系,我是说波形会有一定的误差,用三极这种形式的电路,如果真正商业化应用,会有问题, ...

应该就是控制脚的电平最终转换状态在你发送或者接收前没满足要求,
我在中断中试过立马改变切换使能脚,发现会引起那个停止位没完成的情况,以前51的时候加几个nop后正常,现在stc需要加好多个
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:484
  • 最近打卡:2025-05-01 08:52:01
已绑定手机

23

主题

589

回帖

2813

积分

金牌会员

积分
2813
发表于 2024-9-1 14:23:03 | 显示全部楼层
可尝试一下国产的具有自动流向控制功能的485芯片,含税也才2.5元/片,直接把使能脚固定接高电平即可,根本就不用拉高拉低的,又可以节省单片机的一个io,这些芯片已经经过了实际产品的验证,性能稳定可靠!波特率直接跑115200都没问题,数据传输速率可达16Mbps。一家是杭州瑞盟科技的MS2548【SOP-8封装】https://www.relmon.com/,另外一家是杭州捷茂微电子的GM13488E【SOP-8封装】。
不停地学习
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 04:30 , Processed in 0.130666 second(s), 113 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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