当前位置: 技术问答>linux和unix
linux的串口通讯
来源: 互联网 发布时间:2015-07-24
本文导语: 现作linux的串口通讯 方法:同一台PC的两个串口COM1和COM2连接 问题:用gdb监视,写端函数正确执行write(),成功写出,包括防护正确的写出字符个数 接收端,停留在read函数处,没有反应。 编译全部通过,请...
现作linux的串口通讯
方法:同一台PC的两个串口COM1和COM2连接
问题:用gdb监视,写端函数正确执行write(),成功写出,包括防护正确的写出字符个数
接收端,停留在read函数处,没有反应。
编译全部通过,请高手指点问题出在那里?拜谢!!
/************************************************************
用到的函数
int OpenDev(char *Dev)
{
int fd = open( Dev, O_RDWR );
if (-1 == fd)
{ perror("Can't Open Serial Port");
return -1;
}
else
return fd;
}
set_speed(fd,9600);//设置波特率的函数,编译通过,这里就没有给出
set_Parity(fd,8,1,'N')//设置奇偶校验函数,编译通过,这里就没有给出
/*************************************************************************
写端函数:
int main(int argc, char **argv)
{
int fd;
int nread;
char buff[512]="123456789";
char *dev ="/dev/ttyS0";
fd=OpenDev(dev);
if (fd>0)
set_speed(fd,9600);//设置波特率的函数,编译通过,这里就没有给出
else
{
printf("Can't Open Serial Port!n");
exit(0);
}
if (set_Parity(fd,8,1,'N')== FALSE));//设置奇偶校验函数,编译通过,这里就没有给出
{
printf("Set Parity Errorn");
exit(1);
}
while(1)
{
while((nread = write(fd,buff,strlen(buff)))>0)
{
buff[nread+1]='';
printf("n%s",buff);
printf("nSend Succed! Len =%dn",nread);
}
}
close(fd);
exit(0);
}
/*************************************************************************
读端函数(和写端函数差不多)
int main(int argc, char **argv)
{
int fd;
int nread;
char buff[512]="";
char *dev ="/dev/ttyS1";
fd=OpenDev(dev);
if (fd>0)
set_speed(fd,9600);
else
{
printf("Can't Open Serial Port!n");
exit(0);
}
if (set_Parity(fd,8,1,'N')== FALSE)
{
printf("Set Parity Errorn");
exit(1);
}
while(1)
{
while((nread = read(fd,buff,9))>0)
{
buff[nread+1]='';
printf("n%s",buff);
printf("nReceive Succed!" );
}
}
close(fd);
exit(0);
}
方法:同一台PC的两个串口COM1和COM2连接
问题:用gdb监视,写端函数正确执行write(),成功写出,包括防护正确的写出字符个数
接收端,停留在read函数处,没有反应。
编译全部通过,请高手指点问题出在那里?拜谢!!
/************************************************************
用到的函数
int OpenDev(char *Dev)
{
int fd = open( Dev, O_RDWR );
if (-1 == fd)
{ perror("Can't Open Serial Port");
return -1;
}
else
return fd;
}
set_speed(fd,9600);//设置波特率的函数,编译通过,这里就没有给出
set_Parity(fd,8,1,'N')//设置奇偶校验函数,编译通过,这里就没有给出
/*************************************************************************
写端函数:
int main(int argc, char **argv)
{
int fd;
int nread;
char buff[512]="123456789";
char *dev ="/dev/ttyS0";
fd=OpenDev(dev);
if (fd>0)
set_speed(fd,9600);//设置波特率的函数,编译通过,这里就没有给出
else
{
printf("Can't Open Serial Port!n");
exit(0);
}
if (set_Parity(fd,8,1,'N')== FALSE));//设置奇偶校验函数,编译通过,这里就没有给出
{
printf("Set Parity Errorn");
exit(1);
}
while(1)
{
while((nread = write(fd,buff,strlen(buff)))>0)
{
buff[nread+1]='';
printf("n%s",buff);
printf("nSend Succed! Len =%dn",nread);
}
}
close(fd);
exit(0);
}
/*************************************************************************
读端函数(和写端函数差不多)
int main(int argc, char **argv)
{
int fd;
int nread;
char buff[512]="";
char *dev ="/dev/ttyS1";
fd=OpenDev(dev);
if (fd>0)
set_speed(fd,9600);
else
{
printf("Can't Open Serial Port!n");
exit(0);
}
if (set_Parity(fd,8,1,'N')== FALSE)
{
printf("Set Parity Errorn");
exit(1);
}
while(1)
{
while((nread = read(fd,buff,9))>0)
{
buff[nread+1]='';
printf("n%s",buff);
printf("nReceive Succed!" );
}
}
close(fd);
exit(0);
}
|
READ()是要等待读入字符,首先你要建立一个终端,然后读写数据啊。
要不然你上面设置那些参数有什么用啊。
要不然你上面设置那些参数有什么用啊。