C中的串口通信

时间:2014-10-23 04:42:36

标签: c linux serial-port

我刚开始编写一个应用程序来通过串口控制SimCOM。但我无法从串口接收数据。这是我的计划。

/*Sending command*/
    char cmd[80] = "ATD";
    char number[80];
    printf("Calling: \n");
    printf("Input your phone number:");
    scanf("%s",number);
    char signal[80]= ";\r\n";
    strcat(cmd,number);
    strcat(cmd,signal);
    printf("%s",cmd);
    int nWritten = write(fd, &cmd,sizeof(cmd));

我无法正确读取数据。否则以相同的波特率发送数据是可以的     / 读取数据响应 /

    int n = 0;
    char buf[1];
    char response[256];

    do
    {
     n = read(fd, &buf, 1 );
     strcat(response,buf);
    }
    while( buf[1] != '\r' && n > 0);


    printf("%s \n", response);

这是我程序的开放部分

struct termios options;

    int fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY);
    if(fd==-1){
        printf("Cannot open serial port\n");
    }
    else printf("Serial port: open.\n");


    /*config serial port*/
    tcgetattr(fd, &options);

    cfsetispeed(&options, B9600);
    cfsetospeed(&options, B9600);


    options.c_cflag &= ~PARENB; //no parity
    options.c_cflag &= ~CSTOPB; //one stop bit
    options.c_cflag &= ~CSIZE; // size
    options.c_cflag &= CS8; // 8 bit

1 个答案:

答案 0 :(得分:0)

您尚未发布程序的open()部分。您不能简单地使用read()从串行端口读取,而无需设置波特率和其他参数。 Here is Linux文档项目中的一个很好的例子,可能会有所帮助