我希望直接监控串行通过usb连接到我的3d打印机,它运行在250000波特。例如,我可以用cat /dev/ttyUSB0监视它
不过,首先我需要设置波特率,例如stty -F /dev/ttyUSB0 115200
但是,如果我试图将波特率设置为250 000,它就失败了:
stty -F /dev/ttyUSB0 250000
给出结果:
stty: invalid argument 250000
看来,在Ubuntu/Mint下不支持波特率250000。有人能建议另一种方法来监控这种串行连接吗?
发布于 2016-12-01 17:03:03
有一些未记录的ioctls可以用来设置非标准的速度,只要驱动程序实现它们。调用它们的一个简单方法是使用一小块python。如放入文件mysetbaud.py和chmod +x it:
#!/usr/bin/python
# set nonstandard baudrate. http://unix.stackexchange.com/a/327366/119298
import sys,array,fcntl
# from /usr/lib/python2.7/site-packages/serial/serialposix.py
# /usr/include/asm-generic/termbits.h for struct termios2
# [2]c_cflag [9]c_ispeed [10]c_ospeed
def set_special_baudrate(fd, baudrate):
TCGETS2 = 0x802C542A
TCSETS2 = 0x402C542B
BOTHER = 0o010000
CBAUD = 0o010017
buf = array.array('i', [0] * 64) # is 44 really
fcntl.ioctl(fd, TCGETS2, buf)
buf[2] &= ~CBAUD
buf[2] |= BOTHER
buf[9] = buf[10] = baudrate
assert(fcntl.ioctl(fd, TCSETS2, buf)==0)
fcntl.ioctl(fd, TCGETS2, buf)
if buf[9]!=baudrate or buf[10]!=baudrate:
print("failed. speed is %d %d" % (buf[9],buf[10]))
sys.exit(1)
set_special_baudrate(0, int(sys.argv[1]))这将从pyserial包中获取一些代码,其中包含用于Linux包含文件所需的各种值的常量,以及一个用于struct termios2的数组。在stdin上使用波特率参数和设备(如bash中的):
./mysetbaud.py <>/dev/ttyUSB0 250000发布于 2017-12-14 00:47:57
setserial -a /dev/ttyUSB0 spd_cust
setserial -a /dev/ttyUSB0 divisor 96现在将端口设置为38400以获得250000。
stty -F /dev/ttyUSB0 38400(或将其用作应用程序中的38400,例如ser2net)
https://unix.stackexchange.com/questions/327188
复制相似问题