LINUX C 串口 接收 数据 中 包含 0D 0A 怎么配置
时间: 2024-02-22 21:58:52 浏览: 156
如果你想要接收含有 0D 和 0A 的数据,你可以选择不对输入的数据进行转义操作。在 Linux C 中,可以通过设置串口属性来实现。具体来说,可以使用 termios 结构体中的 c_iflag 属性来控制输入的标志位,其中包括 ICRNL(将输入的 CR 转换为 LF)和 INLCR(将输入的 LF 转换为 CR)。如果需要禁止转义操作,可以将这两个标志位都设置为 0。
示例代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
int main(void)
{
int fd, n;
char buf[1024];
struct termios options;
fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);
if (fd < 0) {
perror("open");
exit(EXIT_FAILURE);
}
fcntl(fd, F_SETFL, 0);
tcgetattr(fd, &options);
options.c_cflag |= (CLOCAL | CREAD);
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
options.c_oflag |= ONLCR;
options.c_iflag &= ~(ICRNL | INLCR);
options.c_cc[VMIN] = 1;
options.c_cc[VTIME] = 0;
tcsetattr(fd, TCSANOW, &options);
while (1) {
n = read(fd, buf, sizeof(buf));
if (n < 0) {
perror("read");
exit(EXIT_FAILURE);
}
buf[n] = '\0';
printf("%s", buf);
}
close(fd);
return 0;
}
```
在上面的代码中,通过设置 options.c_iflag &= ~(ICRNL | INLCR); 来禁止输入的数据进行 CR 和 LF 的转义操作。这样,即使输入的数据中含有 0D 和 0A,也会被正确地接收。
阅读全文