关于MAX3485芯片导致的多串口通讯首字节00问题


MAX3485的芯片不多解释了,就是3.3V版的485通讯芯片,具体功能请百度手册,下面具体说一下使用该芯片注意的一个问题。

众所周知,485采用半双工模式通讯,且控制 485芯片读写方向的管脚在主机(如MCU等,相对于外设)这一侧,所以决定了正确的485通讯次序,应该是,MCU需要向外设写数据的时候就把485的写引脚拉高,写完后马上拉低,代表马上进入等待接收外设数据的状态,大部分的时候MCU都是处在等待外设数据进来的状态,所以485通讯中,发起通讯请求的一定是主机或MCU这一侧,丛机或外设只能被动响应,不应发起主动请求,否则整个485通讯就乱套了,尤其是485总线上挂了多个外设的时候,理论上要求主机或MCU只能有一个存在,且通讯只能有主机或MCU主动发起。

下面进入正题,之前小编做了个多功能板,其中涉及到一个MAX3485芯片,因为事先没有充分的查阅资料,绘制出的原理图如下:


实际进入代码操作的时候,发现串口助手收到的数据中第一个字节总是00,百思不得解,网上各种说法都有,后来通过断点方式,一步一步排查,把问题点缩小到485通讯上,然后回看原理图,比对485标准接法,发现上图的A和B端点竟然没有接上,下拉电阻!!!而AB之间仍然跨接了匹配电阻,这样可能导致的一个问题是,AB差分出来的信号不稳定,尤其是A,B引脚处在悬空状态的时候,容易引发一个0信号,让MAX3485芯片误以为有信号进入,然后把0传递给了MCU,这就是问题所在。见其他说法:下图是MAX3485的引脚说明:

网上搜到的这个说法(红线框内的应该有代表性,在板子实在不想飞线(小编承认有些颜控增加上下拉电阻的情况下,果断把R19摘掉,重新烧录,上电测试,一切正常 。如下图 两片板之间的 485通讯正常

 

单板回环的232收发数据也正常了,没有了讨厌的00首字节!至此,该硬件彻底OK。

不过,如果板子要用在工矿场合,真正实现远距离传输的时候,最好还是原理图上加上下拉电阻和匹配电阻,标准接法永远不会错!如果只是作为工具,短距离调试之用,那么上下拉电阻和匹配电阻统统去掉也无妨!注意是一并去掉,不能不要上下拉而保留匹配电阻。

点击数: 63   打印  添加到收藏   发布时间: 2019-09-30




上一篇:微波雷达的两个明显作用
下一篇:找不到下一篇文章了...





» 相关内容
  中位滤波算法-net版VB
  麦克风的负DB详细解释
  MD5加密的一段代码
  滤波函数增强版
  Matlab模拟PID方法-推荐
  Matlab强制拟合函数过零方法
  清空USB FX2LP FIFO缓冲方法
  Savgol萨维基购耳滤波方法-MAT..
  CRC8校验函数通用版VC
  VS2008中修改VC使用的目标.net..
  Verilog实现clk计数器的rst边..
  Chart1控件坐标轴范围设定和恢..
  一个二维码生成页面-简洁实用
  AD7656六通道16位逐次逼近型25..
  TTL和232/485电平不分导致串口..