? TCSAFLUSH 发送了所有输出后更改才发生 。 更进一步 , 在更改发生时未读的所有输入数据都被删除 ( 刷
清)
使用如: tcsetattr(fd,TCSANOW,&newtio)
4 、 在配置完串口的相关属性后,就可对串口进行打开,读写操作了。其使用方式与文件操作一样,区别
在于串口是一个终端设备。
(1) 打开串口
fd = open( "/dev/ttyS0", O_RDWR|O_NOCTTY|O_NDELAY);
Open 函数中除普通参数外,另有两个参数 O_NOCTTY 和 O_NDELAY 。
O_NOCTTY: 通知 linux 系统,这个程序不会成为这个端口的控制终端。
O_NDELAY: 通知 linux 系统不关心 DCD 信号线所处的状态(端口的另一端是否激活或者停止 ) 。
(2) 恢复串口的状态为阻塞状态,用于等待串口数据的读入。用 fcntl 函数:
fcntl ( fd, F_SETFL, 0 )
;
(3) 接着,测试打开的文件描述府是否引用一个终端设备,以进一步确认串口是否正确打开。
isatty(STDIN_FILENO);
(4) 串口的读写与普通文件一样,使用 read,write 函数。
read(fd,buf,8);
write(fd,buf,8);
以下为一简单的程序实例:
de> # include < stdio . h >
# include < string . h >
# include < sys / types . h >
# include < errno . h >
# include < sys / stat . h >
# include < fcntl . h >
# include < unistd . h >
# include < termios . h >
# include < stdlib . h >
int set_opt ( int fd , int nSpeed , int nBits , char nEvent , int nStop )
{
struct termios newtio , oldtio ;
if ( tcgetattr ( fd ,& oldtio ) != 0 ) {
perror ( "SetupSerial 1" );
return - 1 ;
}
bzero ( & newtio , sizeof ( newtio ) );
newtio . c_cflag |= CLOCAL | CREAD ;
newtio . c_cflag &= ~ CSIZE ;
评论3