文档详情

linux串口编程(中嵌教育-嵌入式linux开发ppt课件)

29
实名认证
店铺
2024-11-08
PPT
231.81KB
约17页
linux串口编程(中嵌教育-嵌入式linux开发ppt课件)_第1页
1/17
linux串口编程(中嵌教育-嵌入式linux开发ppt课件)_第2页
2/17
linux串口编程(中嵌教育-嵌入式linux开发ppt课件)_第3页
3/17

单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,www.chinaEDA.cn,linux串口,应用,开发,串口,概述,串口设置,串口使用详解,linux串口应用开发串口概述,1,、,串口,概述,用户常见的数据通信的基本方式有两种:,并行通信;,串行通信;,串行通信是计算机常用的接口,如:,RS-232-C,接口该标准规定采用一个,DB25,芯引脚连接器或,DB9,芯引脚连接器芯片内部常具有,UART,控制器,其可工作于,Interrupt(,中断模式,),或,DMA,(直接内存访问)模式1、串口概述用户常见的数据通信的基本方式有两种:,UART,的操作主要包括以下几个部分:,数据发送;,数据接收;,产生中断;,产生波特率;,Loopback,模式;,红外模式;,自动流控模式;,串口参数的配置主要包括:波特率、数据位、停止位、流控协议UART的操作主要包括以下几个部分:,linux,中的串口设备文件存放于,/dev,目录下,其中串口一,串口二对应设备名依次为“,/dev/ttyS0”,、“,/dev/ttyS1”,在,linux,下操作串口与操作文件相同。

linux中的串口设备文件存放于/dev目录下,其中串口一,2、串口详细配置,在使用串口之前必须设置相关配置,包括:波特率、数据位、校验位、停止位等串口设置由下面结构体实现:,2、串口详细配置在使用串口之前必须设置相关配置,包括:波特,该结构中,c_cflag,最为重要,可设置波特率、数据位、校验位、停止位在设置波特率时需在数字前加上,B,,如,B9600,B19200,使用其需通过“与”“或”操作方式该结构中c_cflag最为重要,可设置波特率、数据位、,输入模式,c_iflag,成员控制端口接收端的字符输入处理输入模式c_iflag成员控制端口接收端的字符输入处理,串口控制函数,Tcgetattr,取属性,(termios,结构,),Tcsetattr,设置属性,(termios,结构,),cfgetispeed,得到输入速度,Cfgetospeed,得到输出速度,Cfsetispeed,设置输入速度,Cfsetospeed,设置输出速度,Tcdrain,等待所有输出都被传输,tcflow,挂起传输或接收,tcflush,刷清未决输入和,/,或输出,Tcsendbreak,送,BREAK,字符,tcgetpgrp,得到前台进程组,ID,tcsetpgrp,设置前台进程组,ID,串口控制函数Tcgetattr取属性(termios结构,2.1串口配置流程,保存原先串口配置使用,tcgetattr(fd,&oldtio),函数,struct termios newtio,oldtio;,tcgetattr(fd,&oldtio,);,激活选项有,CLOCAL,和,CREAD,用于本地连接和接收使能。

newtio.c_cflag|=CLOCAL|CREAD;,设置波特率,使用函数,cfsetispeed,、,cfsetospeed,cfsetispeed(,cfsetospeed(,2.1串口配置流程保存原先串口配置使用tcgetattr(f,设置数据位,需使用掩码设置newtio.c_cflag,newtio.c_cflag|=CS8;,设置奇偶校验位,使用,c_cflag,和,c_iflag,设置奇校验:,newtio.c_cflag|=PARENB;,newtio.c_cflag|=PARODD;,newtio.c_iflag|=(INPCK|ISTRIP);,设置偶校验:,newtio.c_iflag|=(INPCK|ISTRIP);,newtio.c_cflag|=PARENB;,newtio.c_cflag,设置数据位,需使用掩码设置设置停止位,通过激活,c_cflag,中的,CSTOPB,实现若停止位为,1,,则清除,CSTOPB,,若停止位为,2,,则激活,CSTOPB,newtio.c_cflag,设置最少字符和等待时间,对于接收字符和等待时间没有特别要求时,可设为,0,。

newtio.c_ccVTIME =0;,newtio.c_ccVMIN=0;,设置停止位,通过激活c_cflag中的CSTOPB实现若停,处理要写入的引用对象,tcflush,函数刷清(抛弃)输入缓存(终端驱动程序已接收到,但用户程序尚未读)或输出缓存(用户程序已经写,但尚未发送)int tcflush(int,filedes,int,queue,),queue,数应当是下列三个常数之一:,TCIFLUSH,刷清输入队列TCOFLUSH,刷清输出队列TCIOFLUSH,刷清输入、输出队列如:,tcflush(fd,TCIFLUSH);,处理要写入的引用对象,激活配置在完成配置后,需激活配置使其生效使用,tsettattr(),函数原型:,int tcgetattr(int,filedes,struct termios*,termptr,);,int tcsetattr(int,filedes,int,opt,const struct termios*,termptr,);,tcsetattr,的参数,opt,使我们可以指定在什么时候新的终端属性才起作用opt,可以指定为下列常数中的一个:,TCSANOW,更改立即发生。

TCSADRAIN,发送了所有输出后更改才发生若更改输出参数则应使用此选择项TCSAFLUSH,发送了所有输出后更改才发生更进一步,在更改发生时未读的所有输入数据都被删除(刷清),使用如:,tcsetattr(fd,TCSANOW,&newtio),激活配置在完成配置后,需激活配置使其生效使用tsetta,3、串口使用详解,在配置完串口的相关属性后,就可对串口进行打开,读写操作了其使用方式与文件操作一样,区别在于串口是一个终端设备3、串口使用详解 在配置完串口的相关属性后,就可对串口进,3.1 打开串口,fd=open(/dev/ttyS0,O_RDWR|O_NOCTTY|O_NDELAY);,Open,函数中除普通参数外,另有两个参数,O_NOCTTY,和,O_NDELAY,O_NOCTTY:,通知,linix,系统,这个程序不会成为这个端口的控制终端O_NDELAY:,通知,linux,系统不关心,DCD,信号线所处的状态(端口的另一端是否激活或者停止)3.1 打开串口fd=open(/dev/ttyS0,然后,恢复串口的状态为阻塞状态,用于等待串口数据的读入用,fcntl,函数:,fcntl,(,fd,F_SETFL,0,),;,接着,测试打开的文件描述府是否引用一个终端设备,以进一步确认串口是否正确打开。

isatty(STDIN_FILENO);,然后,恢复串口的状态为阻塞状态,用于等待串口数据的读入,3.2 读写串口,串口的读写与普通文件一样,使用,read,write,函数read(fd,buff,8);,write(fd,buff,8);,实例见:,seri.c,3.2 读写串口 串口的读写与普通文件一样,使用read,。

下载提示
相关文档
正为您匹配相似的精品文档