Elfboard-ELF开发板 Linux学习笔记(五)—— 应用编程篇 串口通信(上)
一、终端介绍
1.1 终端的概念
终端(Terminal)是用户与计算机进行数据通信的设备,只要能提供给计算机输入和输出功能,它就是终端。
1.2 终端的分类
- 本地终端:PC 机连接了显示器、键盘以及鼠标等设备,这样的一个显示器/键盘组合就是一个本地终端
- 远程终端:对于嵌入式 Linux 开发来说,这是最常见的终端—串口终端。
- 用于串口连接得远程终端:譬如我们可以通过 ssh、Telnet 这些协议登录到一个远程主机。也叫伪终端
1.3 终端对应的设备结点
在Linux系统中,一切皆文件。那么终端当然也不例外,每个终端在/dev目录下都有一个对应的设备结点。
- 本地终端对应的设备结点:/dev/tty* 例如:/dev/tty1-/dev/tty63
- 伪终端对应的设备节点:/dev/pts/* 例如:/dev/pts/0-/dev/pts/1023
当用ssh远程登录到Linux主机时,系统会为远程登录用户分配一个伪终端,这个伪终端的设备节点为/dev/pts/0。 - 串口终端对应的设备结点:/dev/ttymxc* 例如:/dev/ttymxc0-/dev/ttymxc15
注意: 这里的ttymxc0表示UART1,ttymxc1表示UART2,以此类推。
由此可以知道elf出厂系统注册了 4 个串口外设。
二、串口通信介绍
2.1 struct termios 结构体
struct termios {
tcflag_t c_iflag; /* 输入模式 */
tcflag_t c_oflag; /* 输出模式 */
tcflag_t c_cflag; /* 控制模式 */
tcflag_t c_lflag; /* 本地模式 */
cc_t c_line; /* 线路规程 */
cc_t c_cc[NCCS]; /* 特殊控制字符 */
speed_t c_ispeed; /* 输入速率 */
speed_t c_ospeed; /* 输出速率 */
};
2.2 各个模式得参数介绍
-
c_iflag:输入模式:输入模式控制输入数据(终端驱动程序从串口或键盘接收到的字符数据)在被传递给应用程序之前的处理方式。
-
c_oflag:输出模式:输出模式控制输出字符的处理方式,即由应用程序发送出去的字符数据在传递到串口或屏幕之前是如何处理的。
-
c_cflag:控制模式:控制模式控制终端设备的硬件特性,譬如对于串口来说,该字段比较重要,可设置串口波特率、数据位、校验位、停止位等硬件特性。
-
c_lflag:本地模式:本地模式用于控制终端的本地数据处理和工作模式。
-
c_line:线路规程:线路规程控制终端驱动程序如何处理接收到的字符数据。
-
c_cc:特殊控制字符:特殊控制字符是一些字符组合,如 Ctrl+C、Ctrl+Z 等,当用户键入这样的组合键,终端会采取特殊处理方式
-
c_ispeed:输入速率
-
c_ospeed:输出速率