入门篇-学习点滴二

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 关闭打开的串口
 

你可能感兴趣的:(职场,休闲)