linux串口编程ppt课件_第1页
linux串口编程ppt课件_第2页
linux串口编程ppt课件_第3页
linux串口编程ppt课件_第4页
linux串口编程ppt课件_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1Linux下串口程序设计下串口程序设计2嵌入式系统设计实验二嵌入式系统设计实验二n实验时间实验时间n1班班 10月月27日日 19:00 21:25n2班班 10月月28日日 08:00 10:25n实验内容实验内容n串行端口程序设计串行端口程序设计2.3必做,并提交实验报告必做,并提交实验报告n第二章第二章 其他实验选做其他实验选做n实验报告提交实验报告提交n时间:下周实验之前时间:下周实验之前n提交方式:提交方式:n发送到邮箱:发送到邮箱: (1班班),n (2班班),n文件命名:学号文件命名:学号+姓名姓名+实验二实验二.d

2、ocn邮件主题:嵌入式系统设计实验二邮件主题:嵌入式系统设计实验二3串行端口程序设计串行端口程序设计n实验步骤实验步骤n1.阅读了解源码阅读了解源码n源码位置:源码位置:expbasic03_ttyn阅读源码方法阅读源码方法nLinux下运用下运用vi编辑器编辑器Linux、VI常用命令参考实验指点书常用命令参考实验指点书第七章附录第七章附录7.1、7.2nwindows下运用下运用SourceInsight软件软件n2.编译运用程序编译运用程序4串行端口程序设计串行端口程序设计n实验步骤实验步骤n3.下载调试下载调试n切换到切换到minicom 终端窗口,运用终端窗口,运用NFS mount

3、 开发主机的开发主机的/arm2410s 到到/host 目录:目录:mount t nfs o nolock 34:/arm2410s /hostn开发板中串口设备位于开发板中串口设备位于/dev/tts/下,没有下,没有ttyS0这个设备,所这个设备,所以需求建立一个衔接,方法如下:以需求建立一个衔接,方法如下:ncd /devn ln sf /dev/tts/0 ttyS0n进入进入expbasic03_tty 目录,运转目录,运转term,察看运转结果的正,察看运转结果的正确性。确性。实验目的实验目的n 了解在了解在 linux 环境下串行程序设计的根本方法。环境

4、下串行程序设计的根本方法。n 掌握终端的主要属性及设置方法,熟习终端掌握终端的主要属性及设置方法,熟习终端 I /O 函数函数的运用。的运用。n 学习运用多线程来完成串口的收发处置。学习运用多线程来完成串口的收发处置。5实验原理与程序分析实验原理与程序分析nLinux 对一切各类设备文件的输入输出操作,看上去就像对对一切各类设备文件的输入输出操作,看上去就像对普通文件的输入输出一样,所以普通文件的输入输出一样,所以Linux 对串口的操作,也是对串口的操作,也是经过设备文件访问的。为了访问串口,只需求翻开相应的设经过设备文件访问的。为了访问串口,只需求翻开相应的设备文件即可。备文件即可。n默许

5、地,在默许地,在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; /* 控制字符

6、 */ n n在 中.8串行端口程序设计串行端口程序设计nc_iflagn输入方式标志,控制终端输入方式,详细参数如下表所示。键 值说 明IGNBRK忽略BREAK键输入BRKINT如果设置了IGNBRK,BREAK键的输入将被忽略,如果设置了BRKINT ,将产生SIGINT中断IGNPAR忽略奇偶校验错误PARMRK标识奇偶校验错误INPCK允许输入奇偶校验ISTRIP去除字符的第8个比特INLCR将输入的NL(换行)转换成CR(回车)IGNCR忽略输入的回车ICRNL将输入的回车转化成换行(如果IGNCR未设置的情况下)IUCLC将输入的大写字符转换成小写字符(非POSIX)IXON允许

7、输入时对XON/XOFF流进行控制IXANY输入任何字符将重启停止的输出IXOFF允许输入时对XON/XOFF流进行控制IMAXBEL当输入队列满的时候开始响铃,Linux在使用该参数而是认为该参数总是已经设置9串行端口程序设计串行端口程序设计nc_oflagn输出方式标志,控制终端输出方式,详细参数如表6.4所示。键 值说 明OPOST处理后输出OLCUC将输入的小写字符转换成大写字符(非POSIX)ONLCR将输入的NL(换行)转换成CR(回车)及NL(换行)OCRNL将输入的CR(回车)转换成NL(换行)ONOCR第一行不输出回车符ONLRET不输出回车符OFILL发送填充字符以延迟终端

8、输出OFDEL以ASCII码的DEL作为填充字符,如果未设置该参数,填充字符将是NUL(0)(非POSIX)NLDLY换行输出延时,可以取NL0(不延迟)或NL1(延迟0.1s)CRDLY回车延迟,取值范围为:CR0、CR1、CR2和 CR3TABDLY水平制表符输出延迟,取值范围为:TAB0、TAB1、TAB2和TAB3BSDLY空格输出延迟,可以取BS0或BS1VTDLY垂直制表符输出延迟,可以取VT0或VT1FFDLY换页延迟,可以取FF0或FF110串行端口程序设计串行端口程序设计nc_cflagn控制方式标志,指定终端硬件控制信息,详细参数如下表所示。 键 值说 明CBAUD波特率(

9、4+1位)(非POSIX)CBAUDEX附加波特率(1位)(非POSIX)CSIZE字符长度,取值范围为CS5、CS6、CS7或CS8CSTOPB设置两个停止位CREAD使用接收器PARENB使用奇偶校验PARODD对输入使用奇偶校验,对输出使用偶校验HUPCL关闭设备时挂起CLOCAL忽略调制解调器线路状态CRTSCTS使用RTS/CTS流控制11串行端口程序设计串行端口程序设计nc_lflagn本地方式标志,控制终端编辑功能,详细参数如下表所示。 键 值说 明ISIG当输入INTR、QUIT、SUSP或DSUSP时,产生相应的信号ICANON使用标准输入模式XCASE在ICANON和XCA

10、SE同时设置的情况下,终端只使用大写。如果只设置了XCASE,则输入字符将被转换为小写字符,除非字符使用了转义字符(非POSIX,且Linux不支持该参数)ECHO显示输入字符ECHOE如果ICANON同时设置,ERASE将删除输入的字符,WERASE将删除输入的单词ECHOK如果ICANON同时设置,KILL将删除当前行ECHONL如果ICANON同时设置,即使ECHO没有设置依然显示换行符ECHOPRT如果ECHO和ICANON同时设置,将删除打印出的字符(非POSIX)TOSTOP向后台输出发送SIGTTOU信号12串行端口程序设计串行端口程序设计nc_ccNCCSn控制字符,用于保管终

11、端驱动程序中的特殊字符,如输入终了符等。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

12、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 Dt c s e t p g r p 设置前台进程组I D翻开串口翻开串口n1、翻开串口是经过运用规范的文件翻开函数操作:、翻

13、开串口是经过运用规范的文件翻开函数操作:nint fd;n /*以读写方式翻开串口以读写方式翻开串口*/ n fd = open( /dev/ttyS0, O_RDWR);n if (-1 = fd) n /* 不能翻开串口一不能翻开串口一*/ n perror( 提示错误!提示错误!); n 14n#include nint open(const char *pathname, int oflag)n前往值:胜利那么前往文件描画符,否那么前往前往值:胜利那么前往文件描画符,否那么前往 -1n对于对于 open 函数来说,第三个参数函数来说,第三个参数.仅当创建新文件时仅当创建新文件时才运用,

14、用于指定文件的访问权限位才运用,用于指定文件的访问权限位access permission bits。npathname 是待翻开是待翻开/创建文件的途径名如创建文件的途径名如 C:/cpp/a.cpp;noflag 用于指定文件的翻开用于指定文件的翻开/创建方式,这个参数可由以下常创建方式,这个参数可由以下常量定义于量定义于 fcntl.h经过逻辑或构成。经过逻辑或构成。nO_RDONLY 只读方式只读方式 O_WRONLY 只写方式只写方式 O_RDWR 读写方式读写方式15翻开串口翻开串口设置串口设置串口n一切对串口的操作都是经过构造体一切对串口的操作都是经过构造体 struct ter

15、mios和几个函和几个函数实现的,其中两个最常用的函数是数实现的,其中两个最常用的函数是tcgetattr和和tcsetattrn几乎在一切情况下,程序都是经过几乎在一切情况下,程序都是经过tcgetattr函数获取设函数获取设备当前的设置,然后修正这些设置,最后用备当前的设置,然后修正这些设置,最后用tcsetattr使使这些设置生效。这些设置生效。n许多程序会保管终端初始的设置并在终止运转前恢复这些设许多程序会保管终端初始的设置并在终止运转前恢复这些设置。置。16保管串口当前形状保管串口当前形状n2、保管原先串口配置运用、保管原先串口配置运用tcgetattr(fd,&oldtio

16、)nint tcgetattr int fd ,struct termios *tn 用于获得文件描画符用于获得文件描画符fd所表示设备的当前设置值,并写入所表示设备的当前设置值,并写入指针指针t内内.nstruct termios oldtio, oldstdtio;ntcgetattr(0,&oldstdtio);ntcgetattr(fd,&oldtio); /* save current modem settings */17设置串口设置串口n最根本的设置串口包括波特率设置,效验位和停顿位设置。最根本的设置串口包括波特率设置,效验位和停顿位设置。n串口的设置主要是设置串

17、口的设置主要是设置 struct termios构造体的各成员值。构造体的各成员值。18设置串口设置串口n例子:例子:nstruct termios newtio,newstdtio;nnewtio.c_cflag = CLOCAL | CREAD; /*ctrol flag*/nnewtio.c_ccVMIN=1;nnewtio.c_ccVTIME=0;19设置串口设置串口n3、激活配置:、激活配置:nint tcsetattr (int fd, int options ,struct termios *t)n用来将用来将termios构造指针构造指针t内的设置值赋给当前用文件描画符内的设置

18、值赋给当前用文件描画符fd表示的设备终端表示的设备终端n参数参数options决议什么时候改动才生效决议什么时候改动才生效n TCSANOW修正立刻生效修正立刻生效n TCSADRAIN一切曾经发送的输出写入一切曾经发送的输出写入fd后生效后生效n TCSAFLUSH输出队列为空时生效输出队列为空时生效20设置串口设置串口n4、处置要写入的数据对象:、处置要写入的数据对象:ntcflush函数函数 ntcflush函数刷清丢弃输入缓存终端驱动程序已收到,函数刷清丢弃输入缓存终端驱动程序已收到,但用户程序尚未读或输出缓存用户程序曾经写,但尚未但用户程序尚未读或输出缓存用户程序曾经写,但尚未发送。

19、发送。n原型为:原型为:int tcflushint fd ,int queue_selectornqueue_selector数该当是以下三个数之一:数该当是以下三个数之一:nTCIFLUSH丢弃驱动上曾经接纳到但还没读入的一切数丢弃驱动上曾经接纳到但还没读入的一切数据据nTCOFLUSH丢弃一切曾经写入驱动但还没发送的数据丢弃一切曾经写入驱动但还没发送的数据nTCIOFLUSH丢弃一切输入输出队列上还没有读取或发丢弃一切输入输出队列上还没有读取或发送的数据送的数据21tcflush(fd,TCIFLUSH);读写串口读写串口n5、设置好串口之后,读写串口就很容易了,可以把串口当、设置好串口

20、之后,读写串口就很容易了,可以把串口当作文件读写作文件读写n发送数据:发送数据:n char buffer1024;n int Length1024;n int nByte;n nByte = write(fd, buffer ,Length)22读取串口数据读取串口数据n运用文件操作运用文件操作read函数读取,假设设置为原始方式函数读取,假设设置为原始方式(Raw Mode)传输数据,那么传输数据,那么read函数前往的字符数是实践串口收函数前往的字符数是实践串口收到的字符数。到的字符数。 n char buff1024;n int Len1024;n int readByte = rea

21、d(fd, buff, Len);23封锁串口封锁串口n6、封锁串口、封锁串口 close() n 例如:例如:n tcsetattr(fd,TCSANOW,&oldtio);n close(fd);24提示提示n留意:假设在执行留意:假设在执行./term 时出现下面的错误,可以经过我们时出现下面的错误,可以经过我们前文提到的方法建立一个衔接来处理。前文提到的方法建立一个衔接来处理。n/mnt/yaffs cd /devn/dev ln sf /dev/tts/0 ttyS02526n1波特率设置波特率设置n获得端口波特率信息是经过获得端口波特率信息是经过cfgetispeed函数和

22、函数和cfgetospeed函数来实现的。函数来实现的。cfgetispeed函数用于获得构造体函数用于获得构造体termios_p中的输入波特率信息,而中的输入波特率信息,而cfgetospeed函数用于获得构造体函数用于获得构造体termios_p中的输出波特率信息。这两个函数的详细信息如中的输出波特率信息。这两个函数的详细信息如下表所示。下表所示。其他串口设置参考其他串口设置参考27n1波特率设置波特率设置ncfsetispeed函数和函数和cfsetospeed函数会修正构造体函数会修正构造体termios_p中的波特率信息,其中参数中的波特率信息,其中参数speed可以运用下表可以运

23、用下表中所列出的宏。中所列出的宏。 nspeed参数常用波特率信息参数常用波特率信息 其他串口设置参考其他串口设置参考28n2数据位数据位 n数据位指的是每字节中实践数据所占的比特数。要修正数据数据位指的是每字节中实践数据所占的比特数。要修正数据位可以经过修正位可以经过修正termios构造体中构造体中c_cflag成员来实现。成员来实现。CS5、CS6、CS7和和CS8分别表示数据位为分别表示数据位为5、6、7和和8。值得留意。值得留意的是,在设置数据位时,必需先运用的是,在设置数据位时,必需先运用CSIZE做位屏蔽。做位屏蔽。Eg: struct termios opt; /*定义指向termios 构造类型的指针opt*/获得串口指向termios构造的指针tcgetattr(fd, &Opt);/屏蔽其他标志Opt.c_cflag&=CSIZE;/将数据位修正为8bitOpt.c_cflag |=CS8;/将修正后的termios数据设置到串口中tcse

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论