今天写串口驱动遇到了一个问题,就是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) |