gpt4 book ai didi

c - 如何使用 termios.h 配置串行端口以传递原始字节?

转载 作者:行者123 更新时间:2023-11-30 14:32:21 30 4
gpt4 key购买 nike

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

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

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

最佳答案

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>
#include <termios.h>

int serial_open(char *port, int baud)
{
int fd;
struct termios tty;
if((fd = open(port, O_RDWR | O_NOCTTY | O_SYNC)) < 0)
{
return -1;
}

if(tcgetattr(fd, &tty) < 0)
{
return -1;
}

cfsetospeed(&tty, (speed_t)baud);
cfsetispeed(&tty, (speed_t)baud);
tty.c_cflag |= (CLOCAL | CREAD);
tty.c_cflag &= ~CSIZE;
tty.c_cflag |= CS8;
tty.c_cflag &= ~PARENB;
tty.c_cflag |= CSTOPB;
tty.c_cflag &= ~CRTSCTS;
tty.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IXON);
tty.c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN);
tty.c_oflag &= ~OPOST;
tty.c_cc[VMIN] = 1;
tty.c_cc[VTIME] = 1;
if(tcsetattr(fd, TCSANOW, &tty))
{
return -1;
}

return fd;
}

/* example usage */
int fd = serial_open("/dev/ttyUSB0", B9600);

关于c - 如何使用 termios.h 配置串行端口以传递原始字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59865656/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com