主题 : 请教 串口波特率问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 5121
精华: 0
发帖: 10
金钱: 100 两
威望: 100 点
综合积分: 20 分
注册时间: 2009-04-11
最后登录: 2017-09-13
楼主  发表于: 2009-07-14 20:17

 请教 串口波特率问题

板子默认的串口波特率设置为115200,应用需要和波特率为9600的打印机相连,我在在mini2440中做如下设置时
  cfsetispeed(&newtio, B9600);
   cfsetospeed(&newtio, B9600);

打印机和PC上的超级终端并不能接收数据,高手指教下我该如何把应用波特率设成9600?这样设置不对吗?很多书上介绍linux串口通信时都是这么讲的,而且当我改成115200时,PC上的超级终端和开发板是能通信的!
级别: 新手上路
UID: 5121
精华: 0
发帖: 10
金钱: 100 两
威望: 100 点
综合积分: 20 分
注册时间: 2009-04-11
最后登录: 2017-09-13
1楼  发表于: 2009-07-15 09:26
贴下我的程序,麻烦高手看下:
int fd;

        char run[]="\x1b\x40This is a test for printer,I hope this test will be success:) ";
      
        struct termios newtio,oldtio;
        
        

    if((fd=open( "/dev/tts/0", O_RDWR)<0))
      perror("open_port error");    
        else
         // printf("open success");       ////     open the serio

      

        
      
    if  ( tcgetattr( fd,&oldtio)  !=  0) {
        perror("SetupSerial 1");
        //return -1;
    }       ///save the former seri
      
        bzero( &newtio, sizeof( newtio ) );
    newtio.c_cflag  |=  CLOCAL | CREAD;
    newtio.c_cflag &= ~CSIZE;

        
        newtio.c_cflag |= CS8;
        newtio.c_cflag |= B9600;
        newtio.c_cflag &= ~PARENB;
        newtio.c_cflag &=  ~CSTOPB;
        cfsetispeed(&newtio, B9600);
    cfsetospeed(&newtio, B9600);
        newtio.c_cc[VTIME]  = 0;
    newtio.c_cc[VMIN] = 1;

      
      
        tcflush(fd,TCIFLUSH);

        if((tcsetattr(fd,TCSANOW,&newtio))!=0)
    {
        perror("com set error");
              
    }
    
       //  printf("set done!\n"); ////// set the serio

        
    
    
     write(fd,run,(sizeof(run)-1));
        // write(fd,qie,(sizeof(qie)-1));
      
        // tcflush(fd,TCOFLUSH);
         tcsetattr(fd,TCSANOW,&oldtio);
    
    ::close(fd);
级别: 侠客
UID: 4270
精华: 0
发帖: 100
金钱: 995 两
威望: 856 点
综合积分: 200 分
注册时间: 2009-03-07
最后登录: 2011-09-06
2楼  发表于: 2009-07-17 18:32
我想是串口0默认为115200,用于调试,与用户交互的界面。。。 已经被占用了。。。 有没其他串口???
本论坛不提供技术支持,这里是友善之臂用户交流的地方,希望大家共创和谐论坛~~~