浅谈linux下的串口通讯开发

2019-10-13 11:20:14王冬梅

(POSIX 规定波特率存储在 termios 结构中,并未精确指定它的位置,而是提供了函数 cfgetispeed() 和 cfsetispeed() 来存取它。一些系统使用 c_cflag 中 CBAUD 选择的位,其他系统使用单独的变量,例如 sg_ispeed 和 sg_ospeed 。)

CSIZE
字符长度掩码。取值为 CS5, CS6, CS7, 或 CS8。
CSTOPB
设置两个停止位,而不是一个。
CREAD
打开接受者。
PARENB
允许输出产生奇偶信息以及输入的奇偶校验。
PARODD
输入和输出是奇校验。
HUPCL
在最后一个进程关闭设备后,降低 modem 控制线 (挂断)。(?)
CLOCAL
忽略 modem 控制线。
LOBLK
(不属于 POSIX) 从非当前 shell 层阻塞输出(用于 shl )。(?)
CIBAUD
(不属于 POSIX) 输入速度的掩码。CIBAUD 各位的值与 CBAUD 各位相同,左移了 IBSHIFT 位。
CRTSCTS
(不属于 POSIX) 启用 RTS/CTS (硬件) 流控制。

c_lflag 标志常量:

ISIG
当接受到字符 INTR, QUIT, SUSP, 或 DSUSP 时,产生相应的信号。
ICANON
启用标准模式 (canonical mode)。允许使用特殊字符 EOF, EOL, EOL2, ERASE, KILL, LNEXT, REPRINT, STATUS, 和 WERASE,以及按行的缓冲。
XCASE
(不属于 POSIX; Linux 下不被支持) 如果同时设置了 ICANON,终端只有大写。输入被转换为小写,除了以 / 前缀的字符。输出时,大写字符被前缀 /,小写字符被转换成大写。
ECHO
回显输入字符。
ECHOE
如果同时设置了 ICANON,字符 ERASE 擦除前一个输入字符,WERASE 擦除前一个词。
ECHOK
如果同时设置了 ICANON,字符 KILL 删除当前行。
ECHONL
如果同时设置了 ICANON,回显字符 NL,即使没有设置 ECHO。
ECHOCTL
(不属于 POSIX) 如果同时设置了 ECHO,除了 TAB, NL, START, 和 STOP 之外的 ASCII 控制信号被回显为 ^X, 这里 X 是比控制信号大 0x40 的 ASCII 码。例如,字符 0x08 (BS) 被回显为 ^H。
ECHOPRT
(不属于 POSIX) 如果同时设置了 ICANON 和 IECHO,字符在删除的同时被打印。
ECHOKE
(不属于 POSIX) 如果同时设置了 ICANON,回显 KILL 时将删除一行中的每个字符,如同指定了 ECHOE 和 ECHOPRT 一样。
DEFECHO
(不属于 POSIX) 只在一个进程读的时候回显。
FLUSHO
(不属于 POSIX; Linux 下不被支持) 输出被刷新。这个标志可以通过键入字符 DISCARD 来开关。
NOFLSH
禁止在产生 SIGINT, SIGQUIT 和 SIGSUSP 信号时刷新输入和输出队列。
TOSTOP
向试图写控制终端的后台进程组发送 SIGTTOU 信号。
PENDIN
(不属于 POSIX; Linux 下不被支持) 在读入下一个字符时,输入队列中所有字符被重新输出。(bash 用它来处理 typeahead)
IEXTEN
启用实现自定义的输入处理。这个标志必须与 ICANON 同时使用,才能解释特殊字符 EOL2,LNEXT,REPRINT 和 WERASE,IUCLC 标志才有效。