




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1/30,Linux下串口程序设计,2,嵌入式系统设计实验二,实验时间 1班10月27日 19:00 21:25 2班10月28日 08:00 10:25 实验内容 串行端口程序设计(2.3必做,并提交实验报告) 第二章 其他实验(选做) 实验报告提交 时间:下周实验之前 提交方式: 发送到邮箱: (1班), (2班), 文件命名:学号+姓名+实验二.doc 邮件主题:嵌入式系统设计实验二,3,串行端口程序设计,实验步骤 1.阅读理解源码 源码位置:expbasic03_tty 阅读源码方法 Linux下使用vi编辑器(Linux、VI常用命令参考实验指导书第七章附录7.1、7.2) wind
2、ows下使用SourceInsight软件 2.编译应用程序,4,串行端口程序设计,实验步骤 3.下载调试 切换到minicom 终端窗口,使用NFS mount 开发主机的/arm2410s 到/host 目录:mount t nfs o nolock 34:/arm2410s /host 开发板中串口设备位于/dev/tts/下,没有ttyS0这个设备,所以需要建立一个连接,方法如下: cd /dev ln sf /dev/tts/0 ttyS0 进入expbasic03_tty 目录,运行term,观察运行结果的正确性。,实验目的, 了解在 linux 环境下串行程
3、序设计的基本方法。 掌握终端的主要属性及设置方法,熟悉终端 I /O 函数的使用。 学习使用多线程来完成串口的收发处理。,5/30,实验原理与程序分析,Linux 对所有各类设备文件的输入输出操作,看上去就像对普通文件的输入输出一样,所以Linux 对串口的操作,也是通过设备文件访问的。为了访问串口,只需要打开相应的设备文件即可。 默认地,在Linux 下,串行口COM1 和COM2对应的设备分别为/dev/ttyS0 和/dev/ttyS1。,串口详细配置,在使用串口之前必须设置相关配置,包括:波特率、数据位、校验码、停止位等。串口设置由下面结构体实现: struct termios tcf
4、lag_t c_iflag; /* 输入模式 */ tcflag_t c_oflag; /* 输出模式 */ tcflag_t c_cflag; /* 控制模式 */ tcflag_t c_lflag; /* 本地模式 */ cc_t c_ccNCCS; /* 控制字符 */ 在 中.,8,串行端口程序设计,c_iflag 输入模式标志,控制终端输入方式,具体参数如下表所示。,9,串行端口程序设计,c_oflag 输出模式标志,控制终端输出方式,具体参数如表6.4所示。,10,串行端口程序设计,c_cflag 控制模式标志,指定终端硬件控制信息,具体参数如下表所示。,11,串行端口程序设计,c
5、_lflag 本地模式标志,控制终端编辑功能,具体参数如下表所示。,12,串行端口程序设计,c_ccNCCS 控制字符,用于保存终端驱动程序中的特殊字符,如输入结束符等。c_cc中定义了如表6.7所示的控制字符。,串口控制函数,t c g e t a t t r 取属性( t e r m i o s结构) t c s e t a t t r 设置属性( t e r m i o s结构) c f g e t i s p e e d 得到输入速度 c f g e t o s p e e d 得到输出速度 c f s e t i s p e e d 设置输入速度 c f s e t o s p e
6、e d 设置输出速度 t c d r a i n 等待所有输出都被传输 t c f l o w 挂起传输或接收 t c f l u s h 刷清未决输入和/或输出 t c s e n d b r e a k 送B R E A K字符 t c g e t p g r p 得到前台进程组I D t c s e t p g r p 设置前台进程组I D,打开串口,1、打开串口是通过使用标准的文件打开函数操作: int fd; /*以读写方式打开串口*/ fd = open( /dev/ttyS0, O_RDWR); if (-1 = fd) /* 不能打开串口一*/ perror( 提示错误!);
7、,14/30,#include int open(const char *pathname, int oflag) 返回值:成功则返回文件描述符,否则返回 -1 对于 open 函数来说,第三个参数(.)仅当创建新文件时才使用,用于指定文件的访问权限位(access permission bits)。 pathname 是待打开/创建文件的路径名(如 C:/cpp/a.cpp); oflag 用于指定文件的打开/创建模式,这个参数可由以下常量(定义于 fcntl.h)通过逻辑或构成。 O_RDONLY 只读模式 O_WRONLY 只写模式 O_RDWR 读写模式,15/30,打开串口,设置串口
8、,所有对串口的操作都是通过结构体 struct termios和几个函数实现的,其中两个最常用的函数是tcgetattr()和tcsetattr() 几乎在所有情况下,程序都是通过tcgetattr()函数获取设备当前的设置,然后修改这些设置,最后用tcsetattr()使这些设置生效。 许多程序会保存终端初始的设置并在终止运行前恢复这些设置。,16/30,保存串口当前状态,2、保存原先串口配置使用tcgetattr(fd, /* save current modem settings */,17/30,设置串口,最基本的设置串口包括波特率设置,效验位和停止位设置。 串口的设置主要是设置 st
9、ruct termios结构体的各成员值。,18/30,设置串口,例子: struct termios newtio,newstdtio; newtio.c_cflag = CLOCAL | CREAD; /*ctrol flag*/ newtio.c_ccVMIN=1; newtio.c_ccVTIME=0;,19/30,设置串口,3、激活配置: int tcsetattr (int fd, int options ,struct termios *t) 用来将termios结构指针t内的设置值赋给当前用文件描述符fd表示的设备终端 参数options决定什么时候改变才生效 TCSANOW修
10、改立即生效 TCSADRAIN所有已经发送的输出写入fd后生效 TCSAFLUSH输出队列为空时生效,20/30,设置串口,4、处理要写入的数据对象: tcflush()函数 tcflush函数刷清(抛弃)输入缓存(终端驱动程序已收到,但用户程序尚未读)或输出缓存(用户程序已经写,但尚未发送)。 原型为:int tcflush(int fd ,int queue_selector) queue_selector数应当是下列三个数之一: TCIFLUSH丢弃驱动上已经接收到但还没读入的所有数据 TCOFLUSH丢弃所有已经写入驱动但还没发送的数据 TCIOFLUSH丢弃所有输入输出队列上还没有读
11、取或发送的数据,21/30,tcflush(fd,TCIFLUSH);,读写串口,5、设置好串口之后,读写串口就很容易了,可以把串口当作文件读写 发送数据: char buffer1024; int Length1024; int nByte; nByte = write(fd, buffer ,Length),22/30,读取串口数据,使用文件操作read函数读取,如果设置为原始模式(Raw Mode)传输数据,那么read函数返回的字符数是实际串口收到的字符数。 char buff1024; int Len1024; int readByte = read(fd, buff, Len);,
12、23/30,关闭串口,6、关闭串口 close() 例如: tcsetattr(fd,TCSANOW,24/30,提示,注意:如果在执行./term 时出现下面的错误,可以通过我们前文提到的方法建立一个连接来解决。 /mnt/yaffs cd /dev /dev ln sf /dev/tts/0 ttyS0,25/30,26,1波特率设置 获得端口波特率信息是通过cfgetispeed函数和cfgetospeed函数来实现的。cfgetispeed函数用于获得结构体termios_p中的输入波特率信息,而cfgetospeed函数用于获得结构体termios_p中的输出波特率信息。这两个函数的
13、具体信息如下表所示。,其他串口设置参考,27,1波特率设置 cfsetispeed函数和cfsetospeed函数会修改结构体termios_p中的波特率信息,其中参数speed可以使用下表中所列出的宏。 speed参数常用波特率信息,其他串口设置参考,28,2数据位 数据位指的是每字节中实际数据所占的比特数。要修改数据位可以通过修改termios结构体中c_cflag成员来实现。CS5、CS6、CS7和CS8分别表示数据位为5、6、7和8。值得注意的是,在设置数据位时,必须先使用CSIZE做位屏蔽。Eg:,struct termios opt; /*定义指向termios 结构类型的指针opt*/获得串口指向termios结构的指针tcgetattr(fd, ,其他串口设置参考,29,3奇偶校验位 奇偶校验可以选择偶校验、奇校验、空格等方式,也可以不使用校验。如果要设置为偶校验的话,首先要将termios结构体中c_cflag设置PARENB标志,并清除PARODD标志。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年四年级班主任入学适应计划
- 新生儿呼吸机相关性肺炎预防护理措施
- 中国人脸识别考勤机市场深度调查及发展前景研究预测报告
- 冬季雨季防冻施工措施
- 抚州职业技术学院《舞蹈基础1》2023-2024学年第一学期期末试卷
- 河南护理职业学院《中国画专业写生语言》2023-2024学年第一学期期末试卷
- 四年级体育课比赛组织计划
- 2025年中国螺旋锥齿轮减速机行业市场全景调研及投资规划建议报告
- 河南省驻马店市泌阳县2024年化学九上期末检测模拟试题含解析
- 2025年中国通信传输设备市场深度调查评估及投资方向研究报告
- 数字时代的商务英语写作知到章节答案智慧树2023年对外经济贸易大学
- 检验科沟通技巧及其它
- 2022年安徽大学科研助理(校聘)招聘60人笔试备考题库及答案解析
- 四年级阅读训练概括文章主要内容(完美)
- YY/T 0995-2015人类辅助生殖技术用医疗器械术语和定义
- GB/T 19352.1-2003热喷涂热喷涂结构的质量要求第1部分:选择和使用指南
- 智护训练讲解学习课件
- 母乳喂养自我效能量表(BSES) (1)附有答案
- 2023年盐城市阜宁县人民医院医护人员招聘笔试题库及答案解析
- 毕业论文答辩
- 染缸操作规范
评论
0/150
提交评论