首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何监控串行连接@ 250000波特?

如何监控串行连接@ 250000波特?
EN

Unix & Linux用户
提问于 2016-11-30 22:03:34
回答 2查看 6.8K关注 0票数 5

我希望直接监控串行通过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。有人能建议另一种方法来监控这种串行连接吗?

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2016-12-01 17:03:03

有一些未记录的ioctls可以用来设置非标准的速度,只要驱动程序实现它们。调用它们的一个简单方法是使用一小块python。如放入文件mysetbaud.pychmod +x it:

代码语言:javascript
复制
#!/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中的):

代码语言:javascript
复制
./mysetbaud.py <>/dev/ttyUSB0 250000
票数 6
EN

Unix & Linux用户

发布于 2017-12-14 00:47:57

代码语言:javascript
复制
setserial -a /dev/ttyUSB0 spd_cust
setserial -a /dev/ttyUSB0 divisor 96

现在将端口设置为38400以获得250000。

代码语言:javascript
复制
stty -F /dev/ttyUSB0 38400

(或将其用作应用程序中的38400,例如ser2net)

http://www.linurs.org/linux/SerialPort.html那里得到我的信息

票数 4
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/327188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档