微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 文件I/O编程之: 嵌入式Linux串口应用编程

文件I/O编程之: 嵌入式Linux串口应用编程

时间:08-13 来源:3721RD 点击:

n MIN = 0和TIME > n MIN = 0和TIME > 0:只要有数据可读或者经过TIME个十分之一秒的时间,read()函数则立即返回,返回值为被读取的字节数。如果超时并且未读到数据,则read()函数返回0。

n MIN > 0和TIME > 0:当有MIN个字节可读或者两个输入字符之间的时间间隔超过TIME个十分之一秒时,read()函数才返回。因为在输入第一个字符之后系统才会启动定时器,所以在这种情况下,read()函数至少读取一个字节之后才返回。

按照严格意义来讲,原始模式是一种特殊的非规范模式。在原始模式下,所有的输入数据以字节为单位被处理。在这个模式下,终端是不可回显的,而且所有特定的终端输入/输出控制处理不可用。通过调用cfmakeraw()函数可以将终端设置为原始模式,而且该函数通过以下代码可以得到实现。

termios_p->c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP

| INLCR | IGNCR | ICRNL | IXON);

termios_p->c_oflag &= ~OPOST;

termios_p->c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN);

termios_p->c_cflag &= ~(CSIZE | PARENB);

termios_p->c_cflag |= CS8;

下面讲解设置串口的基本方法。设置串口中最基本的包括波特率设置,校验位和停止位设置。在这个结构中最为重要的是c_cflag,通过对它的赋值,用户可以设置波特率、字符大小、数据位、停止位、奇偶校验位和硬软流控等。另外c_iflag和c_cc也是比较常用的标志。在此主要对这3个成员进行详细说明。c_cflag支持的常量名称如表6.11所示。其中设置波特率宏名为相应的波特率数值前加上‘B’,由于数值较多,本表没有全部列出。

表6.11 c_cflag支持的常量名称

CBAUD

波特率的位掩码

B0

0波特率(放弃DTR)

B1800

1800波特率

B2400

2400波特率

续表

B4800

4800波特率

B9600

9600波特率

B19200

19200波特率

B38400

38400波特率

B57600

57600波特率

B115200

115200波特率

EXTA

外部时钟率

EXTB

外部时钟率

CSIZE

数据位的位掩码

CS5

5个数据位

CS6

6个数据位

CS7

7个数据位

CS8

8个数据位

CSTOPB

2个停止位(不设则是1个停止位)

CREAD

接收使能

PARENB

PARODD

校验位使能

使用奇校验而不使用偶校验

HUPCL

最后关闭时挂线(放弃DTR)

CLOCAL

本地连接(不改变端口所有者)

CRTSCTS

硬件流控

在这里,不能直接对c_cflag成员初始化,而要将其通过"与"、"或"操作使用其中的某些选项。输入模式标志c_iflag用于控制端口接收端的字符输入处理。c_iflag支持的常量名称如表6.12所示。

表6.12 c_iflag支持的常量名称

INPCK

奇偶校验使能

IGNPAR

忽略奇偶校验错误

PARMRK

奇偶校验错误掩码

ISTRIP

裁减掉第8位比特

IXON

启动输出软件流控

IXOFF

启动输入软件流控

IXANY

输入任意字符可以重新启动输出(默认为输入起始字符才重启输出)

IGNBRK

忽略输入终止条件

BRKINT

当检测到输入终止条件时发送SIGINT信号

INLCR

将接收到的NL(换行符)转换为CR(回车符)

IGNCR

忽略接收到的CR(回车符)

ICRNL

将接收到的CR(回车符)转换

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top