ARM平台也是Linux系统,由ARM发送“hello”,宿主机(Linux系统)接收
ARM上程序:
linux系统中程序:
其中open_port和set_port分别为:
set_port:
int set_opt(int fd,int nSpeed,int nBits,charnEvent,int nStop){ //fd:指定的串口,nSpeed:波特率,nBits:字符大小,nEvent:奇偶校验,nStop:停止位 struct termios new
tio,oldtio;//保存测试现有串口参数设置,在这里如果串口号等出错,会有相关的出错信息 if(tcgetattr(fd,&oldtio)!=0){ perror(“setupserial 1”); return -1; } bzero(&newtio,sizeof(newtio));//清零 //设置字符大小 newtio.c_cflag|=CLOCAL|CREAD;//本地连接和接收使能 newtio.c_cflag&=~CSIZE;//去除数据位位掩码 switch(nBits) { case 7: newtio.c_cflag|=CS7;//7个数据位 break; case 8: newtio.c_cflag|=CS8;//8个数据位 break; } //设置奇偶校验位 switch(nEvent) { case ‘O’://奇数 newtio.c_cflag|=PARENB;//校验位使能 newtio.c_cflag|=PARODD;//使用奇校验 newtio.c_iflag|=(INPCK|ISTRIP);//奇偶校验使能以及除去奇偶校验位 break; case ‘E’://偶数 newtio.c_iflag|=(INPCK|ISTRIP); newtio.c_cflag|=PARENB; newtio.c_cflag&=~PARODD; break; case ‘N’: newtio.c_cflag&=~PARENB; break; }//设置波特率switch(nSpeed) { case 2400: cfsetispeed(&newtio,B2400);//输入波特率 cfsetospeed(&newtio,B2400);//输出波特率 break; case 4800: cfsetispeed(&newtio,B4800); cfsetospeed(&newtio,B4800); break; case 9600: cfsetispeed(&newtio,B9600); cfsetospeed(&newtio,B9600); break; case 115200: cfsetispeed(&newtio,B115200); cfsetospeed(&newtio,B115200); break; case 460800: cfsetispeed(&newtio,B460800); cfsetospeed(&newtio,B460800); break; default: cfsetispeed(&newtio,B9600); cfsetospeed(&newtio,B9600); break; }//设置停止位 if(nStop==1) newtio.c_cflag&=~CSTOPB;//CSTOPB不设置为2,设置1 else if(nStop==2) newtio.c_cflag|=CSTOPB;、//设置等待时间和最小接收字符 newtio.c_cc[VTIME]=0;//最小等待时间 newtio.c_cc[VMIN]=0;//最小接收字符 tcflush(fd,TCIFLUSH);//处理接收字符,刷新收到的数据但是不读//激活新配置 if((tcsetattr(fd,TCSANOW,&newtio))!=0) { perror(“com set error”); return -1; } printf(“set done!
”); return 0;}open_port:int open_port(int fd,int comport){ char *dev[]={“/dev/ttyS0”,”/dev/ttyS1”,”/dev/ttyS2”}; long vdisable; if(comport==1)//串口1 { fd=open(“/dev/ttyS0”,O_RDWR|O_NOCTTY|O_NDELAY); if(-1==fd){ perror(“Can’topen serial port”); return -1; } } if(comport==2)//串口2 { fd=open(“/dev/ttyS1”,O_RDWR|O_NOCTTY|O_NDELAY); if(-1==fd){ perror(“Can’topen serial port”); return -1; } } if(comport==3)//串口3 { fd=open(“/dev/ttyS2”,O_RDWR|O_NOCTTY|O_NDELAY); if(-1==fd){ perror(“Can’topen serial port”); return -1; } }//恢复串口为阻塞状态 if(fcntl(fd,F_SETFL,0)<0) printf(“fcntlfailed!
”); else printf(“fcntl=%d
”,fcntl(fd,F_SETFL,0));//测试是否为终端设备 if(isatty(STDIN_FILENO)==0) printf(“standardinput is not a terminal device
”); else printf(“isatty success
”); printf(“fd-open=%d
”,fd); return fd;}
问题是:Linux系统是用虚拟机装的,为ubuntu12.04,ARM板为micro2440,由ARM发送的“hello
”用串口助手可以接收到,但是Linux系统运行读串口程序时,提示set down(串口设置的最后一个printf语句)之后就没有下文了,也没有显示也没退出程序,请问这是什么原因造成的?应如何修改?
一周热门 更多>