【紧急求助】串口自发自收的问题

god_fish 2007-11-22 09:11:18
#define SleepMs( ms ) ( usleep( (ms)*1000 ) )

//打开串口
int OpenDev(char *Dev)
{
int fd = open( Dev, O_RDWR ¦ O_NOCTTY ¦ O_NDELAY);

if (fd==-1)
{
perror( "Can 't Open Serial Port ");
}
else
{
fcntl(fd, F_SETFL,FNDELAY);
}
return fd;
}

int main()
{
int comfd = OpenDev( "/dev/ttyS0 " );
char srcBuf[] = "12345 ";
while( 1 )
{
int writeLen = write( comfd, srcBuf, sizeof(srcBuf) ); //S0发送
char tmpRecvBuf[16];
//接收
for( int i = 0; i < 100; ++i )
{
if ( read( comfd, tmpRecvBuf, sizeof(tmpRecvBuf) ) > 0 )
{
printf( "ok\n " );
break;
}
SleepMs( 1 );
}

SleepMs( 1000 );
}
return 0;
}

//以上是串口自发自收的测试程序,将串口2,3脚短接,但是没有打印 "ok ",即没有收到数据;而发送是成功的(writeLen的值大于0)。
请问这是什么原因?

P。S。因为是同一个串口,所以没有设置波特率等参数;另外串口用“串口调试助手”测试是正常的,能够自发自收数据。
...全文
1146 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
fswawnei 2011-01-06
  • 打赏
  • 举报
回复
请问设置成原始模式后,问题解决了吗?
god_fish 2007-12-19
  • 打赏
  • 举报
回复
应该 设置成败原始模式,否则在LINUX/UNIX下,被终端处理程序接收了,只有完整1行才返回!!
===============================================================================
请问原始模式怎样设置?
yang_dk 2007-12-19
  • 打赏
  • 举报
回复
原始模式这样设置

options.c_lflag  &= ~(ICANON | ECHO | ECHOE | ISIG);  //输入
options.c_oflag &= ~OPOST; //输出
zhengyufu 2007-12-04
  • 打赏
  • 举报
回复
应该 设置成败原始模式,否则在LINUX/UNIX下,被终端处理程序接收了,只有完整1行才返回!!
cceczjxy 2007-11-28
  • 打赏
  • 举报
回复
没问题,应该是你短接2,3短接错了,你可能把3,4短接了,调一下就可以了.
COOLRW 2007-11-27
  • 打赏
  • 举报
回复
最好将打开的串口关闭,这是个好习惯
使用termios.h里的函数和结构对串口进行设置,有很多设置,网上能查到这些设置的作用
russell28 2007-11-22
  • 打赏
  • 举报
回复
串口发送和接收之间是有一定的间隔的。试一下在发送和接收间加一段延时吧。
pottichu 2007-11-22
  • 打赏
  • 举报
回复
恩。 很怪异, 呵呵。
god_fish 2007-11-22
  • 打赏
  • 举报
回复
分线程收发,也试过的,主线程间隔一秒发,接收线程不断尝试接收,也还是收不到数。
pottichu 2007-11-22
  • 打赏
  • 举报
回复
要不, 你起个线程,
主线程发, 后台线程收。

再试试。
god_fish 2007-11-22
  • 打赏
  • 举报
回复
实际参数设置后,效果也一样。

就是收不到数据,不知道是什么原因
pottichu 2007-11-22
  • 打赏
  • 举报
回复
波特率这些东西最好还是设置一下,何必偷那点懒。
现成的代码, copy一份试试就行。

http://www.ibm.com/developerworks/cn/linux/l-serials/index.html

23,120

社区成员

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

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