主题 : mini2440 使用SAC1发送数据 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 63205
精华: 0
发帖: 12
金钱: 60 两
威望: 12 点
综合积分: 24 分
注册时间: 2012-02-16
最后登录: 2012-03-15
楼主  发表于: 2012-02-18 14:05

 mini2440 使用SAC1发送数据

我用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;
}


级别: 新手上路
UID: 58585
精华: 0
发帖: 30
金钱: 160 两
威望: 32 点
综合积分: 60 分
注册时间: 2011-11-10
最后登录: 2013-05-27
1楼  发表于: 2012-02-29 17:25
问题解决了吗?
级别: 新手上路
UID: 58585
精华: 0
发帖: 30
金钱: 160 两
威望: 32 点
综合积分: 60 分
注册时间: 2011-11-10
最后登录: 2013-05-27
2楼  发表于: 2012-02-29 17:29
我测试出现:从串口0写数据发往到串口2,出现发送的和接收到的数据不一样;反过来从串口2 往串口0发数据也是收发数据不一样。