无论是在PC机上还是在ARM板上,都是如此,本应是0xff却收成了0x7f,何解? 下面是我的测试程序: #include <stdio.h> /* 标准输入输出定义 */ #include <stdlib.h> /* 标准函数库定义 */ #include <unistd.h> /* Unix标准函数定义 */ #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> /* 文件控制定义 */ #include <termios.h> /* POSIX 终端控制定义 */ #include <errno.h> /* 错误号定义 */
/* 串口工作参数是硬编码的 */ int OpenUart(char *pDev, int iFlag) { int fd; struct termios Opt; /*以读写方式打开串口*/ fd = open( pDev, iFlag ); if ( -1 == fd ){ perror("无法打开/dev/ttyS0,请检查该设备是否存在,及其访问权限
"); return -1; }else{ fcntl(fd, F_SETFL, 0); } // 设置参数 tcgetattr( fd, &Opt ); cfsetispeed( &Opt, B38400 ); /* 设置为 38400 bps */ cfsetospeed( &Opt, B38400 ); /* 只有很少的硬件支持输入/输出波特率不同 */ Opt.c_cflag |= CLOCAL | CREAD; Opt.c_cflag &= ~CSIZE; Opt.c_cflag |= CS8; Opt.c_cflag |= ( PARODD | PARENB ); /* 设置为奇效验 */ Opt.c_iflag |= INPCK | ISTRIP; /* enable parity checking */ //Opt.c_cflag &= ~PARENB; //Opt.c_iflag &= ~INPCK; Opt.c_cflag &= ~CSTOPB; /* 1 stop bit */ tcflush( fd, TCIOFLUSH ); Opt.c_cc[VTIME] = 15; /* 设置超时 1.5 seconds */ Opt.c_cc[VMIN] = 0; /* Update the options and do it NOW */ /* for raw mode */ Opt.c_lflag &= ~( ICANON | ECHO | ECHOE | ISIG ); /* Input */ Opt.c_oflag &= ~OPOST; /* Output */ // Opt.c_cflag &= ~CNEW_RTSCTS; /* disable hw flow ctrl */
if( 0 != tcsetattr( fd, TCSANOW, &Opt )){ return -1; }else{ return fd; } }
int main(void) { int fd,i,iCnt; char buff[16]; fd = OpenUart("/dev/ttyS1", O_RDWR | O_NOCTTY | O_NDELAY); //fd = OpenUart("/dev/ttyS1", O_RDWR );
if (-1 == fd ){ return(-1); }else{ printf("open ttyS1 .....
"); }
fcntl(fd, F_SETFL, 0); //恢复串口的状态为阻塞状态,用于等待串口数据的读入
while(1) { do{ iCnt = read(fd,buff,16); }while(iCnt == 0); for(i=0; i<iCnt; i++){ printf("%02X,",buff); } printf("
"); } close(fd); return; }
|