设置串口属性
来源:互联网 发布:渭南广电网络官网 编辑:程序博客网 时间:2024/05/23 19:02
INT32 set_termios_attr(INT32 fd,INT32 nBits,INT32 stopBits,char oodeven,INT32 iBaudRate)
{
struct termios new_termios;
/*备份串口终端属性*/
if(tcgetattr(fd,&g_old_termios))
{
log_printf(ERROR_LEVEL,SHELL_MODULE,"tcgetattr fail.\n");
return RUN_ERROR;
}
/*设置串口终端属性*/
new_termios.c_cflag |= CLOCAL | CREAD;
new_termios.c_cflag &= ~CSIZE; /*去除位掩码*/
switch(nBits) /*数据位*/
{
case 5: new_termios.c_cflag |= CS5;break;
case 6: new_termios.c_cflag |= CS6;break;
case 7: new_termios.c_cflag |= CS7;break;
case 8: new_termios.c_cflag |= CS8;break;
default: break;
}
if(2 == stopBits)
{
new_termios.c_cflag |= CSTOPB; /*2位停止位*/
}
else
{
new_termios.c_cflag &= ~CSTOPB; /*1位停止位*/
}
/*设置奇偶校验位*/
switch(oodeven)
{
case 'O' : /*奇校验*/
new_termios.c_cflag |= PARENB;
new_termios.c_cflag |= PARODD;
new_termios.c_lflag |= (INPCK | ISTRIP);
break;
case 'E' : /*偶校验*/
new_termios.c_cflag |= PARENB;
new_termios.c_cflag &= ~PARODD;
new_termios.c_lflag |= (INPCK | ISTRIP);
break;
case 'N':
new_termios.c_cflag &= ~PARENB; /*无奇偶校验*/
break;
default:
break;
}
switch(iBaudRate) /*波特率*/
{
case 1200: cfsetospeed(&new_termios,B1200); cfsetispeed(&new_termios,B1200);break;
case 2400: cfsetospeed(&new_termios,B2400); cfsetispeed(&new_termios,B2400);break;
case 4800: cfsetospeed(&new_termios,B4800); cfsetispeed(&new_termios,B4800);break;
case 9600: cfsetospeed(&new_termios,B9600); cfsetispeed(&new_termios,B9600);break;
case 19200: cfsetospeed(&new_termios,B19200);cfsetispeed(&new_termios,B19200); break;
case 38400: cfsetospeed(&new_termios,B38400);cfsetispeed(&new_termios,B38400); break;
case 57600: cfsetospeed(&new_termios,B57600);cfsetispeed(&new_termios,B57600); break;
case 115200: cfsetospeed(&new_termios,B115200);cfsetispeed(&new_termios,B115200); break;
case 230400: cfsetospeed(&new_termios,B230400);cfsetispeed(&new_termios,B230400); break;
default:break;
}
new_termios.c_cc[VTIME] = 0; /*对接收字符和等待时间没有特别要求*/
new_termios.c_cc[VMIN] = 0; /*设置最小接收字符*/
//new_termios.c_lflag &= ~IXON; /*禁止输出的XON/XOFF流控制*/
//new_termios.c_lflag &= ~IXOFF; /*禁止输入的XON/XOFF流控制*/
new_termios.c_lflag |= ICANON; /*启用标准模式*/
//new_termios.c_lflag |= ECHO; /*回显输入字符*/
//new_termios.c_lflag &= ~ECHOE; /*如果设置了ICANON,字符ERASE擦除前一个输入字符*/
tcflush(fd,TCIFLUSH); /*刷新收到的数据但不读*/
//tcflush(fd,TCOFLUSH); /*刷新写入的数据但不传送*/
//tcflush(fd,TCIOFLUSH); /*同时刷新收到的数据但不读,刷新写入的数据但不传送*/
if(tcsetattr(fd,TCSAFLUSH,&new_termios)) /*TCSANOW*/
{
log_printf(ERROR_LEVEL,SHELL_MODULE,"tcsetattr fail.\n");
return RUN_ERROR;
}
return RUN_OK;
}
{
struct termios new_termios;
/*备份串口终端属性*/
if(tcgetattr(fd,&g_old_termios))
{
log_printf(ERROR_LEVEL,SHELL_MODULE,"tcgetattr fail.\n");
return RUN_ERROR;
}
/*设置串口终端属性*/
new_termios.c_cflag |= CLOCAL | CREAD;
new_termios.c_cflag &= ~CSIZE; /*去除位掩码*/
switch(nBits) /*数据位*/
{
case 5: new_termios.c_cflag |= CS5;break;
case 6: new_termios.c_cflag |= CS6;break;
case 7: new_termios.c_cflag |= CS7;break;
case 8: new_termios.c_cflag |= CS8;break;
default: break;
}
if(2 == stopBits)
{
new_termios.c_cflag |= CSTOPB; /*2位停止位*/
}
else
{
new_termios.c_cflag &= ~CSTOPB; /*1位停止位*/
}
/*设置奇偶校验位*/
switch(oodeven)
{
case 'O' : /*奇校验*/
new_termios.c_cflag |= PARENB;
new_termios.c_cflag |= PARODD;
new_termios.c_lflag |= (INPCK | ISTRIP);
break;
case 'E' : /*偶校验*/
new_termios.c_cflag |= PARENB;
new_termios.c_cflag &= ~PARODD;
new_termios.c_lflag |= (INPCK | ISTRIP);
break;
case 'N':
new_termios.c_cflag &= ~PARENB; /*无奇偶校验*/
break;
default:
break;
}
switch(iBaudRate) /*波特率*/
{
case 1200: cfsetospeed(&new_termios,B1200); cfsetispeed(&new_termios,B1200);break;
case 2400: cfsetospeed(&new_termios,B2400); cfsetispeed(&new_termios,B2400);break;
case 4800: cfsetospeed(&new_termios,B4800); cfsetispeed(&new_termios,B4800);break;
case 9600: cfsetospeed(&new_termios,B9600); cfsetispeed(&new_termios,B9600);break;
case 19200: cfsetospeed(&new_termios,B19200);cfsetispeed(&new_termios,B19200); break;
case 38400: cfsetospeed(&new_termios,B38400);cfsetispeed(&new_termios,B38400); break;
case 57600: cfsetospeed(&new_termios,B57600);cfsetispeed(&new_termios,B57600); break;
case 115200: cfsetospeed(&new_termios,B115200);cfsetispeed(&new_termios,B115200); break;
case 230400: cfsetospeed(&new_termios,B230400);cfsetispeed(&new_termios,B230400); break;
default:break;
}
new_termios.c_cc[VTIME] = 0; /*对接收字符和等待时间没有特别要求*/
new_termios.c_cc[VMIN] = 0; /*设置最小接收字符*/
//new_termios.c_lflag &= ~IXON; /*禁止输出的XON/XOFF流控制*/
//new_termios.c_lflag &= ~IXOFF; /*禁止输入的XON/XOFF流控制*/
new_termios.c_lflag |= ICANON; /*启用标准模式*/
//new_termios.c_lflag |= ECHO; /*回显输入字符*/
//new_termios.c_lflag &= ~ECHOE; /*如果设置了ICANON,字符ERASE擦除前一个输入字符*/
tcflush(fd,TCIFLUSH); /*刷新收到的数据但不读*/
//tcflush(fd,TCOFLUSH); /*刷新写入的数据但不传送*/
//tcflush(fd,TCIOFLUSH); /*同时刷新收到的数据但不读,刷新写入的数据但不传送*/
if(tcsetattr(fd,TCSAFLUSH,&new_termios)) /*TCSANOW*/
{
log_printf(ERROR_LEVEL,SHELL_MODULE,"tcsetattr fail.\n");
return RUN_ERROR;
}
return RUN_OK;
}
0 0
- 设置串口属性
- C++ 串口通信编程 设置串口属性
- linux kernel 串口设置属性
- 设置串口属性基本流程
- 如何设置串口的属性
- Linux系统中设置串口属性的基本流程
- 致雅嵌入式工作室——串口属性设置代码
- 串口设置
- 串口设置
- 串口设置
- 地磅称量系统之(59) 接收串口数据(串口控件的属性设置和超级终端的使用)
- Linux串口c_cc[VTIME]和c_cc[VMIN]属性设置的作用
- WinCE串口设置
- 设置串口通信参数
- 串口的设置程序
- linux设置串口终端
- Minicom 设置串口
- TCC89x串口设置要点
- 五个步骤,保护移动应用免受恶意攻击
- SQL Server setup media does not support the language of the OS or does not have ENU localized files.
- H.264简介
- 从开发到上线 实战持续交付 -李道兵
- 使用git和github进行协同开发流程
- 设置串口属性
- 使用sublime text 2和3调试node-webkit
- NetBeans IDE可视化java编程菜鸟笔记--用NetBeans创建一个Hello World项目
- 做一个合格的菜鸟
- Eclipse中启动tomcat 浏览器无法访问8080端口
- 利用旋转实现时钟(IOS)
- Android Performance(7) Investigating Your RAM Usage
- 关于Ubuntu下 如何在bash使用phpstudy 套件中的php 的方法
- 前端实战之登陆注册页