2009-5-23
串口编程
对于串口的编程操作,不论是在
wince
还是
linux
下流程都是差不多的,但是一些操作模式还是有很大的差别的,在这里主要记录学习下
linux
下面的一些关于串口编程的结构体和函数调用。
首要要说的就得数
termios
这个结构了,定义如下:
struct termios
{
tcflag c_iflag;
//input flags
tcflag c_oflag;
//output flags
tcflag c_cflag;
//control flags
tcflag c_lflag;
//local flags
cc_t c_cc[NCCS]
//control charactors
};
这个结构体主要是针对串口的一些配置,串口的一些操作都是围绕它来进行的。
下面看一些与串口操作相关的函数调用
tcgetattr
取属性
(termios
结构
)
tcsetattr
设置属性
(termios
结构
)
cfgetispeed
得到输入速度
cfgetospeed
得到输出速度
cfsetispeed
设置输入速度
cfsetospeed
设置输出速度
tcdrain
等待所有输出都被传输
tcflow
挂起传输或接收
tcflush
刷清未决输入和
/
或输出
tcsendbreak
送
BREAK
字符
tcgetpgrp
得到前台进程组
ID
tcsetpgrp
设置前台进程组
ID
要用到的东西,说完了,下面看下,这个流程对上述函数的调用过程。
1.
打开串口
fd = open( "/dev/ttyS0", O_RDWR|O_NOCTTY|O_NDELAY);
//ttyo
代表串口
1
2.
设置读写的阻塞状态
fcntl(fd, F_SETFL, 0);
3.
检查串口是否已被占用
isatty(STDIN_FILENO);
4.
对该打开串口的当前配置进行保存
tcgetattr( fd,&oldtio);
5.
对串口新配置的设置
bzero( &newtio, sizeof( newtio ) );
newtio.c_cflag |= CLOCAL | CREAD;
newtio.c_cflag &= ~CSIZE;
newtio.c_cflag |= CS8;//
数据位为
8
位
newtio.c_cflag |= PARENB;
//
使能奇偶校验
newtio.c_cflag |= PARODD;
//
设置校验为奇校验
newtio.c_iflag |= (INPCK | ISTRIP);
cfsetispeed(&newtio, B115200);
//
设置输入波特率为
115200
cfsetospeed(&newtio, B115200);
//
设置输出波特率为
115200
newtio.c_cflag &= ~CSTOPB;
//
设置停止位为
1
位
newtio.c_cc[VTIME] = 0;
newtio.c_cc[VMIN] = 0;
tcflush(fd,TCIFLUSH);
//
设置
flush
为输入
flush
tcsetattr(fd,TCSANOW,&newtio);
//
设置新的配置
6.
读写用
read
,
write
函数
7.
最后用
close
关闭打开的串口