linux串口无法接收数据(linunx新手求救)

kucey 2007-10-10 12:08:06
在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;
}

...全文
1446 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lei531718949 2012-08-15
  • 打赏
  • 举报
回复
我去,居然是07年的帖子。楼主还活着吗,我也遇到类似问题了。
kucey 2007-10-11
  • 打赏
  • 举报
回复
终端设置就是指定义termio这个结构体吧,还有个问题,为什么windows给linux发串口信息,会自动返回信息呢?也是和终端设置有关系吗?还是驱动?
kucey 2007-10-11
  • 打赏
  • 举报
回复
嗯,谢谢指教,现在比较急,我在看termio.h这个文件,是不是定义这个结构体的时候需要设置,或者终端特性设置指什么?
kucey 2007-10-11
  • 打赏
  • 举报
回复
我好好看了下termio,受益非浅,确实是里面的设置问题,谢谢,问题已解决,准备结贴。
cceczjxy 2007-10-10
  • 打赏
  • 举报
回复
你这上边怎么没设置波特率的地方?
这样,你不能保证你的默认的波特率和windows下的一样.
设置一下波特率看看
core 2007-10-10
  • 打赏
  • 举报
回复
默认文件是行缓冲的,没回车当然收不到
要进行终端特性设置的,好好看看termio
kucey 2007-10-10
  • 打赏
  • 举报
回复
非常感谢楼上的,加个"回车"确实能够收到了,但很奇怪linux在收到的时候还是会给windows回发数据,我觉得可能是串口驱动的问题,我想把问题解决应该不难,甚至自己写个驱动,但现在的问题是不知道驱动放在哪里了。另外在setserial里有divisor选择驱动,默认是0,能改变这个吗?
qq_nh123 2007-10-10
  • 打赏
  • 举报
回复
你用串口调试助手发送数据的时候加个“回车”,linux下就能收到了,是什么原因,我也不清楚,反正我以前用串口发数据的时候就是这样,正奇怪着呢,就搞别的去了,这个问题一直没有解决。
kucey 2007-10-10
  • 打赏
  • 举报
回复
波特率不设是默认的,我两边是一样的,我已经加上设置语句了,还是不行。
这是波特率的问题引起的吗?请问linux有没有驱动一说,能不能选择不同的驱动。

23,207

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧