我在linux中使用rs232通信遇到了严重问题所以我编写了这个测试程序,以确保我的程序的其他部分不会干扰串行通信。
该程序不起作用,因为我担心这是串口代码是问题所在。
我有一台带有centos运行程序的笔记本电脑,它连接到运行超级终端的Windows XP的计算机。代码根据错误检查执行正常,但在huperterminal中没有显示任何内容。
我试图获得的串行孔设置是115200波特率,8个数据位,1个停止位和标记奇偶校验。
这是该计划:
#include <termios.h>
#include <sys/ioctl.h>
#include <errno.h>
#include <ncurses.h>
#include <fcntl.h>
#include <unistd.h>
int main()
{
int port, serial, i;
unsigned long nobw;
char buf[10];
struct termios options;
port = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);
if (port == -1)
perror("open_port: Unable to open /dev/ttyS0 - ");
else
printf("port open \n");
tcgetattr(port, &options); // get current settings
cfsetispeed(&options, 115200); // set baud rate
cfsetospeed(&options, 115200); // set baud rate
options.c_cflag &= ~CSIZE; // Mask the character size bits
options.c_cflag |= CS8; // 8 bit data
options.c_cflag &= ~PARENB; // set parity to no
options.c_cflag &= ~PARODD; // set parity to no
options.c_cflag |= CSTOPB;//set mark parity by using 2 stop bits
options.c_cflag |= (CLOCAL | CREAD);
options.c_oflag &= ~OPOST;
options.c_lflag &= 0;
options.c_iflag &= 0; //disable software flow controll
options.c_oflag &= 0;
tcsetattr(port, TCSANOW, &options);// save the settings
ioctl(port, TIOCMGET, &serial);
serial |= TIOCM_DTR; // set DTR to high
ioctl(port, TIOCMSET, &serial);
for(i = 0; i < 10; i++)
{
buf[i] = i;
}
for(i = 0; i < 10; i++)
{
errno = 0;
nobw = write(port, buf, 1);
if(nobw == -1)
perror("WriteComm:");
else
printf("sent character %d \n", i);
}
return 0;
}
这一切都是通过实习教程完成的,我不知道我在做什么,你能看出我哪里出错吗?
如果有人知道如何进行太空平价,也会受到赞赏。
答案 0 :(得分:0)
也许值得检查设置是否可以在没有代码的情况下运行? :) 如果你使用linux端的minicom和windows端的超级终端进行连接,你可以来回传递数据吗?