linux串口编程

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

c_iflag--输入模式标志参数表
IGNBRK BRKINT
IGNPAR PARMRK INPCK ISTRIP INLCR IGNCR ICRNL IUCLC IXON IXANY IXOFF IMAXBEL
忽略BREAK键输入 如果设置了IGNBRK,BREAK键的输入将被忽略,如果设置了 BRKINT ,将产生SIGINT中断 忽略奇偶校验错误
嵌入式Linux系统高 级应用开发
知识结构
Linux系统下的C编程
Linux下进程线程开发 进程间通信
多线程编程
嵌入式Linux串口应用开发
嵌入式Linux设备驱动开发应用
嵌入式Linux网络编程
课程目标
❖ 了解串口的历史和常用的串口介绍
❖ 掌握串口的设置方法,包括设置波特率、 设置奇偶校验、数据、停止位和打开串口的方 式 ❖ 掌握串口通信,包括串口通信的概念、 串口通信的分类、同步通信和异步通信 ❖ 掌握串口通信基本基本接线方法,包括 RS232C串口通信接线方法和串口调试需要注 意的问题 ❖ 了解Linux串口编程分析
PARENB
使用奇偶校验
PARODD
对输入使用奇偶校验,对输出使用偶校验
HUPCL
关闭设备时挂起
CLOCAL
忽略调制解调器线路状态
CRTSCTS 使用RTS/CTS流控制
c_cflag--控制模式标志 范例: 要设置串口的波特率,程序代码如下,此程序代码会将波特率设为
9600bps;
struct termios options;
ECHO ECHOE
当输入INTR、QUIT、SUSP或DSUSP时,产生相应的信号
使用标准输入模式
在ICANON和XCASE同时设置的情况下,终端只使用大写。如 果只设置了XCASE,则输入字符将被转换为小写字符,除非字 符使用了转义字符(非POSIX,且Linux不支持该参数)
显示输入字符
如果ICANON同时设置,ERASE将删除输入的字符,WERASE 将删除输入的单词
码如下:
options.c_oflag &= ~OPOST;
c_cflag--控制模式标志参数表
CBAUD 波特率(4+1位)(非POSIX)
CBAUDEX 附加波特率(1位)(非POSIX)
CSIZE
字符长度,取值范围为CS5、CS6、CS7或CS8
CSTOPB
设置两个停止位
CREAD
使用接收器
,且会以一次一行的方式将输入传入给应用程序。如:Linux的 shell命令。 非正规模式(Non-canonical):在这种模式中,终端设备不会处 理特殊字符,且会以一次一个字符的方式将输入传入给应用程序 。 如:linux的vim编辑程序
串口文件 在linux中,针对所有的周边设备都提供了设备文件供用户访问,所
奇数位校验,停止位1位。 options.c_cflag |= PARENB; options.c_cflag |= PARODD; options.c_cflag &= ~CSTOPB; options.c_cflag |= CS7;
c_lflag--本地模式标志参数表
ISIG ICANON XCASE
NLDLY CRDLY TABDLY
BSDLY VTDLY FFDLY
处理后输出
将输入的小写字符转换成大写字符(非POSIX) 将输入的NL(换行)转换成CR(回车)及NL(换行) 将输入的CR(回车)转换成NL(换行) 第一行不输出回车符
不输出回车符
发送填充字符以延迟终端输出
以ASCII码的DEL作为填充字符,如果未设置该参数,填充字符 将是NUL(‘\0’)(非POSIX) 换行输出延时,可以取NL0(不延迟)或NL1(延迟0.1s) 回车延迟,取值范围为:CR0、CR1、CR2和 CR3 水平制表符输出延迟,取值范围为:TAB0、TAB1、TAB2和 TAB3 空格输出延迟,可以取BS0或BS1 垂直制表符输出延迟,可以取VT0或VT1 换页延迟,可以取FF0或FF1
options.c_flag &= ~CSTOPB;
options.c_flag |= CS8;
c_cflag--控制模式标志
下列程序将通信协议设为7E1,即传输数据位数为7位, 偶数位校验,停止位1位。
options.c_cflag |= PARENB; options.c_cflag &= ~PARODD; options.c_cflag &= ~CSTOPB; options.c_cflag |= CS7; 下列程序将通信协议设为7O1,即传输数据位数为7位,
c_oflag--输出模式标志 范例: 若要启动输出处理,必须加入OPOST选项,程序代码如下: options.c_oflag |= OPOST; 接着会加入ONLCR选项,如下: options.c_oflag |= OPOST | ONLCR; 它会将换行字符转换为CR-LF对。 另外,若要启动非正规模式,会将OPOST选项设为disable,程序代
使采用用串简口化简为介9芯D型插座(DB9),现在应用中25芯插头座已很少
终端机接口
终端机接口(也称TTY界面)用于让Linux系统通过RS-232 串口连到调制解调器,然后通过电话线与远程计算机系统相连接 。
终端机接口有两种模式: 正规模式(canonical):在这种模式中,终端设备会处理特殊字符
4、USB:通用串行总线,是一个外部总线标准,用于规范电脑与外 部设备的连接和通讯。是应用在PC领域的接口技术。USB接口 支持设备的即插即用和热插拔功能.
5、RJ-45:RJ-45接口,适用于由双绞线构建的网络,这种端口 是最常见的,一般来说以太网集线器都会提供这种端口
使采用用串简口化简为介9芯D型插座(DB9),现在应用中25芯插头座已很少
Quit字符
按CTRL+Z,会传送SIGQIUT信号到终端机
Stop字符
可防止对终端机的进一步输入
Start字符
通常在STOP字符之后重新开始输出
Suspend字符 会传送SIGSUSP信号到终端机
Erase字符
按backspace键会删除此行的最后一个字符
O_NDELAY用于告诉Linux这个程序不介意RS-232的DCD 信号的状态,如果不设置这个标签,那么程序将处于sleep状态 ,直到RS-232有DCD信号进来。
设置串口
最基本的设置串口包括波特率设置,效验位和停止位设置。 串口的设置主要是设置 struct termios 结构体的各成员值。 struct termios { unsigned short c_iflag; 输入模式标志,控制终端输入方式
unsigned short c_oflag; 输出模式标志,控制终端输出方式 unsigned short c_cflag; 控制模式标志,指定终端硬件控制信 息
unsigned short c_lflag; 本地模式标志,控制终端编辑功能 unsigned char c_line; /* line discipline */ unsigned char c_cc[NCC]; 控制字符,用于保存终端驱动程序 中的特殊字符 };
串行串接口口简简介称串口,也称串行通信接口(通常指COM接口),是 采用串行通信方式的扩展接口。
常用串口 1、RS-232-C:也称标准串口,是目前最常用的一种串行通讯接

2、RS-422:为改进RS-232通信距离短、速率低的缺点
3、RS-485:为扩展应用范围,EIA又于1983年在RS-422基础上 制定了RS-485标准,增加了多点、双向通信能力
ECHOK如果ICANON同时设置,KILL将删除当前行
ECHONL
如果ICANON同时设置,即使ECHO没有设置依然显示换行符
ECHOPRT 如果ECHO和ICANON同时设置,将删除打印出的字符(非
POSIX)
TO源自文库TOP
向后台输出发送SIGTTOU信号
c_lflag--本地模式标志 范例: 要将串口设置为正规模式,程序代码如下: options.c_lflag |= ( ICANON | ECHO | ECHOE); 要将串口设置为非正式模式,程序如下: options.c_lflag &= ~( ICANON | ECHO | ECHOE | ISIG);
c_cc[NCCS]--控制字符参数表

说明
VINTR VEOL VQUIT VSTOP VSTART VSUSP VERASE VKILL VEOF VMIN VTIME
Interrupt字符 按CTRL+C,会传送SIGINT信号到终端机
附加的End-of-file字符 按backspace键,像一个行的终止符
标识奇偶校验错误
允许输入奇偶校验
去除字符的第8个比特 将输入的NL(换行)转换成CR(回车) 忽略输入的回车
将输入的回车转化成换行(如果IGNCR未设置的情况下) 将输入的大写字符转换成小写字符(非POSIX) 允许输入时对XON/XOFF流进行控制 输入任何字符将重启停止的输出
允许输入时对XON/XOFF流进行控制 当输入队列满的时候开始响铃,Linux在使用该参数而是认为该 参数总是已经设置
Internet应用基础
串口简介 通信的基本方式可分为并行通信与串行通信两种方式。
并行通信是指数据的各个位同时进行传输的一种通信方式 优点: 传输速度快
缺点:数据有多少位就需要多少根传输线,所以在位数多、传输 距离远时,通信线路复杂,成本高。
串行通信是指数据一位一位地传输的方式。 优点:这种通信方式的数据传输只需一、两根传输线,通信线路 简单,成本低,特别适用于远程通信 缺点:传输速度较慢。多用于传输距离长、低速度的场合。
IGNPAR选项,则可以再加入PARMRK选项的OR组合,则命令 如下:
options.c_iflag |= IGNAPAR | PAMRK; 此时,它会在发生奇偶错误时,会先传入特殊字符NUL来标示有奇
偶错误
c_oflag--输出模式标志参数表
OPOST OLCUC ONLCR OCRNL ONOCR ONLRET OFILL OFDEL
options.c_cflag |= (B9600 | CLOCAL | CREAD ); 要设置串口的传输数据位数,程序代码如下:此程序将数据位数设
为8bits;
options.c_flag |= CS8; 下例程序将通信协议设为8N1,即传输数据位数为8位,没有奇偶校
验,停止位为1位
options.c_flag &= ~PARENB;
打开串口
int fd;
/*以读写方式打开串口*/
fd = open( "/dev/ttyS0", O_RDWR|O_NOCTTY|O_NDELAY);
if (-1 == fd){
/* 不能打开串口一*/
perror(" 提示错误!");
}
注意:O_NOCTTY用于告诉Linux这个程序不想控制TTY界面,如 果不设置这个标签,那么有些输入(如键盘的abort信号)将会 影响程序。
以如果要访问串口,只要打开相关的设备文件即可。 在 Linux 下串口文件是位于 /dev 下的 COM1 串口一 为 /dev/ttyS0 COM2 串口二 为 /dev/ttyS1
• 设置波特率 • 设置奇偶校验、数据、停止位 • 打开串口
串口操作需要的头文件
#include <stdio.h> /*标准输入输出定义*/ #include <stdlib.h> /*标准函数库定义*/ #include <unistd.h> /*Unix 标准函数定义*/ #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> /*文件控制定义*/ #include <termios.h> /*POSIX 终端控制定义*/ #include <errno.h> /*错误号定义*/
c_iflag--输入模式标志
范例: 若要在RS-232接收字符时执行奇偶校验,可以用下面的命令来设

options.c_iflag |= (INPCK | ISTRIP); 若要在设置c_iflag时加入IGNPAR选项,则如下:
options.c_iflag |= IGNPAR; 它会告诉串口忽略奇偶错误,直接传入接收到的数据,若加入了
相关文档
最新文档