RS485在切换收发状态的时候收到0x00

介绍一下测试背景,我使用单片机的TTL232,通过MAX485芯片转成RS485协议。但是遇到一个问题,MAX485芯片在从发送状态切换到接收状态的时候会收到一个0x00,很显然这是一个“假”数据,并不是真实接收到的数据,这个0x00着实有点烦人,我们来找一下谁是“凶手”。
我们知道TTL232协议中传输一个字节的数据需要一个启动位,启动位就是一个位的0电平,如下图:
这里写图片描述
那么我们可以猜测,当从发送状态切换到接收状态的时候,是不是单片机的RXD引脚被拉低了一段时间,而这段时间真好被单片机识别成了一帧串口数据,也就是0x00。为了验证我们的猜测,写一个测试程序,每500ms切换一次状态,然后使用示波器测量得到下面的波形:
这里写图片描述
很显然,切换的时候串口RXD引脚为低电平,但是按照标准的串口TTL协议来说的话应该收到一个停止位(1电平)才能算是一个串口数据,然而单片机还是把没有收到停止位的数据算是一帧数据,这可能是单片机串口外设的一个BUG。那么既然遇到这个BUG了我们就想办法解决这个问题。根据串口协议空闲的时候RXD引脚应该是高电平的,那么我们就把RXD引脚上拉,使用内部上拉或者外部使用上拉电阻,由于电路板已经固定了,我们使用内部上拉的方式。进行上拉之后使用示波器测量结果如下:
这里写图片描述
可以看到这时候RXD引脚一直是高电平,就不会收到0x00了,使用正常程序测试发现RXD引脚使用上拉输入或者外部上拉之后的确不再收到0x00了。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值