免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1226 | 回复: 0
打印 上一主题 下一主题

linux下串口输入字符 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-29 11:30 |只看该作者 |倒序浏览
今天写串口驱动遇到了一个问题,就是linux下串口驱动的要输入换行符的问题。在我的程序中每输入一个字符都要做如下处理:
        scanf("%c",&cSelect);    // user input select
        getchar();
linux下面和windows(或dos)下不太一样,linux下会将输入的内容缓冲起来,只有按下回车之后才去读取缓冲区中的内容。 所以看来串口输入要注意了。
我的终端初始化函数如下:
               
               
                /*********************************************************************************************
* name:        nit_ttyS
* func:        初始化与MSRE相连的串口
* para:        none
* ret:        none
* modify:
* comment:        
*********************************************************************************************/
void init_ttyS(int fd)
{
    struct termios newtio;
    bzero(&newtio, sizeof(newtio));
    tcgetattr(fd, &newtio);                    // 得到当前串口的参数
    cfsetispeed(&newtio, B9600);                // 将输入波特率设为9600
    cfsetospeed(&newtio, B9600);                // 将输出波特率设为9600
    newtio.c_cflag |= (CLOCAL | CREAD);            // 使能接收并使能本地状态
    newtio.c_cflag &= ~PARENB;                // 无校验 8位数据位1位停止位
    newtio.c_cflag &= ~CSTOPB;
    newtio.c_cflag &= ~CSIZE;
    newtio.c_cflag |= CS8;
    newtio.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);    // 原始数据输入
    newtio.c_oflag &= ~(OPOST);
    newtio.c_cc[VTIME]    = 0;                   // 设置等待时间和最小接收字符数
    newtio.c_cc[VMIN]     = 0;   
    tcflush(fd, TCIFLUSH);                    // 处理未接收的字符
    tcsetattr(fd,TCSANOW,&newtio);                 // 激活新配置
}


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/104425/showart_2062446.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP