当前位置: 技术问答>linux和unix
一段串口通讯的代码,求高手指点!
来源: 互联网 发布时间:2015-09-18
本文导语: 以下代码在Linux虚拟环境下运行通过,在调试的过程中发现read(fd, buff, 512)时死掉了,没有读到串口数据。请问程序有问题吗?初学Linux,请高手教教! 我在win2k里通过串口调试器向Com1发送数据,并把Com2和Com1用串口...
以下代码在Linux虚拟环境下运行通过,在调试的过程中发现read(fd, buff, 512)时死掉了,没有读到串口数据。请问程序有问题吗?初学Linux,请高手教教!
我在win2k里通过串口调试器向Com1发送数据,并把Com2和Com1用串口线对接,通过以下程序接收Com2的数据时出现上述情况。用串口调试器已经验证Com2肯定有数据。
在OpenDev后,fd = 5,对吗?
#include /*标准输入输出定义*/
#include /*标准函数库定义*/
#include /*Unix标准函数定义*/
#include /**/
#include /**/
#include /*文件控制定义*/
#include /*PPSIX终端控制定义*/
#include /*错误号定义*/
int speed_arr[] = { B38400, B19200, B9600, B4800, B2400, B1200, B300,
B38400, B19200, B9600, B4800, B2400, B1200, B300, };
int name_arr[] = {38400, 19200, 9600, 4800, 2400, 1200, 300,
38400, 19200, 9600, 4800, 2400, 1200, 300, };
void set_speed(int fd, int speed)
{
int i;
int status;
struct termios Opt;
tcgetattr(fd, &Opt);
for ( i= 0; i 0)
set_speed(fd,19200);
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,512))>0)
{
printf("nLen %dn",nread);
buff[nread+1]='';
printf("n%s",buff);
}
}
//close(fd);
//exit(0);
}
我在win2k里通过串口调试器向Com1发送数据,并把Com2和Com1用串口线对接,通过以下程序接收Com2的数据时出现上述情况。用串口调试器已经验证Com2肯定有数据。
在OpenDev后,fd = 5,对吗?
#include /*标准输入输出定义*/
#include /*标准函数库定义*/
#include /*Unix标准函数定义*/
#include /**/
#include /**/
#include /*文件控制定义*/
#include /*PPSIX终端控制定义*/
#include /*错误号定义*/
int speed_arr[] = { B38400, B19200, B9600, B4800, B2400, B1200, B300,
B38400, B19200, B9600, B4800, B2400, B1200, B300, };
int name_arr[] = {38400, 19200, 9600, 4800, 2400, 1200, 300,
38400, 19200, 9600, 4800, 2400, 1200, 300, };
void set_speed(int fd, int speed)
{
int i;
int status;
struct termios Opt;
tcgetattr(fd, &Opt);
for ( i= 0; i 0)
set_speed(fd,19200);
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,512))>0)
{
printf("nLen %dn",nread);
buff[nread+1]='';
printf("n%s",buff);
}
}
//close(fd);
//exit(0);
}
|
fd只要是大于0表示设备已经打开成功!
不知道你的线是怎么连接看看数据位是否正确.
不知道你的线是怎么连接看看数据位是否正确.
|
程序没有错,
可你确定你的串口里面有数据?
可你确定你的串口里面有数据?