日期:2014-05-16  浏览次数:20943 次

linux串口无法接收数据(linunx新手求救)
在linux与windows间进行简单的串行数据的发送接收操作.linux下的程序源码如下,windows用使用串口调试程序收发数据.结果linux发往windows的数据能正常接收,但windows发往linux的数据linux方却无法接收,最奇怪的事是: windows发送的数据windows自己却收到了(linux没有转发收到的数据,串口线的2,3脚也没有短接;在windows上开两个串口调试程序,在COM1,COM2间发送数据进行试验,一切正常)!!请高人指点迷津.
#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 */
#include <signal.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/select.h>
int main(void)
{
int recnum,fd;
char buf[1024];
recnum=0;
recnumb=0;
fd=open("/dev/ttyS0",O_RDWR|O_NONBLOCK)
if(fd==-1)
{
perror("failed to open com1:");
return 0;
}
ia=write(fd,"the data come from linux!",25);
if(ia<0)
{
fputs("failed to write data to com1!\n",stderr);
return 0;
}
while(1)
{
recnum=read(fd,buf,255);
if(recnum>0)
break;
}
printf("%s\n",buf);
close(fd);
return 0;
}



------解决方案--------------------
你这上边怎么没设置波特率的地方?
这样,你不能保证你的默认的波特率和windows下的一样.
设置一下波特率看看

------解决方案--------------------
你用串口调试助手发送数据的时候加个“回车”,linux下就能收到了,是什么原因,我也不清楚,反正我以前用串口发数据的时候就是这样,正奇怪着呢,就搞别的去了,这个问题一直没有解决。
------解决方案--------------------
默认文件是行缓冲的,没回车当然收不到
要进行终端特性设置的,好好看看termio