LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1136|回复: 2

关于linux串口编程

[复制链接]
发表于 2008-10-6 11:28:06 | 显示全部楼层 |阅读模式
我的串口通讯程序在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 >,不断的改参数,可是还是不行,晕了,望各位达人能指教一二,万分感激.
 楼主| 发表于 2008-10-6 15:49:18 | 显示全部楼层
补充一下,把
newtio.c_cflag |= PARENB; //Enable parity bit
newtio.c_cflag |= PARODD; //Use odd parity instead of even

改为:
newtio.c_cflag &=~ PARENB;
也不行,串口肯定没问题,因为我用minicom是正常的,调了几天了,还是没能解决,不知道哪儿出错了。
回复 支持 反对

使用道具 举报

发表于 2008-10-15 14:31:57 | 显示全部楼层
Linux 串口编程(附测试程序)

http://www.b2tang.com/viewthread.php?tid=26&extra=page%3D5
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表