无法从Ubuntu上的C串口读取数据

时间:2015-01-29 08:30:55

标签: c serialization

我有两个C程序1.将数据写入串行端口和2.从串行端口读取数据。我已经将USB-Serial转换器连接到我的笔记本电脑并缩短了Tx& Rx来测试程序。 程序1正在成功执行。 程序2在读取时阻塞。

任何人都可以为此建议一个解决方案。 提前谢谢。

写入串口的程序:

#include <stdio.h>   /* Standard input/output definitions */
#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> /* POSIX terminal control definitions */

/*
 * 'open_port()' - Open serial port 1.
 *
 * Returns the file descriptor on success or -1 on error.
 */
int write_port(void)
{
  int fd; /* File descriptor for the port */

  fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY);
  if (fd == -1)
  {
   /* Could not open the port. */
    perror("open_port: Unable to open /dev/ttyUSB0 - ");
  }
  else
    fcntl(fd, F_SETFL, 0);

  int n = write(fd, "ATZ\r", 4);
  if (n < 0)
    fputs("write() of 4 bytes failed!\n", stderr);

  return (fd);
}

void main(){
    printf("\nAccessing Serial Port to Write\n");
    int fd=write_port();
    if(fd<0){
        printf("\nSerial Port Access Failed\n");
        return;
    }
    printf("\n%d\tSuccess\n",fd);
}

从串口读取程序:

#include <stdio.h>   /* Standard input/output definitions */
#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> /* POSIX terminal control definitions */

/*
 * 'read_port()' - Reads serial port 1.
 *
 * Returns the file descriptor on success or -1 on error.
 */
int read_port(void)
{
    int fd = open("/dev/ttyUSB0", O_RDONLY | O_NOCTTY);
    if (fd == -1)
    {
        /* Could not open the port. */
        perror("open_port: Unable to open /dev/ttyUSB0 - ");
    }

    char buffer[32];

    int n = read(fd, buffer, sizeof(buffer));
    if (n < 0)
        fputs("read failed!\n", stderr);
    return (fd);
}

void main(){
        printf("\nAccessing Serial Port to Read\n");
    int fd=read_port();
    if(fd<0){
        printf("\nSerial Port Access Failed\n");
        return;
    }
    printf("\n%d\tSuccess\n",fd);
}

0 个答案:

没有答案