【问题标题】:How to read from linux serial port....如何从linux串口读取......
【发布时间】:2010-07-02 17:48:18
【问题描述】:

我正在研究必须使用无线串行通信进行控制的机器人。机器人在微控制器上运行(通过烧录 .hex 文件)。我想用我的 Linux(Ubuntu) 电脑控制它。我是串口编程的新手。我可以发送数据,但无法读取数据。 在微控制器上运行的几段代码:

发送数据的函数

void TxData(unsigned char tx_data)

{   SBUF = tx_data;          //Transmit data that is passed to this function
    while(TI == 0);     //wait while data is being transmitted

}

我通过字符数组 data_array[i] 发送数据

  for (i=4;i<=6;i++)
  {   
     TxData(data_array[i]);
     RI = 0;              //Clear receive interrupt. Must be cleared by the user.
     TI = 0;        //Clear transmit interrupt. Must be cleared by the user.
   }

现在是运行在 Linux 上的 C 程序的一段代码...

> while (flag==0)  {
>      int res = read(fd,buf,255);
>      buf[res]=0; /* set end of string, so we can printf */
>      printf(":%s:%d\n", buf, res);
>      if (buf[0]=='\0') flag=1; 
       }

它打印出 res = 0 的值。

实际上我想逐个字符地读取数据以执行计算并做出进一步的决定。还有其他方法吗?请帮忙,因为我无法继续进行项目。

注意:如果有人能推荐好的Linux串口编程的学习资料(代码),对我有帮助。

谢谢....

【问题讨论】:

    标签: linux serial-port


    【解决方案1】:

    这是一个很好的指南:

    http://www.c-program.com/pdf/serialPort_Programming_c.pdf

    读取调用可能会返回没有数据并且 errno 设置为 EAGAIN。如果您期望数据到达,您需要检查返回值并循环再次读取。

    【讨论】:

    • 感谢 amardeep 的帮助。我需要多一点帮助。实际上我正在做的是发送白线传感器的(左,中,右)值(不断变化)并在另一端接收它们。你能帮我在数组中接收这些值,以便我可以将它们存储在不同的变量中,然后进行计算。同步也存在问题,就像上面发送代码一样,我总是只接收 data_array[6] 的值,它没有显示其他 2 个值。有没有办法同步它们并在一个数组或 3 个不同的变量中正确接收它们?
    【解决方案2】:

    首先,查看 /proc/tty/driver/serial 以查看所有设置是否正确(即您看到了应该看到的信号)。然后,查看 termios(3) 的手册页,您可能对 VMIN 和 VTIME 的解释感兴趣。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-03
      相关资源
      最近更新 更多