![如何读出未使用的串行引脚(RTS、CTS等)?](https://linux22.com/image/81880/%E5%A6%82%E4%BD%95%E8%AF%BB%E5%87%BA%E6%9C%AA%E4%BD%BF%E7%94%A8%E7%9A%84%E4%B8%B2%E8%A1%8C%E5%BC%95%E8%84%9A%EF%BC%88RTS%E3%80%81CTS%E7%AD%89%EF%BC%89%EF%BC%9F.png)
我有一个 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);
在堆栈溢出您可以找到一些有关如何正确设置端口的意见。