python - Python 睡眠功能问题或 os.system 执行树莓派 4 的时间过长
问题描述
我正在尝试使用 Raspberry Pi 4 与 RS485 芯片进行通信以进行串行通信。我需要使用 Pi 的 GPIO#3 来控制 RS485 芯片上的 nRE/DE PIN。当 GPIO#3 为低电平时,RS485 芯片处于 Rx(读取)模式,高电平处于 Tx(发送)模式。要传输任何内容,我需要在发送任何数据之前将 GPIO#3 设置为 HIGH(这部分有效),并且理想情况下 GPIO#3 应该在与写入过程相同的持续时间内为 HIGH。所以我做了以下事情:
os.system("echo 1 > /sys/class/gpio/gpio3/value") #set GPIO#3 HIGH
n = ser.write(cmdHex)
os.system("echo 0 > /sys/class/gpio/gpio3/value") #set GPIO#3 LOW
#the rest of the code is read response back from the target device
但是,这种代码结构不起作用。我连接了示波器,它显示 GPIO#3 设置为 HIGH 的时间很短(几乎可以看到长度),并在数据发送通过时立即变为 LOW。假设整个数据需要 8ms 发送出去,GPIO#3 仅设置为 HIGH 0.2ms。看到这种行为后,我决定添加睡眠功能,让程序等到写入完成,然后将 GPHI#3 设置为 LOW。并且可以根据波特率计算写入过程的持续时间。
#each byte has 1 start bit, 8 data bit and 1 stop bit, so 10 bits total
sleeptime = 1/(baudrate*1.0) * dataLength * 10
os.system("echo 1 > /sys/class/gpio/gpio3/value") #set GPIO#3 HIGH
n = ser.write(cmdHex)
time.sleep(sleeptime)
os.system("echo 0 > /sys/class/gpio/gpio3/value") #set GPIO#3 LOW
#the rest of the code is for reading
然而,真正的问题来了。它不会在这段时间内完全睡觉。它总是睡得更久(有时长一点,有时很长,很不一致)。这种意外行为导致有时 GPIO#3 引脚停留时间过长并且与响应重叠,因此芯片无法读取它,因为它仍处于写入模式...
任何帮助如何解决这个问题?我完全不知道我做错了什么。
感谢您在下面的任何想法/评论。
解决方案
推荐阅读
- semantic-ui - 如何有条件地将属性添加到 Semantic UI React 元素?
- android - Android LowMemoryKiller 无法杀死 Webviews
- angular - 如何解决 ERROR TypeError: Cannot read property 'forEach' of undefined in Angular?
- javascript - 另一个对象内的对象数组(Javascript)
- docker - Newman Docker 找不到 env 文件
- android - 我正在尝试检索当前登录用户的电子邮件并将他们的电子邮件/标识符放入名为 userEmail 的字段中
- angular - 如何将点击事件绑定到角度 2+ 中 ul 元素内的随机 li 元素
- jquery - 如何使用 jquery 从 DOM 中删除随机生成的属性?
- amazon-emr - Emr 引导脚本文件位置
- c# - String.Split 结果问题