我用mini2440的CON2 向串口助手发送数据 但是结果没有正常显示,只显示了一个字符,但如果改用CON1的话 却可以正常显示。请问有遇到过类似的问题的吗 求教一下?
附代码:
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <errno.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
#include <stdlib.h>
#include <sys/ioctl.h>
int set_opt(int fd,int nSpeed,int nBits,char nEvent,int nStop)
{
struct termios newtio,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;
break;
case 8:
newtio.c_cflag|=CS8;
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;
default:
cfsetispeed(&newtio,B9600);
cfsetospeed(&newtio,B9600);
break;
}
if(nStop==1)
newtio.c_cflag&=~CSTOPB;
else if(nStop==2)
newtio.c_cflag|=CSTOPB;
//newtio.c_cflag&=~CRTSCTS;
//newtio.c_oflag=0;
//newtio.c_lflag=0;
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!\r\n");
return 0;
}
int open_port(int fd,int comport)
{
if(comport==1)
{
fd=open("/dev/ttySAC0",O_RDWR|O_NOCTTY|O_NDELAY);
if(fd==-1)
{
perror("Can't Open Serial Port");
return -1;
}
else
printf("open ttySAC0.....\r\n");
}
else if(comport==2)
{
fd=open("/dev/ttySAC1",O_RDWR|O_NOCTTY|O_NDELAY);
if(fd==-1)
{
perror("Can't Open Serial Port");
return -1;
}
else
printf("open ttySAC1.....\r\n");
}
else if(comport==3)
{
fd=open("/dev/ttySAC2",O_RDWR|O_NOCTTY|O_NDELAY);
if(fd==-1)
{
perror("Can't Open Serial Port");
return -1;
}
else
printf("open ttySAC.....\r\n");
}
if(fcntl(fd,F_SETFL,0)<0)
printf("fcntl failed!\r\n");
else
printf("fcntl=%d\r\n",fcntl(fd,F_SETFL,0));
if(isatty(STDIN_FILENO)==0)
printf("standard input is not a terminal device\n");
else
printf("isatty success!\r\n");
printf("fd-open=%d\r\n",fd);
return fd;
}
int main(void)
{
int fd;
int fd2;
int nread;
int i;
char buff[]={"Hello"};
char m[3]={56,57,61};
int c=32;
char *sdata=c;
if((i=set_opt(fd,115200,8,'N',1))<0)
{
perror("set port error");
return -1;
}
if((fd=open_port(fd,2))<0)
{
perror("open port error");
return -1;
}
nread=60;
fd2=open("/dev/my2440_leds",0);
if(fd2<0)
{
perror("open led error");
return -1;
}
ioctl(fd2,0,0);
ioctl(fd2,1,1);
ioctl(fd2,0,2);
ioctl(fd2,1,3);
write(fd,buff,sizeof(buff));
close(fd);
close(fd2);
return 0;
}