关于串口编程如下两篇文章比较详细;
http://blog.csdn.net/mtv0312/article/details/6599162
http://blog.chinaunix.net/uid-21411227-id-1826767.html
串口操作就是对termios 的设置,头文件#include <termios.h> /*PPSIX 终端控制定义*/
struct termios 结构体的各成员值。
struct termio
{
unsigned short c_iflag; /* 输入模式标志 */
unsigned short c_oflag; /* 输出模式标志 */
unsigned short c_cflag; /* 控制模式标志*/
unsigned short c_lflag; /* local mode flags */
unsigned char c_line; /* line discipline */
unsigned char c_cc[NCC]; /* control characters */
};
项目中串口设置情况:
1. 打开串口
m_fd = open(m_devname, O_RDWR); //以读写方式打开串口
2.得到串口参数:
struct termios term;
tcgetattr(m_fd, &term)
3.设置串口参数:
term.c_lflag &= ~(ICANON | ECHO | ISIG); //选择原始输入,根本不会被处理。输入字符只是被原封不动的接收。
term.c_iflag &= ~(ISTRIP | IUCLC | IGNCR | ICRNL | INLCR | IXON | PARMRK); 控制从端口上收到的字符的输入过程
term.c_oflag &= ~OPOST; //选择原始输出,而不是加工过的输出
cfsetispeed(&term, B115200); //设置波特率
4. 将设置好的参数写入串口
tcsetattr(m_fd, TCSAFLUSH, &term);
TCSANOW: 不等数据传输完毕就立即改变属性
TCSADRAIN:等待所有数据传输结束才改变属性
TCSAFLUSH:清空输入输出缓冲区才改变属性
5. tcflush函数刷清(扔掉)输入缓存。丢弃开始的一段缓冲区