首页 > 解决方案 > 如何使用 termios.h 配置串行端口以传递原始字节?

问题描述

我需要通过 USB 虚拟串行设备与硬件进行通信。我所需要的只是使用正确的 UART 设置来回传递原始字节,我不想使用终端。使用 termios 的概念验证软件没有配置正确的位并且不起作用,除非我在运行之前通过 stty 输入一个神奇的配置字符串。

我试图从 stty 复制出现在 termios.h 的 POSIX 手册页中的每个设置,但它仍然不起作用,现在屏幕上充满了样板标志设置代码。

使用 termios.h 获得无终端串行端口的最低配置应该是什么?如果有任何专门针对 Linux 的补充,我需要知道这些。

标签: clinuxunixserial-port

解决方案


至少在 Linux 上,该函数将在原始 IO 的串行设置 blob 中cfmakeraw()设置标志。struct termios在这种情况下,删除了错误检查的工作流程如下所示:

int fd = open(portname, O_RDWR | O_NOCTTY);
struct termios portSettings;
tcgetattr(fd, &portSettings);
cfsetispeed(&portSettings, B115200);
cfsetospeed(&portSettings, B115200);
cfmakeraw(&portSettings);
tcsetattr(fd, TCSANOW, &portSettings);

推荐阅读