250000보드에서 직렬 연결을 모니터링하는 방법은 무엇입니까?

250000보드에서 직렬 연결을 모니터링하는 방법은 무엇입니까?

250000보드로 실행되는 3D 프린터에 대한 직렬 USB 연결을 직접 모니터링하고 싶습니다. 예를 들어 다음을 사용하여 모니터링할 수 있습니다.cat /dev/ttyUSB0

하지만 먼저 전송 속도를 설정해야 합니다.stty -F /dev/ttyUSB0 115200

그러나 전송 속도를 250k로 설정하려고 하면 실패합니다.

stty -F /dev/ttyUSB0 250000

결과는 다음과 같습니다.

stty: invalid argument 250000

Ubuntu/Mint에서는 전송 속도 250000이 지원되지 않는 것 같습니다. 이 직렬 연결을 모니터링하는 다른 방법을 제안할 수 있는 사람이 있습니까?

답변1

드라이버가 구현하는 경우 문서화되지 않은 일부 ioctl을 사용하여 비표준 속도를 설정할 수 있습니다. 이를 호출하는 쉬운 방법은 약간의 Python을 사용하는 것입니다. 예를 들어 파일 mysetbaud.py에 넣으십시오 chmod +x.

#!/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]))

이는 pyserialLinux C 포함 파일에 필요한 다양한 값에 대한 상수를 포함하는 패키지에서 일부 코드를 가져옵니다 struct termios2. 예를 들어 bash에서 전송 속도 매개변수 및 장치와 함께 사용할 수 있습니다.

./mysetbaud.py <>/dev/ttyUSB0 250000

답변2

setserial -a /dev/ttyUSB0 spd_cust
setserial -a /dev/ttyUSB0 divisor 96

이제 포트를 38400으로 설정하여 250000을 얻습니다.

stty -F /dev/ttyUSB0 38400

(또는 ser2net과 같은 애플리케이션에서는 38400으로 사용)

내 정보의 출처는 다음과 같습니다.http://www.linurs.org/linux/SerialPort.html

관련 정보