大家好。 我最近在用2440开发板上的串口接串口蓝牙模块。想通过操作设备文件/dev/ttySAC0 来向串口蓝牙发数据。但遇到一个问题让我不解因为串口0被linux当成终端。因此它会向蓝牙模块输出很多没用的信息。 我想把它的终端功能屏蔽掉。 看了些网上的做法把supervivi的参数中的console=ttySAC0 去掉后。发现大部分信息是不在超级终端上显示了。我的串口应用程序也能跑起来。但终端上也不显示我在应用程序里发送的字符了(比如我想发送hello字符)。而且终端上还是会显示一行解压内核的信息。 不知道是什么情况。请用过的人帮帮忙,给我指点一下。 其实我最后是得用arm串口0给那个串口蓝牙发AT指令的。
附上我的串口应用程序:
#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)
{
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_cc[VTIME]=0;
newtio.c_cc[VMIN]=0;
tcflush(fd,TCIFLUSH);
if((tcsetattr(fd,TCSANOW,&newtio))!=0)
{
return -1;
}
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)
{
return -1;
}
}
else if(comport==2)
{
fd=open("/dev/ttySAC1",O_RDWR|O_NOCTTY|O_NDELAY);
if(fd==-1)
{
return -1;
}
}
else if(comport==3)
{
fd=open("/dev/ttySAC2",O_RDWR|O_NOCTTY|O_NDELAY);
if(fd==-1)
{
return -1;
}
}
return fd;
}
int main(void)
{
int fd;
int fd2;
int nread;
int i;
char buff[]={"Hello"};
if((i=set_opt(fd,115200,8,'N',1))<0)
{
return -1;
}
if((fd=open_port(fd,1))<0)
{
return -1;
}
nread=60;
fd2=open("/dev/my2440_leds",0);
if(fd2<0)
{
return -1;
}
ioctl(fd2,0,0);
ioctl(fd2,1,1);
ioctl(fd2,0,2);
ioctl(fd2,1,3);
write(fd,buff,sizeof(buff));
write(fd,buff,sizeof(buff));
write(fd,buff,sizeof(buff));
write(fd,buff,sizeof(buff));
write(fd,buff,sizeof(buff));
close(fd);
close(fd2);
return 0;
}