我正在研究必须使用无线串行通信控制的机器人。机器人在微控制器上运行(通过刻录.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上的串口编程提供好的学习材料(代码),那对我有帮助。
...谢谢
答案 0 :(得分:3)
这是一个很好的指南:
http://www.c-program.com/pdf/serialPort_Programming_c.pdf
读取调用可能返回,没有数据,并且errno设置为EAGAIN。如果您希望数据到达,则需要检查返回值并循环读取再次读取。
答案 1 :(得分:0)
首先,看看/ proc / tty / driver / serial,看看是否所有设置都正确(即你看到了你应该看到的信号)。然后,看一下termios(3)的手册页,您可能对VMIN和VTIME的解释感兴趣。