《串口程序设计》PPT课件.ppt
1,串口程序设计,串口概述 用户常见的数据通信的基本方式可分为(1)并行通信:用多条数据线将各位同时传送 特点:传送速度快,适用于短距离、速度要求高的场合。(2)串行通信:用一条数据线一位位的顺序传送 特点:成本低,适用于远距离、速度慢的场合。串行口是计算机一种常用接口。常用串口是 RS-232-C 接口(又称 EIA RS-232-C),是在 1970 年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。,2,串口程序设计,异步串行 I/O(UART)方式:将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。接收方对于同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。为了恢复发送的信息,双方必须协调工作。在微型计算机中大量使用异步串行 IO 方式,双方使用各自的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。,发送数据,3,串口程序设计,串口通讯电缆接线方式,4,串口程序设计,串口的引脚说明,5,串口程序设计,S3C2410X内部具有两个独立的UART控制器,每个控制器都可以工作在Interrupt模式或者DMA模式。同时,每个UART均具有16字节的FIFO,支持最高波特率230.4Kbps。串口配置主要包括波特率、起始位数量、数据位数量、停止位数量和流控协议。在 Linux 下串口文件位于/dev 下 串口一 为/dev/ttyS0 串口二 为/dev/ttyS1,6,串口程序设计,串口的设置主要是设置 struct termios 结构体的各成员值。struct termiosunsigned short c_oflag;/*输出模式标志*/unsigned short c_cflag;/*控制模式标志*/unsigned short c_lflag;/*区域模式标志*unsigned char c_line;/*行控制line discipline*/unsigned char c_ccNCC;/*控制特性*/unsigned short c_iflag;/*输入模式标志*/;,7,串口程序设计,1、设置参数的实现示例:tcgetattr(fd,,8,串口程序设计,2、设置参数的实现示例:激活选项CLOCAL和CREAD CLOCAL用于本地连接 CREAD用于接收使能 例:newtio.c_cflag|=CLOCAL|CREAD,9,串口程序设计,3、设置参数的实现示例:设置波特率输入波特率设置:cfsetispeed输出波特率设置:cfsetospeed例:cfsetispeed(,10,串口程序设计,4、设置参数的实现示例:设置数据位大小 首先去掉数据位中的掩码,在重新设置。例:newtio.c_cflag,11,串口程序设计,5、设置参数的实现示例:设置奇校验位 newtio.c_iflag|=(INPCK|ISTRIP)/INPCK奇偶校验使能;ISTRIP 除去奇偶校验位 newtio.c_cflag|=PARODD;/奇校验 newtio.c_cflag|=PARENB;/校验位使能课堂练习一:设置偶校验位,newtio.c_iflag|=(INPCK|ISTRIP);newtio.c_cflag,12,串口程序设计,6、设置参数的实现示例:设置停止位 下面是设置停止位为1的代码:newtio.c_cflag,13,串口程序设计,7、设置参数的实现示例:处理要写入的引用对象 tcflush(fd,queue_selector);queue_selector取值如下:TCIFLUSH:刷新收到的数据但不读取 TCOFLUSH:刷新写入的数据但是不传送 TCIOFLUSH:同时刷新收到的数据但是不读,并且刷新写入的数据但是不传送 例如采用第三种方法:,tcflush(fd,TCIOFLUSH);,14,串口程序设计,8、设置参数的实现示例:激活配置 tcsetattr(fd,OPTION,OPTION的选项如下:TCSANOW:改变的配置立即生效 TCSADRAIN:改变的配置在所有写入fd的输出结束后生效 TCSAFLUSH:改变的配置在所有写入fd引用对象的输出都被结束后生效,所有已接受但未读入的输入都在改变发生前丢弃 例如:想使改变立即生效,tcsetattr(fd,TCSANOW,15,串口程序设计,串口操作需要的头文件#include/*标准输入输出定义*/#include/*标准函数库定义*/#include/*Unix 标准函数定义*/#include/*定义系统类型*/#include/*定义文件信息*/#include/*文件控制定义*/#include/*终端控制定义*/#include/*错误号定义*/,16,串口程序设计,打开串口在 Linux 下串口文件位于/dev 下 串口一 为/dev/ttyS0 串口二 为/dev/ttyS1 int fd;/*以读写方式打开串口*/fd=open(/dev/ttyS0,O_RDWR);if(-1=fd)/*不能打开串口*/perror(提示错误!);设置串口 串口的设置主要是设置 struct termios 结构体的各成员值。,17,串口程序设计,设置参数的实现示例:tcgetattr(fd,/*设置串口新参数*/,18,串口程序设计,读写串口发送数据 char buffer1024;int Length;int nByte;nByte=write(fd,buffer,Length)读取串口数据 char buff1024;int Len;int readByte;readByte=read(fd,buff,Len);,19,串口程序设计,关闭串口关闭串口就是关闭文件close(fd);,20,串口程序设计,串口参数设定和文件操作的几个重要函数,完整实例,21,Thank you,谢谢,