串行通信read()错误

时间:2014-06-30 05:09:02

标签: c linux serial-port

对于知情人士来说,这应该是相当简单的,但我一直在苦苦挣扎,并会欣赏一些想法。我正在编写一个从串口通讯端口读取的应用程序。

我的设置:

我有一台打开腻子并连接到我感兴趣的通讯端口的Windows机器。 我有一台linux(ubuntu)机器,我正在编写这个软件(在C中)。 我在windows机器上输入putty并尝试在linux机器上用我的应用程序读取它。

我有什么:

到目前为止,使用下面的代码我可以从Linux计算机上的应用程序成功写入windows机器上的putty显示,但是当我在windows机器上输入时,我无法读取linux机器上的缓冲区。

代码:

#include <stdio.h>      // standard input / output functions
#include <stdlib.h>
#include <string.h>     // string function definitions
#include <unistd.h>     // UNIX standard function definitions
#include <fcntl.h>      // File control definitions
#include <errno.h>      // Error number definitions
#include <termios.h>

int openport()
{
    int USB = open( "/dev/ttyUSB0", O_RDWR| O_NOCTTY | O_NONBLOCK );
    struct termios tty;
    struct termios tty_old;
    memset(&tty, 0, sizeof tty);

    /* Error Handling */
    if ( tcgetattr( USB, &tty ) != 0 )
    {
        printf("Error 1, or something");
    }

    /* Save old tty parameters */
    tty_old = tty;

    /* Set Baud Rate */
    cfsetospeed (&tty, (speed_t)B9600);
    cfsetispeed (&tty, (speed_t)B9600);

    /* Setting other Port Stuff */
    tty.c_cflag     &=  ~PARENB;        // Make 8n1
    tty.c_cflag     &=  ~CSTOPB;
    tty.c_cflag     &=  ~CSIZE;
    tty.c_cflag     |=  CS8;

    tty.c_cflag     &=  ~CRTSCTS;       // no flow control
    tty.c_cc[VMIN]      =   1;                  // read doesn't block
    tty.c_cc[VTIME]     =   5;                  // 0.5 seconds read timeout
    tty.c_cflag     |=  CREAD | CLOCAL;     // turn on READ & ignore ctrl lines

    /* Make raw */
    cfmakeraw(&tty);
    /* Flush Port, then applies attributes */
    tcflush( USB, TCIFLUSH );
    if ( tcsetattr ( USB, TCSANOW, &tty ) != 0)
    {
        printf("Error, or something");
    }

    return USB;
}

int main()
{
    int n = 0;
    int j = 0;
    unsigned char buf[10] = {0,0,0,0,0,0,0,0,0,0};
    printf("Hello world!\n");

    int USB = openport();


    unsigned char cmd[] = "INIT Hey SHanahas \r";
    int n_written = 0;

    do 
    {
        n_written += write( USB, &cmd[n_written], 1 );
    }
    while (cmd[n_written-1] != '\r' && n_written > 0);

    printf("Here\n\n");


    do
    {
        n = read( USB, &buf, 1 );
        printf("%s \n",buf);
        printf("%d",n);
    }
    while( buf != '\r' && n > 0);



    printf("Herr2");

    return 0;
}

有没有人对可能发生的事情有任何想法? read()命令返回-1错误。

谢谢!

0 个答案:

没有答案