我已通过串行端口将Raspberry PI与笔记本电脑相连。我已经编写了确保PI上c语言中的设备之间进行通信的程序。为了检查通信,我在笔记本电脑上使用了终端软件。 我必须为通讯设置以下参数:
波特率:300,数据位:8,奇偶校验:奇数,停止位:1,握手:无,读取超时:5秒。
我有一些疑问:
1)我是否正确设置了连接的必需参数?
2)为什么我在笔记本电脑的终端上什么也没收到?
3)为什么,如果我在发生2个超时后发送一个字节,则所有休息 字节立即为0(超时时无浪费)?
请参阅下面的代码:
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <fcntl.h>
int main ()
{
struct termios RSopt;
char byte = -1;
char str[2] = {0,0};
int fd;
fd = open( "/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY );
tcgetattr(fd, &RSopt);
cfsetospeed (&RSopt, (speed_t)B300);
cfsetispeed (&RSopt, (speed_t)B300);
cfmakeraw(&RSopt);
RSopt.c_cflag &= ~CSIZE;
RSopt.c_cflag &= ~CRTSCTS;
RSopt.c_cflag |= O_NONBLOCK;
RSopt.c_cflag |= CREAD;
RSopt.c_cflag |= CLOCAL;
RSopt.c_cflag |= CS8;
RSopt.c_cflag |= PARENB;
RSopt.c_cflag |= PARODD;
RSopt.c_cflag |= ~CSTOPB;
RSopt.c_iflag |= IGNPAR;
tcflush( fd, TCIFLUSH );
tcsetattr (fd, TCSANOW, &RSopt);
struct timeval timeout;
fd_set read_fds;
for (int ii=0;ii<10;++ii)
{
FD_ZERO(&read_fds);
FD_SET(fd, &read_fds);
timeout.tv_sec = 5;
timeout.tv_usec = 0;
str[0] = 0x5;
write(fd, str, 1);
if (select(fd + 1, &read_fds, NULL, NULL, &timeout) == 1)
{
read(fd, &byte, 1);
printf("Recive: %x\n", byte);
}
else
{
printf("Timeout.\n");
}
};
close(fd);
}