版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1TMTONY 2012Linux 串口编程2TM2Tony n串口简介串口简介n串口设备文件打开与关闭串口设备文件打开与关闭n串口设备设置流程串口设备设置流程n串口设备读写操作串口设备读写操作n开发板串口通讯程序开发板串口通讯程序3TM3Tony n串口简介串口简介n异步串行异步串行 I /O I /O 方式是将传输数据的每个字符一位接一位方式是将传输数据的每个字符一位接一位地传送。数据的各不同位可以分时使用同一传输通道,因地传送。数据的各不同位可以分时使用同一传输通道,因此串行此串行I IO O 可以减少信号连线,最少用一对线即可进行。可以减少信号连线,最少用一对线即可进行。 TxDTxD
2、RxDRxDGnDGnD开发板PC4TM4Tony n串口简介n开始前,线路处于空闲状态,送出连续开始前,线路处于空闲状态,送出连续“1”1”。传送开始时首先发一。传送开始时首先发一个个“”作为起始位,然后出现在通信线上的是字符的二进制编码数作为起始位,然后出现在通信线上的是字符的二进制编码数据。每个字符的数据位长可以约定为据。每个字符的数据位长可以约定为5 5 位、位、6 6 位、位、7 7 位或位或8 8 位,一般位,一般采用采用ASCII ASCII 编码。后面是奇偶校验位,根据约定,用奇偶校验位将所编码。后面是奇偶校验位,根据约定,用奇偶校验位将所传字符中为传字符中为“1”1”的位数凑
3、成奇数个或偶数个也可以约定不要奇偶校的位数凑成奇数个或偶数个也可以约定不要奇偶校验,这样就取消奇偶校验位。最后是表示停止位的验,这样就取消奇偶校验位。最后是表示停止位的“1”1”信号,这个信号,这个停止位可以约定持续停止位可以约定持续1 1 位、位、1.5 1.5 位或位或2 2 位的时间宽度。至此一个字符位的时间宽度。至此一个字符传送完毕,线路又进入空闲,持续为传送完毕,线路又进入空闲,持续为“1”1”。 5TM5Tony n计算机串口的引脚说明 n序号序号 信号名称信号名称 符号符号 流向流向 功能功能n2发送数据发送数据 TXD DTEDCE DTE发送串行数据发送串行数据n3接收数据接
4、收数据 RXD DTEDCE DTE 接收串行数据接收串行数据n4请求发送请求发送 RTS DTEDCE DTE 请求请求 DCE 将线路切换到将线路切换到发送方式发送方式n5允许发送允许发送 CTS DTEDCE DCE 告诉告诉 DTE 线路已接通可线路已接通可以发送数据以发送数据n6数据设备准备好数据设备准备好 DSR DTEDCE DCE 准备好准备好n7信号地信号地信号公共地信号公共地n8载波检测载波检测 DCD DTEDCE 表示表示 DCE 接收到远程载波接收到远程载波n20数据终端准备好数据终端准备好 DTR DTEDCE DTE 准备好准备好n22振铃指示振铃指示 RI DT
5、EDCE 表示表示 DCE 与线路接通,出现振与线路接通,出现振铃铃 6TM6Tony n串行通信是计算机常用的接口,如:串行通信是计算机常用的接口,如:RS-232-CRS-232-C接口。该标接口。该标准规定采用一个准规定采用一个DB25DB25芯引脚连接器或芯引脚连接器或DB9DB9芯引脚连接器。芯引脚连接器。n芯片内部常具有芯片内部常具有UARTUART控制器,其可工作于控制器,其可工作于Interrupt(Interrupt(中断中断模式模式) )或或DMADMA(直接内存访问)模式。(直接内存访问)模式。nUARTUART的操作主要包括以下几个部分:的操作主要包括以下几个部分:数据
6、发送;数据发送;数据接收;数据接收;产生中断;产生中断;产生波特率;产生波特率;LoopbackLoopback模式;模式;红外模式;红外模式;自动流控模式;自动流控模式;n串口参数的配置主要包括:串口参数的配置主要包括:波特率、数据位、停止位、流波特率、数据位、停止位、流控协议。控协议。7TM7Tony Moxa 串口服务器的引脚定义串口服务器的引脚定义8TM8Tony n串口操作 串口操作需要的头文件 #include /*标准输入输出定义*/ #include /*标准函数库定义*/ #include /*Unix 标准函数定义*/ #include #include #include
7、/*文件控制定义*/#include /*PPSIX 终端控制定义*/#include /*错误号定义*/ 9TM9Tony n打开串口 n在在 Linux Linux 下串口文件是位于下串口文件是位于 /dev /dev 下的下的 n串口一串口一 为为 /dev/ttyS0/dev/ttyS0 n串口二串口二 为为 /dev/ttyS1/dev/ttyS1 n打开串口是通过使用标准的文件打开函数操作:打开串口是通过使用标准的文件打开函数操作: int fd; /*以读写方式打开串口*/ fd = open( /dev/ttyS0, O_RDWR); if (-1 = fd) /* 不能打开串
8、口一*/ perror( 提示错误!); 10TM10Tony n设置串口 n最基本的设置串口包括波特率设置,效验位和停止位最基本的设置串口包括波特率设置,效验位和停止位设置。设置。n串口的设置主要是设置串口的设置主要是设置 structstruct termiostermios 结构体的各结构体的各成员值。成员值。 struct termiounsigned short c_iflag; /* 输入模式标志 */unsigned short c_oflag;/* 输出模式标志 */unsigned short c_cflag;/* 控制模式标志*/unsigned short c_lflag
9、; /* local mode flags */unsigned char c_line;/* line discipline */unsigned char c_ccNCC; /* control characters */;11TM11Tony 该结构中该结构中c_cflagc_cflag最为重要,可设置波特率、数据位、校验位、停止最为重要,可设置波特率、数据位、校验位、停止位。在设置波特率时需在数字前加上位。在设置波特率时需在数字前加上BB,如,如B9600B9600。B19200B19200。使用。使用其需通过其需通过“与与”“”“或或”操作方式。操作方式。12TM12Tony n 输
10、入模式输入模式c_iflagc_iflag成员控制端口接收端的字符输入处成员控制端口接收端的字符输入处理。理。13TM13Tony n串口控制函数串口控制函数nTcgetattr取属性(termios结构)nTcsetattr设置属性(termios结构)ncfgetispeed 得到输入速度nCfgetospeed得到输出速度nCfsetispeed设置输入速度nCfsetospeed设置输出速度nTcdrain等待所有输出都被传输ntcflow 挂起传输或接收ntcflush 刷清未决输入和/或输出nTcsendbreak送BREAK字符ntcgetpgrp 得到前台进程组IDntcset
11、pgrp 设置前台进程组ID14TM14Tony n设置串口流程 1.1.保存原先串口配置使用保存原先串口配置使用tcgetattr(fd,&oldtiotcgetattr(fd,&oldtio) )函数函数nstructstruct termiostermios newtio,oldtionewtio,oldtio; ;ntcgetattrtcgetattr( ( fd,&oldtiofd,&oldtio );); 2.2.激活选项有激活选项有CLOCALCLOCAL和和CREAD,CREAD,用于本地连接和接收使能。用于本地连接和接收使能。n newtio.
12、c_cflagnewtio.c_cflag | = CLOCAL | CREAD; | = CLOCAL | CREAD; 3.3.设置波特率,使用函数设置波特率,使用函数cfsetispeedcfsetispeed、 cfsetospeedcfsetospeedn cfsetispeed(&newtiocfsetispeed(&newtio, B115200);, B115200);ncfsetospeed(&newtiocfsetospeed(&newtio, B115200);, B115200);15TM15Tony n设置串口流程 4.4.设置数据位,
13、需使用掩码设置。设置数据位,需使用掩码设置。nnewtio.c_cflagnewtio.c_cflag &= CSIZE; &= CSIZE; nnewtio.c_cflagnewtio.c_cflag |= CS8; |= CS8;5.5.设置奇偶校验位,使用设置奇偶校验位,使用c_cflagc_cflag和和c_iflagc_iflag。n设置奇校验:设置奇校验:nnewtio.c_cflagnewtio.c_cflag |= PARENB; |= PARENB;nnewtio.c_cflagnewtio.c_cflag |= PARODD; |= PARODD;nnewt
14、io.c_iflagnewtio.c_iflag |= (INPCK | ISTRIP); |= (INPCK | ISTRIP);6.6. 设置偶校验:设置偶校验:nnewtio.c_iflagnewtio.c_iflag |= (INPCK | ISTRIP); |= (INPCK | ISTRIP);nnewtio.c_cflagnewtio.c_cflag |= PARENB; |= PARENB;nnewtio.c_cflagnewtio.c_cflag &= PARODD; &= PARODD;16TM16Tony n设置串口流程 7.7.设置停止位,通过激活设置停
15、止位,通过激活c_cflagc_cflag中的中的CSTOPBCSTOPB实现。若停实现。若停止位为止位为1 1,则清除,则清除CSTOPBCSTOPB,若停止位为,若停止位为2 2,则激活,则激活CSTOPBCSTOPB。newtio.c_cflagnewtio.c_cflag &= CSTOPB; &= CSTOPB;8.8.设置最少字符和等待时间,对于接收字符和等待时间设置最少字符和等待时间,对于接收字符和等待时间没有特别要求时,可设为没有特别要求时,可设为0 0。newtio.c_ccVTIMEnewtio.c_ccVTIME = 0; = 0;newtio.c_ccV
16、MINnewtio.c_ccVMIN = 0; = 0;17TM17Tony n设置串口流程 9.9.处理要写入的引用对象处理要写入的引用对象tcflushtcflush函数刷清(抛弃)输入缓存(终端驱动程序已接函数刷清(抛弃)输入缓存(终端驱动程序已接收到,但用户程序尚未读)或输出缓存(用户程序已收到,但用户程序尚未读)或输出缓存(用户程序已经写,但尚未发送)。经写,但尚未发送)。intint tcflush(inttcflush(int filedesfiledes, , intint queue ) queue )queuequeue数应当是下列三个常数之一:数应当是下列三个常数之一:
17、TCIFLUSH TCIFLUSH 刷清输入队列。刷清输入队列。 TCOFLUSH TCOFLUSH 刷清输出队列。刷清输出队列。 TCIOFLUSH TCIOFLUSH 刷清输入、输出队列。刷清输入、输出队列。如:如:tcflush(fd,TCIFLUSHtcflush(fd,TCIFLUSH););18TM18Tony n设置串口流程 10.10.激活配置。在完成配置后,需激活配置使其生效。使用激活配置。在完成配置后,需激活配置使其生效。使用tsettattrtsettattr()()函数。原型:函数。原型:intint tcgetattr(inttcgetattr(int filedes
18、filedes, , structstruct termiostermios * * termptrtermptr););intint tcsetattr(inttcsetattr(int filedesfiledes, , intint opt, const opt, const structstruct termiostermios * * termptrtermptr););tcsetattrtcsetattr的参数的参数optopt使我们可以指定在什么时候新的终端属性才起使我们可以指定在什么时候新的终端属性才起作用。作用。optopt可以指定为下列常数中的一个:可以指定为下列常数中的一
19、个: TCSANOW TCSANOW 更改立即发生。更改立即发生。 TCSADRAIN TCSADRAIN 发送了所有输出后更改才发生。若更改输出参数则应发送了所有输出后更改才发生。若更改输出参数则应使用此选择项。使用此选择项。 TCSAFLUSH TCSAFLUSH 发送了所有输出后更改才发生。更进一步,在更改发发送了所有输出后更改才发生。更进一步,在更改发生时未读的所有输入数据都被删除(刷清)生时未读的所有输入数据都被删除(刷清)使用如:使用如:tcsetattr(fd,TCSANOW,&newtiotcsetattr(fd,TCSANOW,&newtio) )19TM19
20、Tony n设置串口 n设置这个结构体很复杂,我这里就只说说常见的一些设置这个结构体很复杂,我这里就只说说常见的一些设置:设置: n波特率设置波特率设置n下面是修改波特率的代码:下面是修改波特率的代码:struct termios Opt;tcgetattr(fd, &Opt);cfsetispeed(&Opt,B19200); /*设置为19200Bps*/cfsetospeed(&Opt,B19200);tcsetattr(fd,TCANOW,&Opt);20TM20Tony n设置串口 n设置这个结构体很复杂,我这里就只说说常见的一些设置这个结构体很复杂,我这里就只说说常见的一些设置:设置: n波特率设置波特率设置n下面是修改波特率的代码:下面是修改波特率的代码:struct termios Opt;tcgetattr(fd, &Opt);cfsetispeed(&Opt,B19200); /*设置为19200Bps*/cfsetospeed(&Opt,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物探工诚信道德考核试卷含答案
- 插秧机操作工冲突解决强化考核试卷含答案
- 特种动物养殖员安全文化模拟考核试卷含答案
- “工业互联网+危化安全生产”工艺生产报警优化管理系统建设应用指南解读课件
- 石蜡加氢装置操作工安全技能测试水平考核试卷含答案
- 烟类作物栽培工岗中操作规范考核试卷含答案
- 劳动定员定额师岗前技能竞赛考核试卷含答案
- 织袜工诚信竞赛考核试卷含答案
- 自然水域救生员岗位安全模拟考核试卷含答案
- 接触网工诚信品质评优考核试卷含答案
- 2026年高邮市消防系统事业单位公开招聘工作人员3人笔试备考题库及答案解析
- 2025年河南省检察官逐级遴选笔试题目及答案
- 2026年高校辅导员经典面试题(含答案)
- 《勤洗生活衣物》教学设计-2026-2027学年滇教版初中劳动技术七年级上册
- 注册消防工程师继续教育2025年部分题目与答案(126题)
- 2026年江苏省徐州市中考英语真题(含答案)
- 2026年东阳市城管辅助人员招聘真题(附答案)
- 肉联厂屠宰人员安全防护手册
- 关于支付拖欠工程款的催办函(8篇)
- 2026年度湖北省部分工程高、中级职称水平能力测试(轻工)复习题及答案
- 2026八年级劳动国家质量监测考试卷含答案
评论
0/150
提交评论