




已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1/30 Linux下串口程序设计 2 嵌入式系统设计实验二 n实验时间 n1班10月27日 19:00 21:25 n2班10月28日 08:00 10:25 n实验内容 n串行端口程序设计(2.3必做,并提交实验报告) n第二章 其他实验(选做) n实验报告提交 n时间:下周实验之前 n提交方式: 发送到邮箱: (1班), (2班), 文件命名:学号+姓名+实验二.doc 邮件主题:嵌入式系统设计实验二 3 串行端口程序设计 n实验步骤 n1.阅读理解源码 n源码位置:expbasic03_tty n阅读源码方法 nLinux下使用vi编辑器(Linux、VI常用命令参考实 验指导书第七章附录7.1、7.2) nwindows下使用SourceInsight软件 n2.编译应用程序 4 串行端口程序设计 n实验步骤 n3.下载调试 n切换到minicom 终端窗口,使用NFS mount 开发主机的/arm2410s 到 /host 目录:mount t nfs o nolock 34:/arm2410s /host n开发板中串口设备位于/dev/tts/下,没有ttyS0这个设备,所以需要建立一 个连接,方法如下: cd /dev ln sf /dev/tts/0 ttyS0 n进入expbasic03_tty 目录,运行term,观察运行结果的正确性。 实验目的 n 了解在 linux 环境下串行程序设计的基本方法。 n 掌握终端的主要属性及设置方法,熟悉终端 I /O 函数的 使用。 n 学习使用多线程来完成串口的收发处理。 5/30 实验原理与程序分析 nLinux 对所有各类设备文件的输入输出操作,看上去就像对 普通文件的输入输出一样,所以Linux 对串口的操作,也是 通过设备文件访问的。为了访问串口,只需要打开相应的设 备文件即可。 n默认地,在Linux 下,串行口COM1 和COM2对应的设备分 别为/dev/ttyS0 和/dev/ttyS1。 串口详细配置 n在使用串口之前必须设置相关配置,包括:波特率、数据位、 校验码、停止位等。串口设置由下面结构体实现: n struct termios n n tcflag_t c_iflag; /* 输入模式 */ n tcflag_t c_oflag; /* 输出模式 */ n tcflag_t c_cflag; /* 控制模式 */ n tcflag_t c_lflag; /* 本地模式 */ n cc_t c_ccNCCS; /* 控制字符 */ n n在 中. 8 串行端口程序设计 nc_iflag n输入模式标志,控制终端输入方式,具体参数如下表所示。 键 值说 明 IGNBRK忽略BREAK键输 入 BRKINT如果设置了IGNBRK,BREAK键的输入将被忽略,如果设置了BRKINT ,将 产生SIGINT中断 IGNPAR忽略奇偶校验错误 PARMRK标识 奇偶校验错误 INPCK允许输 入奇偶校验 ISTRIP去除字符的第8个比特 INLCR将输入的NL(换行)转换 成CR(回车) IGNCR忽略输入的回车 ICRNL将输入的回车转 化成换行(如果IGNCR未设置的情况下) IUCLC将输入的大写字符转换 成小写字符(非POSIX) IXON允许输 入时对 XON/XOFF流进行控制 IXANY输入任何字符将重启停止的输出 IXOFF允许输 入时对 XON/XOFF流进行控制 IMAXBEL当输入队列满的时候开始响铃,Linux在使用该参数而是认为该 参数总是已 经设 置 9 串行端口程序设计 nc_oflag n输出模式标志,控制终端输出方式,具体参数如表6.4所示。 键 值说 明 OPOST处理后输出 OLCUC将输入的小写字符转换 成大写字符(非POSIX) ONLCR将输入的NL(换行)转换 成CR(回车)及NL(换行) OCRNL将输入的CR(回车)转换 成NL(换行) ONOCR第一行不输出回车符 ONLRET不输出回车符 OFILL发送填充字符以延迟终 端输出 OFDEL以ASCII码的DEL作为填充字符,如果未设置该参数,填充字符将是NUL(0 )(非POSIX) NLDLY换行输出延时,可以取NL0(不延迟)或NL1(延迟0.1s) CRDLY回车延迟,取值范围为 :CR0、CR1、CR2和 CR3 TABDLY水平制表符输出延迟,取值范围为 :TAB0、TAB1、TAB2和TAB3 BSDLY空格输出延迟,可以取BS0或BS1 VTDLY垂直制表符输出延迟,可以取VT0或VT1 FFDLY换页 延迟,可以取FF0或FF1 10 串行端口程序设计 nc_cflag n控制模式标志,指定终端硬件控制信息,具体参数如下表所示。 键 值说 明 CBAUD波特率(4+1位)(非POSIX) CBAUDEX附加波特率(1位)(非POSIX) CSIZE字符长度,取值范围为 CS5、CS6、CS7或CS8 CSTOPB设置两个停止位 CREAD使用接收器 PARENB使用奇偶校验 PARODD对输 入使用奇偶校验,对输 出使用偶校验 HUPCL关闭设备时 挂起 CLOCAL忽略调制解调器线路状态 CRTSCTS使用RTS/CTS流控制 11 串行端口程序设计 nc_lflag n本地模式标志,控制终端编辑功能,具体参数如下表所示。 键 值说 明 ISIG当输入INTR、QUIT、SUSP或DSUSP时,产生相应的信号 ICANON使用标准输入模式 XCASE在ICANON和XCASE同时设 置的情况下,终端只使用大写。如果只设置 了XCASE,则输 入字符将被转换为 小写字符,除非字符使用了转义 字 符(非POSIX,且Linux不支持该参数) ECHO显示输入字符 ECHOE如果ICANON同时设 置,ERASE将删除输入的字符,WERASE将删除输 入的单词 ECHOK如果ICANON同时设 置,KILL将删除当前行 ECHONL如果ICANON同时设 置,即使ECHO没有设置依然显示换行符 ECHOPRT如果ECHO和ICANON同时设 置,将删除打印出的字符(非POSIX) TOSTOP向后台输出发送SIGTTOU信号 12 串行端口程序设计 nc_ccNCCS n控制字符,用于保存终端驱动程序中的特殊字符,如输入结束符等 。c_cc中定义了如表6.7所示的控制字符。 宏说 明宏说 明 VINTRInterrupt字符VEOL附加的End-of-file字符 VQUITQuit字符VTIME非规范模式读取时的超时时间 VERASEErase字符VSTOPStop字符 VKILLKill字符VSTARTStart字符 VEOFEnd-of-file字符VSUSPSuspend字符 VMIN非规范模式读取时的最小字符数 串口控制函数 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 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 打开串口 n1、打开串口是通过使用标准的文件打开函数操作: nint fd; /*以读写方式打开串口*/ fd = open( “/dev/ttyS0“, O_RDWR); if (-1 = fd) /* 不能打开串口一*/ perror(“ 提示错误!“); 14/30 n#include int open(const char *pathname, int oflag) n返回值:成功则返回文件描述符,否则返回 -1 n对于 open 函数来说,第三个参数(.)仅当创建新文件时 才使用,用于指定文件的访问权限位(access permission bits)。 npathname 是待打开/创建文件的路径名(如 C:/cpp/a.cpp) ; noflag 用于指定文件的打开/创建模式,这个参数可由以下常 量(定义于 fcntl.h)通过逻辑或构成。 nO_RDONLY 只读模式 O_WRONLY 只写模式 O_RDWR 读写模式 15/30 打开串口 设置串口 n所有对串口的操作都是通过结构体 struct termios和几个函 数实现的,其中两个最常用的函数是tcgetattr()和 tcsetattr() n几乎在所有情况下,程序都是通过tcgetattr()函数获取设 备当前的设置,然后修改这些设置,最后用tcsetattr()使 这些设置生效。 n许多程序会保存终端初始的设置并在终止运行前恢复这些设 置。 16/30 保存串口当前状态 n2、保存原先串口配置使用tcgetattr(fd, ntcgetattr(0, ntcgetattr(fd, /* save current modem settings */ 17/30 设置串口 n最基本的设置串口包括波特率设置,效验位和停止位设置。 n串口的设置主要是设置 struct termios结构体的各成员值。 18/30 设置串口 n例子: nstruct termios newtio,newstdtio; nnewtio.c_cflag = CLOCAL | CREAD; /*ctrol flag*/ nnewtio.c_ccVMIN=1; nnewtio.c_ccVTIME=0; 19/30 设置串口 n3、激活配置: nint tcsetattr (int fd, int options ,struct termios *t) n用来将termios结构指针t内的设置值赋给当前用文件描述符 fd表示的设备终端 n参数options决定什么时候改变才生效 TCSANOW修改立即生效 TCSADRAIN所有已经发送的输出写入fd后生效 TCSAFLUSH输出队列为空时生效 20/30 设置串口 n4、处理要写入的数据对象: ntcflush()函数 ntcflush函数刷清(抛弃)输入缓存(终端驱动程序已收到,但用户程序 尚未读)或输出缓存(用户程序已经写,但尚未发送)。 n原型为:int tcflush(int fd ,int queue_selector) nqueue_selector数应当是下列三个数之一: nTCIFLUSH丢弃驱动上已经接收到但还没读入的所有数据 nTCOFLUSH丢弃所有已经写入驱动但还没发送的数据 nTCIOFLUSH丢弃所有输入输出队列上还没有读取或发送的数据 21/30 tcflush(fd,TCIFLUSH); 读写串口 n5、设置好串口之后,读写串口就很容易了,可以把串口当 作文件读写 n发送数据: char buffer1024; int Length1024; int nByte; nByte = write(fd, buffer ,Length) 22/30 读取串口数据 n使用文件操作read函数读取,如果设置为原始模式(Raw Mode)传输数据,那么read函数返回的字符数是实际串口收 到的字符数。 char buff1024; int Len1024; int readByte = read(fd, buff, Len); 23/30 关闭串口 n6、关闭串口 close() 例如: tcsetattr(fd,TCSANOW, close(fd); 24/30 提示 n注意:如果在执行./term 时出现下面的错误,可以通过我们 前文提到的方法建立一个连接来解决。 n/mnt/yaffs cd /dev n/dev ln sf /dev/tts/0 ttyS0 25/30 26 n1波特率设置 n获得端口波特率信息是通过cfgetispeed函数和 cfgetospeed函数来实现的。cfgetispeed函数用于获得 结构体termios_p中的输入波特率信息,而cfgetospeed 函数用于获得结构体termios_p中的输出波特率信息。这 两个函数的具体信息如下表所示。 其他串口设置参考 27 n1波特率设置 ncfsetispeed函数和cfsetospeed函数会修改结构体 termios_p中的波特率信息,其中参数speed可以使用下 表中所列出的宏。 nspeed参数常用波特率信息 其他串口设置参考 28 n2数据位 n数据位指的是每字节中实际数据所占的比特数。要修改数 据位可以通过修改termios结构体中c_cflag成员来实现。 CS5、CS6、CS7和CS8分别表示数据位为5、6、7和8。 值得注意的是,在设置数据位时,必须先使用CSIZE做位 屏蔽。Eg: struct termios opt; /*定义指向termios 结构类型的指针opt*/ /获得串口指向termios结构的指针 tcgetattr(fd, /屏蔽其他标志 Opt.c_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- d级危房维修施工方案
- 武汉工商学院《形势与政策(四)》2023-2024学年第二学期期末试卷
- 大堂风机拆除施工方案
- 阆中污水管网施工方案
- 南京城市职业学院《概率统计B》2023-2024学年第二学期期末试卷
- 上海出版印刷高等专科学校《矩阵理论与应用》2023-2024学年第二学期期末试卷
- 2025至2031年中国油水舱底漆行业投资前景及策略咨询研究报告
- 斜拉桥桩基础施工方案
- 江西建设职业技术学院《CAD设计》2023-2024学年第二学期期末试卷
- 临时雨污水接驳施工方案
- 《淘宝开网店详解》课件
- 【八年级下册地理中图北京版】期中真题必刷卷B-【期中真题必刷卷】(北京专用)(解析版)
- 钻床安全技术课件
- 新媒体时代农产品品牌营销策略
- 西工大附中2025届高考英语一模试卷含解析
- 《房屋建筑与装饰工程工程量计算规范》课件
- 《支付宝相关功能》课件
- 车队运营中的司机管理策略研究
- 0-3岁婴幼儿感觉统合训练知到智慧树章节测试课后答案2024年秋杭州师范大学
- 新生儿脐部出血的护理
- 实验室的智能化设计与建设
评论
0/150
提交评论