485通信乱码/延时问题

485通信乱码/延时问题

好久没写单片机相关的内容了,这两天由于之前项目的关系,重新温习了一遍485通信。
首先是基础概念,485通信采用差分信号控制,比232通信强在距离远,抗干扰能力强,可带设备更多。大多数情况下都是用普通串口接一个MAX485或者3485芯片进行不同协议的切换。芯片除了发送和接受数据引脚还有一根控制脚。控制脚为0时为接收状态,反之发送。对于STC8芯片来说,引脚默认的双向口模式即可正常工作。
我们的项目目前是采用一拖六的485通信。一块主板控制六块控制板。主板发送信息,控制板接收到后,定时回复心跳包。方式都是485通信。

遇到的问题是:485线路上常常会产生乱码,发送FF,FE,F3等字节。
开始阶段,老师觉得可能是485线路上有干扰的问题。将对称电阻焊上去之后没有改善。后来我想是不是串口中断里面读写EEPROM的时间太长,导致中断没有快进快出造成错误。在改写程序后发现还是没效果。
最后在网上找了很久,发现有人提出过485通信的发送和接收状态切换时要加延时。我觉得是在理,程序判断数据是否发送完是靠芯片uart的TI位,但是TI发送完不代表485芯片转发数据也完成了。此时可能正在发送数据的停止位。如果此时马上将控制引脚拉低,可能会导致数据传输不完整。产生乱码。
于是改变程序,在状态切换的位置加入了1ms的延时。片段如下:

void Uart2SendData(unsigned char dat
  • 7
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
RS485收到乱码问题可能有多个原因。根据引用和引用的描述,其中一个可能的原因是在RS485通信中,由于半双工通信的特性,同时发送和接收数据可能会导致电平混,从而导致数据乱码。这意味着在同一时间,总线上只能发送或接收数据,不能同时进行。因此,如果在发送数据的同时也在接收数据,就会导致数据乱码问题。 另外,引用提到的问题可能也与硬件设计或软件调试有关。如果硬件设计中存在问题,例如电路连接不正确或者电源不稳定,都有可能导致RS485收到乱码问题。同样地,软件调试中的bug也可能引起乱码的出现。 为了解决RS485收到乱码问题,可以考虑以下几个方面: 1. 确保在RS485通信中,发送和接收数据的时间不会重叠,可以通过控制发送和接收的时间间隔来避免电平混。 2. 检查硬件设计,确保电路连接正确、电源稳定,并且相关芯片的参数设置正确。 3. 进行软件调试,检查代码是否存在bug,如发送和接收数据的逻辑是否正确,数据是否被正确处理。 通过检查和调试这些方面,应该能够解决RS485收到乱码问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [RS485接收数据后发送乱码](https://blog.csdn.net/qq_40690943/article/details/118389258)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatgptT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [RS485通信-单独通不,到系统里就有乱码---从机回复过快乱码](https://blog.csdn.net/u012351051/article/details/77454233)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatgptT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值