首页 文章

如何从linux串口读取...

提问于
浏览
0

我正在研究必须使用无线串行通信控制的机器人 . 机器人在微控制器上运行(通过刻录.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 的值 .

实际上我想 read data character-by-character 进行计算并做出进一步的决定 . 还有其他方法吗?请帮忙,因为我无法继续进行项目 .

注意:如果有人可以为Linux上的串口编程建议好的学习资料(代码),那对我有帮助 .

谢谢....

2 回答

  • 3

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

  • 0

    这是一个很好的指南:

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

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

相关问题