【发布时间】:2016-01-27 20:22:49
【问题描述】:
我想使用开发板上的RS232 端口与PC 通信。我了解我可以为此目的使用 "dev/ttyS0"。
我可以使用 write() 函数打开和写入数据到 PC。但问题是我无法从“dev/ttyS0”读取。每次使用读取功能时,我都会收到“资源暂时不可用”。各位大佬能告诉我怎么解决这个问题吗?
这是我的代码:
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <termios.h>
#include <unistd.h>
int main()
{
int n = 0, fd = 0, bytes = 0;
char ch = 0;
char buffer[10], *bufPtr;
int nBytes = 0, tries = 0, x = 0;
struct termios term;
fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);
if (fd == -1)
{
perror("open");
return;
}
else
{
fcntl(fd, F_SETFL, 0);
perror("Port");
}
if (n = tcgetattr(fd, &term) == -1)
{
perror("tcgetattr");
return;
}
if (n = cfsetispeed(&term, B115200) == -1)
{
perror("cfsetispeed");
return;
}
if (n = cfsetospeed(&term, B115200) == -1)
{
perror("cfsetospeed");
return;
}
term.c_cflag |= (CLOCAL | CREAD);
term.c_cflag &= ~PARENB;
term.c_cflag &= ~CSTOPB;
term.c_cflag &= ~CSIZE;
term.c_cflag |= CS8;
term.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
term.c_iflag &= ~(IXON | IXOFF | IXANY);
term.c_cflag &= ~CRTSCTS;
term.c_oflag &= ~OPOST;
if (n = tcsetattr(fd, TCSANOW, &term) == -1)
{
perror("tcsetattr");
return;
}
write(fd,"LINUX",5);
perror("write");
fcntl(fd, F_SETFL, FNDELAY);
perror("fcntl");
bytes = read(fd, buffer, sizeof(buffer));
perror("read");
printf("Bytes : %d and data: %s\n", bytes, buffer);
}
【问题讨论】:
标签: c linux serial-port