linux刷新串口,linux – 串口未正确刷新

我有一个RPi(是的,我知道,也许有人认为这属于RPi网站,但我认为它与

Linux有关,所以StackOverflow是正确的地方)我正在使用

Python3通过MAX485在一些Arduinos之间进行通信这或多或少都有效,因为我发现我需要做一些奇怪的解决方法才能让一切工作“正常”.

如果我发送数据:

GPIO.output(23, 1) # Pulling transmit pin high to send

comport.write("Some data".encode()) # Writing data

comport.flush() # Flushing the buffer

GPIO.output(23, 0) # Pulling pin down to receive

Arduino接收数据并立即响应,但由于pySerial尚未准备就绪,它变得什么都没有,我们丢失了数据包.

但是,如果我这样尝试:

GPIO.output(23, 1)

comport.write("Some data".encode())

time.sleep(.001) # Add some delay of only 1ms

comport.flush()

GPIO.output(23, 0)

然后数据被发送并被接收.这引出了一个问题:flush命令是否正常工作?我试了一下:

GPIO.output(23, 1)

comport.write("Some data".encode())

time.sleep(.001) # Add some delay

# -- No flush --

GPIO.output(23, 0)

令人惊讶的是它也有效.似乎睡眠“替换”了flush命令.

为什么pySerial的缓冲区没有刷新?我知道,这可能是一种方法,但是睡眠只会增加一个(通常)不必要的代码,导致整个代码等待(超过500行),这并不是那么好.

我已经在互联网上搜索了一些,并且有人说它是不支持刷新的USB TTL适配器(这里不是这种情况,这个是板载的),其他人说它可能是Linux内核错误,所以没有什么真正有意义的对我来说.

如果有人能够解释为什么flush命令不起作用以及如何使它工作(如果有办法),我和这个问题的每个未来访问者都会非常高兴.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值