编写这个串行测试程序时我错过了什么

时间:2011-10-05 11:17:34

标签: c++ linux serial-port

我在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;
}

这一切都是通过实习教程完成的,我不知道我在做什么,你能看出我哪里出错吗?

如果有人知道如何进行太空平价,也会受到赞赏。

1 个答案:

答案 0 :(得分:0)

也许值得检查设置是否可以在没有代码的情况下运行? :) 如果你使用linux端的minicom和windows端的超级终端进行连接,你可以来回传递数据吗?