首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

mini2440 串口读写解决思路

2012-02-21 
mini2440 串口读写以下串口能正确写,但是不能读,请高人指教一下,谢谢int main(){int fdchar *buf_rchar

mini2440 串口读写
以下串口能正确写,但是不能读,请高人指教一下,谢谢
int main()
{
int fd;
char *buf_r;
char buf_w[100];
struct termios opt;
char af = 0;
FILE *f;

fd = open("/dev/ttySAC1", O_RDWR);

if(fd < 0) printf("ttySAC1 open err");

tcgetattr(fd,&opt);
tcflush(fd, TCIFLUSH);
cfsetispeed(&opt,B38400);
cfsetospeed(&opt,B38400);

tcsetattr(fd,TCSANOW,&opt);
tcflush(fd,TCIOFLUSH);

while(1)
{
sprintf(buf_w,"%c%c%c%c%c%c%c",0x68,0x68,0x68,0x68,0x68,0x68,50);
printf("write %s\n",buf_w);

write(fd, buf_w, strlen(buf_w));

read(fd,buf_r, 5);
printf("read : %s\n",buf_r);

sleep(2);

}

}



[解决办法]
在中间给它,延时一下,还有就是你串口配置在好好看看吧

[解决办法]
恩。

write 和 read 之间sleep(2);
[解决办法]
配置一下数据位等信息试试

C/C++ code
/***@brief   设置串口数据位,停止位和效验位*@param  fd     类型  int  打开的串口文件句柄*@param  databits 类型  int 数据位   取值 为 7 或者8*@param  stopbits 类型  int 停止位   取值为 1 或者2*@param  parity  类型  int  效验类型 取值为N,E,O,,S*/int set_Parity(int fd,int databits,int stopbits,int parity){     struct termios options;     if  ( tcgetattr( fd,&options)  !=  0) {         perror("SetupSerial 1");             return(-1);      }    options.c_cflag &= ~CSIZE;     switch (databits) /*设置数据位数*/    {           case 7:                    options.c_cflag |= CS7;             break;        case 8:                 options.c_cflag |= CS8;            break;           default:                fprintf(stderr,"Unsupported data size\n");             return (-1);      }    switch (parity)     {           case 'n':        case 'N':                options.c_cflag &= ~PARENB;   /* Clear parity enable */            options.c_iflag &= ~INPCK;     /* Enable parity checking */             break;          case 'o':           case 'O':                 options.c_cflag |= (PARODD | PARENB); /* 设置为奇效验*/              options.c_iflag |= INPCK;             /* Disnable parity checking */             break;          case 'e':          case 'E':               options.c_cflag |= PARENB;     /* Enable parity */                options.c_cflag &= ~PARODD;   /* 转换为偶效验*/                 options.c_iflag |= INPCK;       /* Disnable parity checking */            break;        case 'S':         case 's':  /*as no parity*/               options.c_cflag &= ~PARENB;            options.c_cflag &= ~CSTOPB;break;          default:               fprintf(stderr,"Unsupported parity\n");                return (-1);      }      /* 设置停止位*/      switch (stopbits)    {           case 1:                options.c_cflag &= ~CSTOPB;              break;          case 2:                options.c_cflag |= CSTOPB;             break;        default:                 fprintf(stderr,"Unsupported stop bits\n");               return (-1);     }     /* Set input parity option */     if (parity != 'n')           options.c_iflag |= INPCK;     tcflush(fd,TCIFLUSH);    //设置最少字符和等待时间,对于接收字符和等待时间没有特别要求时,可设为0//    options.c_cc[VTIME] = 150; /* 设置超时15 seconds*/       options.c_cc[VTIME] = 0; /* 设置超时0 seconds*/       options.c_cc[VMIN] = 0; /* Update the options and do it NOW */    //如果不是开发终端之类的,只是串口传输数据,而不需要串口来处理,那么使用原始模式(Raw Mode)方式来通讯    options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);//Input     options.c_oflag &= ~OPOST; //Output     if (tcsetattr(fd,TCSANOW,&options) != 0)       {         perror("SetupSerial 3");           return (-1);      }     return (0);  } 

热点排行