Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16351
  • 博文数量: 9
  • 博客积分: 320
  • 博客等级: 一等列兵
  • 技术积分: 100
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-29 10:57
文章分类
文章存档

2011年(1)

2009年(8)

我的朋友
最近访客

分类: LINUX

2009-09-29 11:30:40

今天写串口驱动遇到了一个问题,就是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);                 // 激活新配置

}


阅读(698) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~