Chinaunix
标题:
【求助】串口自收自发的一段代码
[打印本页]
作者:
dongpy
时间:
2007-11-21 20:43
标题:
【求助】串口自收自发的一段代码
#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。因为是同一个串口,所以没有设置波特率等参数;另外串口用“串口调试助手”测试是正常的,能够自发自收数据。
作者:
marco_hxj
时间:
2007-11-21 21:24
接受1个程序,发送1个 程序,两个别写在一起
作者:
prc
时间:
2007-11-21 23:07
好像还有个O_SYNC标志
读写应该设成同步方式吧
作者:
dongpy
时间:
2007-11-22 09:16
不一定要设置同步的吧,异步工作方式不可以么?
作者:
cccccc
时间:
2007-11-22 10:40
程序最后退出来吗?,如果没退出来就是read函数阻塞了
作者:
dongpy
时间:
2007-11-22 12:32
我用的是非阻塞方式,发送是正常工作的。就是接收不到数据(非阻塞循环100次也没收到数据)
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2