我有一个 RS-232 通信接口。我需要这个接口来进行简单的通信(没有奇偶校验位或流量控制 → TX、RX 和接地),但现在我有相当多的 4 个引脚未使用(RTS、DTR、DCD/DSR、CTS),并且想知道我是否可以滥用这些引脚来进行某些操作其他信号,为此我需要一种读取这些引脚的方法。那么如何在基于 Linux 的嵌入式系统上做到这一点呢?
seterial
报告接口处于16550A
UART 模式并根据https://en.wikipedia.org/wiki/16550_UART:
“用于控制外部调制解调器的握手线,可由软件控制。”
您还需要了解什么吗?
答案1
RTS 和 DTR 是输出引脚 - 您可以对其进行设置。
DCD和CTS是输入引脚,只能读取。
默认情况下,设备可能设置为硬件握手。您可以使用以下命令更改此设置tcsetattr
(参见 CRTSCTS)。然后就可以使用TIOCMBIS
ioctl来设置RTS和DTR
好的参考资料是:
上面的内容可能是以 Linux 为中心的。
要更加 POSIX 然后看POSIX 操作系统串行编程指南
我从指南中摘录了这个示例:
#include <unistd.h>
#include <termios.h>
int fd;
int status;
ioctl(fd, TIOCMGET, &status);
status &= ~TIOCM_DTR;
ioctl(fd, TIOCMSET, status);
在堆栈溢出您可以找到一些有关如何正确设置端口的意见。