我正在运行Ubuntu 9.10,但似乎在termios上遇到了麻烦。
因此,我可以启动minicom,以57600 Baud,8N1的速度打开串行端口,无需进行硬件或软件流控制,并且效果很好。我输入@ 17 5并且我的设备响应。当我尝试在C++代码中设置串行端口时,没有任何响应。我知道该软件正在与端口通信,因为LED灯亮了。
这是我的主要内容:
int main(void)
{
int fd; /* File descriptor for the port */
fd = open("/dev/keyspan1", O_RDWR | O_NOCTTY | O_NDELAY);
if (fd == -1)
{
/*
* Could not open the port.
*/
perror("open_port: Unable to open /dev/ttyS0 - ");
}
else
fcntl(fd, F_SETFL, 0);
/*****************************CHANGE PORT OPTIONS***************************/
struct termios options;
/*
* Get the current options for the port...
*/
tcgetattr(fd, &options);
/*
* Set the baud rates to 57600...
*/
cfsetispeed(&options, B57600);
cfsetospeed(&options, B57600);
/*
* Enable the receiver and set local mode...
*/
options.c_cflag |= (CLOCAL | CREAD);
/*
* Set the new options for the port...
*/
tcsetattr(fd, TCSANOW, &options);
/***********************************END PORT OPTIONS***********************/
int n;
n = write(fd, "@17 5 \r", 7);
if (n < 0)
fputs("write() of 8 bytes failed!\n", stderr);
char buff[20];
sleep(1);
n = read(fd, buff, 10);
printf("Returned = %d\n", n);
close(fd);
return(0);
}
任何建议,将不胜感激。谢谢。
最佳答案
您可能需要将终端初始化为原始模式。我建议您使用cfmakeraw()
初始化术语选项结构。除其他外,cfmakeraw将确保禁用流控制,禁用奇偶校验,并且逐个字符可用输入。
cfmakeraw不是Posix。如果您担心可移植性,请在cfmakeraw联机帮助页中查找所做的设置。