|
我的串口通讯程序在2.4内核运行很正常,可是现在换成2.6内核后怎么也接收不到数据,不知道为什么,难道2.4和2.6内核对串口编程有修改吗?可是在网上查不到任何关于此修改的资料,郁闷了,以下是初始化串口的源代码:
struct termios ,newtio;
tcgetattr(hCom[index],&oldtio); //储存当前的串口设置
bzero(&newtio, sizeof(newtio)); //清空新的串口设置结构体
cfsetispeed(&newtio,B9600); //设置波特率为:9600
cfsetospeed(&newtio,B9600); //设置波特率为:9600
//CLOCAL : 本地连接,无调制解调器控制
//CREAD : 允许接收数据
newtio.c_cflag = CLOCAL | CREAD;
newtio.c_cflag |= PARENB; //Enable parity bit
newtio.c_cflag |= PARODD; //Use odd parity instead of even
newtio.c_cflag &= ~CSTOPB; //1 stop bits
newtio.c_cflag &= ~CSIZE; // Mask the character size bits
newtio.c_cflag |= CS8; // Select 8 data bits
//不处理,原始数据输入
newtio.c_lflag = 0;
//INPCK : 奇偶校验检查
newtio.c_iflag = INPCK;
//不处理,就原始数据输出
newtio.c_oflag = 0;
newtio.c_cc[VINTR] = 0; // Ctrl-c
newtio.c_cc[VQUIT] = 0; // Ctrl-\
newtio.c_cc[VERASE] = 0; // del
newtio.c_cc[VKILL] = 0; // @
newtio.c_cc[VEOF] = 4; // Ctrl-d
newtio.c_cc[VTIME] = 0; // 不使用字符间的计时器
newtio.c_cc[VMIN] = 1; // 阻塞,直到读取到一个字符
newtio.c_cc[VSWTC] = 0; // ''
newtio.c_cc[VSTART] = 0; // Ctrl-q
newtio.c_cc[VSTOP] = 0; // Ctrl-s
newtio.c_cc[VSUSP] = 0; // Ctrl-z
newtio.c_cc[VEOL] = 0; // ''
newtio.c_cc[VREPRINT] = 0; // Ctrl-r
newtio.c_cc[VDISCARD] = 0; // Ctrl-u
newtio.c_cc[VWERASE] = 0; // Ctrl-w
newtio.c_cc[VLNEXT] = 0; // Ctrl-v
newtio.c_cc[VEOL2] = 0; // ''
//清空数据线,启动新的串口设置
tcflush(hCom[index], TCIFLUSH);
tcsetattr(hCom[index],TCSANOW,&newtio);
参考了<Serial Programming Guide for POSIX Operating Systems >,不断的改参数,可是还是不行,晕了,望各位达人能指教一二,万分感激. |
|