主题 : mini2440开发板把串口0改成普通串口 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 63205
精华: 0
发帖: 12
金钱: 60 两
威望: 12 点
综合积分: 24 分
注册时间: 2012-02-16
最后登录: 2012-03-15
楼主  发表于: 2012-02-16 09:00

 mini2440开发板把串口0改成普通串口

大家好。 我最近在用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;
}