书签 分享 收藏 举报 版权申诉 / 27
上传文档赚钱

类型嵌入式系统原理与技术课件:linux串口-编程(实验二).ppt

  • 上传人(卖家):罗嗣辉
  • 文档编号:2046078
  • 上传时间:2022-01-21
  • 格式:PPT
  • 页数:27
  • 大小:825KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《嵌入式系统原理与技术课件:linux串口-编程(实验二).ppt》由用户(罗嗣辉)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    嵌入式 系统 原理 技术 课件 linux 串口 编程 实验
    资源描述:

    1、1/30Linux下串口程序设计下串口程序设计实验目的实验目的n 了解在了解在 linux 环境下串行程序设计的基本方法。环境下串行程序设计的基本方法。n 掌握终端的主要属性及设置方法,熟悉终端掌握终端的主要属性及设置方法,熟悉终端 I /O 函数函数的使用。的使用。n 学习使用多线程来完成串口的收发处理。学习使用多线程来完成串口的收发处理。2/30实验原理与程序分析实验原理与程序分析nLinux 对所有各类设备文件的输入输出操作,看上去就像对对所有各类设备文件的输入输出操作,看上去就像对普通文件的输入输出一样,所以普通文件的输入输出一样,所以Linux 对串口的操作,也是对串口的操作,也是通

    2、过设备文件访问的。为了访问串口,只需要打开相应的设通过设备文件访问的。为了访问串口,只需要打开相应的设备文件即可。备文件即可。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

    3、; /* 控制模式 */n tcflag_t c_lflag; /* 本地模式 */n cc_t c_ccNCCS; /* 控制字符 */ n n在在arm2410s/kernel-2410s/include/asm-i386/ 中中. .5串行端口程序设计串行端口程序设计nc_iflagn输入模式标志,控制终端输入方式,具体参数如下表所示。输入模式标志,控制终端输入方式,具体参数如下表所示。键 值说 明IGNBRK忽略BREAK键输入BRKINT如果设置了IGNBRK,BREAK键的输入将被忽略,如果设置了BRKINT ,将产生SIGINT中断IGNPAR忽略奇偶校验错误PARMRK标识奇偶

    4、校验错误INPCK允许输入奇偶校验ISTRIP去除字符的第8个比特INLCR将输入的NL(换行)转换成CR(回车)IGNCR忽略输入的回车ICRNL将输入的回车转化成换行(如果IGNCR未设置的情况下)IUCLC将输入的大写字符转换成小写字符(非POSIX)IXON允许输入时对XON/XOFF流进行控制IXANY输入任何字符将重启停止的输出IXOFF允许输入时对XON/XOFF流进行控制IMAXBEL当输入队列满的时候开始响铃,Linux在使用该参数而是认为该参数总是已经设置6串行端口程序设计串行端口程序设计nc_oflagn输出模式标志,控制终端输出方式,具体参数如表输出模式标志,控制终端输

    5、出方式,具体参数如表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和 CR3TABDLY水平制表符输出延迟,取值范

    6、围为:TAB0、TAB1、TAB2和TAB3BSDLY空格输出延迟,可以取BS0或BS1VTDLY垂直制表符输出延迟,可以取VT0或VT1FFDLY换页延迟,可以取FF0或FF17串行端口程序设计串行端口程序设计nc_cflagn控制模式标志,指定终端硬件控制信息,具体参数如下表所示。控制模式标志,指定终端硬件控制信息,具体参数如下表所示。 键 值说 明CBAUD波特率(4+1位)(非POSIX)CBAUDEX附加波特率(1位)(非POSIX)CSIZE字符长度,取值范围为CS5、CS6、CS7或CS8CSTOPB设置两个停止位CREAD使用接收器PARENB使用奇偶校验PARODD对输入使用

    7、奇偶校验,对输出使用偶校验HUPCL关闭设备时挂起CLOCAL忽略调制解调器线路状态CRTSCTS使用RTS/CTS流控制8串行端口程序设计串行端口程序设计nc_lflagn本地模式标志,控制终端编辑功能,具体参数如下表所示。本地模式标志,控制终端编辑功能,具体参数如下表所示。 键 值说 明ISIG当输入INTR、QUIT、SUSP或DSUSP时,产生相应的信号ICANON使用标准输入模式XCASE在ICANON和XCASE同时设置的情况下,终端只使用大写。如果只设置了XCASE,则输入字符将被转换为小写字符,除非字符使用了转义字符(非POSIX,且Linux不支持该参数)ECHO显示输入字符

    8、ECHOE如果ICANON同时设置,ERASE将删除输入的字符,WERASE将删除输入的单词ECHOK如果ICANON同时设置,KILL将删除当前行ECHONL如果ICANON同时设置,即使ECHO没有设置依然显示换行符ECHOPRT如果ECHO和ICANON同时设置,将删除打印出的字符(非POSIX)TOSTOP向后台输出发送SIGTTOU信号9串行端口程序设计串行端口程序设计nc_ccNCCSn控制字符,用于保存终端驱动程序中的特殊字符,如输入结束符等。控制字符,用于保存终端驱动程序中的特殊字符,如输入结束符等。c_cc中定义了如表中定义了如表6.7所示的控制字符。所示的控制字符。宏说 明

    9、宏说 明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

    10、 得到输出速度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、打开串口是通过使用标准的文件打开函数操作:、打开串口是通过使用标准的文件打开函数操作:nint fd; /*以读写方式打开串口以读写方式

    11、打开串口*/ fd = open( /dev/ttyS0, O_RDWR); if (-1 = fd) /* 不能打开串口一不能打开串口一*/ perror( 提示错误!提示错误!); 11/30n#include int open(const char *pathname, int oflag)n返回值:成功则返回文件描述符,否则返回返回值:成功则返回文件描述符,否则返回 -1n对于对于 open 函数来说,第三个参数(函数来说,第三个参数(.)仅当创建新文件时)仅当创建新文件时才使用,用于指定文件的访问权限位(才使用,用于指定文件的访问权限位(access permission bits)

    12、。)。npathname 是待打开是待打开/创建文件的路径名(如创建文件的路径名(如 C:/cpp/a.cpp););noflag 用于指定文件的打开用于指定文件的打开/创建模式,这个参数可由以下常创建模式,这个参数可由以下常量(定义于量(定义于 fcntl.h)通过逻辑或构成。)通过逻辑或构成。nO_RDONLY 只读模式只读模式 O_WRONLY 只写模式只写模式 O_RDWR 读写模式读写模式12/30打开串口打开串口设置串口设置串口n所有对串口的操作都是通过结构体所有对串口的操作都是通过结构体 struct termios和几个函和几个函数实现的,其中两个最常用的函数是数实现的,其中两

    13、个最常用的函数是tcgetattr()和()和tcsetattr()()n几乎在所有情况下,程序都是通过几乎在所有情况下,程序都是通过tcgetattr()函数获取设()函数获取设备当前的设置,然后修改这些设置,最后用备当前的设置,然后修改这些设置,最后用tcsetattr()使()使这些设置生效。这些设置生效。n许多程序会保存终端初始的设置并在终止运行前恢复这些设许多程序会保存终端初始的设置并在终止运行前恢复这些设置。置。13/30保存串口当前状态保存串口当前状态n2、保存原先串口配置使用、保存原先串口配置使用tcgetattr(fd,&oldtio)nint tcgetattr (int

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

    15、构体的各成员值。结构体的各成员值。15/30设置串口设置串口n例子:例子:nstruct termios newtio,newstdtio;nnewtio.c_cflag = CLOCAL | CREAD; /*ctrol flag*/nnewtio.c_ccVMIN=1;nnewtio.c_ccVTIME=0;16/30设置串口设置串口n3、激活配置:、激活配置:nint tcsetattr (int fd, int options ,struct termios *t)n用来将用来将termios结构指针结构指针t内的设置值赋给当前用文件描述符内的设置值赋给当前用文件描述符fd表示的设备终

    16、端表示的设备终端n参数参数options决定什么时候改变才生效决定什么时候改变才生效 TCSANOW修改立即生效修改立即生效 TCSADRAIN所有已经发送的输出写入所有已经发送的输出写入fd后生效后生效 TCSAFLUSH输出队列为空时生效输出队列为空时生效17/30设置串口设置串口n4、处理要写入的数据对象:、处理要写入的数据对象:ntcflush()函数()函数 ntcflush函数刷清(抛弃)输入缓存(终端驱动程序已收到,但用户程序函数刷清(抛弃)输入缓存(终端驱动程序已收到,但用户程序尚未读)或输出缓存(用户程序已经写,但尚未发送)。尚未读)或输出缓存(用户程序已经写,但尚未发送)。

    17、n原型为:原型为:int tcflush(int fd ,int queue_selector)nqueue_selector数应当是下列三个数之一:数应当是下列三个数之一:nTCIFLUSH丢弃驱动上已经接收到但还没读入的所有数据丢弃驱动上已经接收到但还没读入的所有数据nTCOFLUSH丢弃所有已经写入驱动但还没发送的数据丢弃所有已经写入驱动但还没发送的数据nTCIOFLUSH丢弃所有输入输出队列上还没有读取或发送的数据丢弃所有输入输出队列上还没有读取或发送的数据18/30tcflush(fd,TCIFLUSH);读写串口读写串口n5、设置好串口之后,读写串口就很容易了,可以把串口当、设置好

    18、串口之后,读写串口就很容易了,可以把串口当作文件读写作文件读写n发送数据:发送数据: char buffer1024; int Length1024; int nByte; nByte = write(fd, buffer ,Length)19/30读取串口数据读取串口数据n使用文件操作使用文件操作read函数读取,如果设置为原始模式函数读取,如果设置为原始模式(Raw Mode)传输数据,那么传输数据,那么read函数返回的字符数是实际串口收函数返回的字符数是实际串口收到的字符数。到的字符数。 char buff1024; int Len1024; int readByte = read(f

    19、d, buff, Len);20/30关闭串口关闭串口n6、关闭串口、关闭串口 close() 例如:例如: tcsetattr(fd,TCSANOW,&oldtio); close(fd);21/30提示提示n注意:如果在执行注意:如果在执行./term 时出现下面的错误,可以通过我们时出现下面的错误,可以通过我们前文提到的方法建立一个连接来解决。前文提到的方法建立一个连接来解决。n/mnt/yaffs cd /devn/dev ln sf /dev/tts/0 ttyS022/3023n1波特率设置波特率设置n获得端口波特率信息是通过获得端口波特率信息是通过cfgetispeed函数和函数

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

    21、中所列出的宏。表中所列出的宏。 nspeed参数常用波特率信息参数常用波特率信息 其他串口设置参考其他串口设置参考25n2数据位数据位 n数据位指的是每字节中实际数据所占的比特数。要修改数数据位指的是每字节中实际数据所占的比特数。要修改数据位可以通过修改据位可以通过修改termios结构体中结构体中c_cflag成员来实现。成员来实现。CS5、CS6、CS7和和CS8分别表示数据位为分别表示数据位为5、6、7和和8。值得注意的是,在设置数据位时,必须先使用值得注意的是,在设置数据位时,必须先使用CSIZE做位做位屏蔽。屏蔽。Eg: struct termios opt; /*定义指向termi

    22、os 结构类型的指针opt*/获得串口指向termios结构的指针tcgetattr(fd, &Opt);/屏蔽其他标志Opt.c_cflag&=CSIZE;/将数据位修改为8bitOpt.c_cflag |=CS8;/将修改后的termios数据设置到串口中tcsetattr(fd,TCANOW,&Opt);其他串口设置参考其他串口设置参考26n3奇偶校验位奇偶校验位n奇偶校验可以选择偶校验、奇校验、空格等方式,也可以不使用校验。奇偶校验可以选择偶校验、奇校验、空格等方式,也可以不使用校验。如果要设置为偶校验的话,首先要将如果要设置为偶校验的话,首先要将termios结构体中结构体中c_cf

    23、lag设置设置PARENB标志,并清除标志,并清除PARODD标志。如果要设置奇校验,要同时标志。如果要设置奇校验,要同时设置设置termios结构体中结构体中c_cflag设置设置PARENB标志和标志和PARODD标志。标志。如果不想使用任何校验的话,清除如果不想使用任何校验的话,清除termios结构体中结构体中c_cflag的的PARENB位。下表为设置奇偶校验的具体方法。位。下表为设置奇偶校验的具体方法。设 置具 体 代 码无校验opt.c_cflag &= PARENB;奇校验opt.c_cflag |= (PARODD | PARENB);偶校验opt.c_cflag &= PA

    24、RENB;opt.c_cflag &= PARODD;空格opt.c_cflag &= PARENB;opt.c_cflag &= CSTOPB;其他串口设置参考其他串口设置参考27n4数据流控制数据流控制 n数据流控制指是使用何种方法来标志数据传输的开始和结束。数据流控制指是使用何种方法来标志数据传输的开始和结束。可以选择不使用数据流控制、使用硬件进行流控制和使用软件可以选择不使用数据流控制、使用硬件进行流控制和使用软件进行流控制。数据流控制设置如下表所示。进行流控制。数据流控制设置如下表所示。 设 置具 体 代 码不使用数据流控制opt.c_cflag &= CRTSCTS硬件opt.c_cflag |= CRTSCTS软件opt.c_cflag | = IXON|IXOFF|IXANY其他串口设置参考其他串口设置参考

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:嵌入式系统原理与技术课件:linux串口-编程(实验二).ppt
    链接地址:https://www.163wenku.com/p-2046078.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库