Linux中,串口,非缓冲模式(Linux, serial port, non-buffering

2019-09-20 15:54发布

我试图在Linux中串口组织诺布阻断读写功能。 这里是我的代码: http://pastebin.com/RSPw7HAi这一切工作正常,但它是缓冲。 这意味着,如果我通过控制台+ CR符号做输入序列,选择检测到新的输入,否则,如果我通过简单的Python脚本做输入时,它缓存所有的符号,并等待,直到我把它回车符号。 所以用这个输入(如下),它只是缓冲符号的地方。 我不得不通过USB2Serial转换器连接的PC

#!/usr/bin/env python3

import serial

cmd1_state = b'\x3E\x01\x00\x01'

#Selecting serial port for commands to be sent --> /dev/ttyUSB0
serial_0 = serial.Serial('/dev/ttyUSB2');
print("Using serial port ", serial_0.portstr);
serial_0.write(cmd1_state)

# closing serial port
serial_0.close()

所以,有谁能够告诉我在这里做什么? 我是否需要更改端口开口中的东西在我的C文件或者它已经被用python脚本做了什么? 我在以后的使用flush()方法,但它也没有帮助。 顺便说一句,我GOOGLE了约F_NOCACHE精氨酸了fcntl()函数。 但! 这是所有关于BSD和达尔文OS的,有没有这样的事情(F_NOACHE ARG了fcntl)在Linux中,据我可以看到。

UPD:看起来我找到了解决方案。

 /* set input mode (non-canonical, no echo,...) */
newtio.c_lflag = 0;

newtio.c_cc[VTIME]    = 0;   /* inter-character timer unused */
newtio.c_cc[VMIN]     = 1;   /* blocking read until 1 char received */

tcflush(fd, TCIFLUSH);

:来自http://tldp.org/HOWTO/Serial-Programming-HOWTO/x115.html

Answer 1:

貌似我找到了解决办法。

/* set input mode (non-canonical, no echo,...) */
newtio.c_lflag = 0;

newtio.c_cc[VTIME]    = 0;   /* inter-character timer unused */
newtio.c_cc[VMIN]     = 1;   /* blocking read until 1 char received */

tcflush(fd, TCIFLUSH);
Taken from : http://tldp.org/HOWTO/Serial-Programming-HOWTO/x115.html


文章来源: Linux, serial port, non-buffering mode