资源描述:
《《linux软件工程师(C语言)实用教程》第5章》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第5章串行通信本章重点串行通信编程的流程串行通信端口的设置串行通信中相关函数的应用25.1串行通信概述现在的串行通信端口(RS-232)是计算机上的标准配置。最为常见的应用是连接调制解调器进行数据传输。计算机通常包含COM1和COM2两个串行通信端口。一般计算机的COM端口从外观上看有9个针脚。在Linux中,所有的设备文件都位于“/dev”下,其中COM1、COM2对应的设备名依次为“/dev/ttyS0”、“/dev/ttyS1”。Linux对设备的操作方法和对文件的操作方法相同,因此,对串口的读写就可以使用简单的“read”、“write”函数来完成,所不同的是要对串口的一些参数进
2、行配置。35.2串行通信程序的设计5.2.1串行通信程序设计流程45.2.2打开通讯端口在Linux中把串口设备视为普通文件,可使用open()函数来打开串口设备。例5.1:打开PC的COM1串行通信端口。源程序代码com1open.c思考题:要求以只读的模式打开计算机的COM2。55.2.3设置串口属性在Linux中若要对串口进行操作,如改变其波特率、字符大小等,就是对结构体stucttermios中成员的值进行设置。注意:在这个结构中最为重要的是c_iflag,通过对它的赋值,用户可以设置波特率、字符大小、数据位、停止位、奇偶校验位和硬件控制等。65.2.3设置串口属性c_oflag
3、(输出模式)c_cflag(控制模式)c_lflag(局部模式)c_cc[NCCS](特殊控制字符)思考题:在设置串口属性时,要求奇偶校验。请写出设置串口的语句。75.2.4串口通信程序设计主要语句说明串口通信一般分为接收端和发送端。接收端:打开PC的COM1端口。如果以读写的方式打开COM1端口,语句可写为:fd=open(“/dev/ttyS0”,O_RDWR
4、O_NOCTTY);取得当前串口值,并保存至结构体变量oldtio。tcgetattr(fd,&oldtio);清除结构体变量newtio。bzero(&newtio,sizeof(newtio));85.2.4串口通信程序设
5、计主要语句说明设置串口参数。(1)假定设置波特率为38400,8个数据位,忽略任何调制解调器状态,同时启动接受器。newtio.c_cflag=BAUDRATE
6、CS8
7、CLOCAL
8、CREAD;(2)忽略奇偶校验错误newtio.c_iflag=IGNPAR;(3)设输出模式非标准型,同时不回应。ewtio.c_oflag=0;(4)启用正规模式newtio.c_lflag=ICANON;95.2.4串口通信程序设计主要语句说明清除所有列队在串口的输入输出tcflush(fd,TCIFLUSH);设置当前的串口参数为newtiotcsetattr(fd,TCSANOW,&newtio)
9、;读取缓存中的数据。read(fd,buf,255);关闭串口。close(fd);恢复旧的端口参数tcsetattr(fd,TCSANOW,&oldtio);105.2.4串口通信程序设计主要语句说明发送端:打开PC的COM2端口。fd=open(“/dev/ttyS1”,O_RDWR
10、O_NOCTTY);取得当前串口值,并保存至oldtio。tcgetattr(fd,&oldtio);清除结构体newtio。bzero(&newtio,sizeof(newtio));115.2.4串口通信程序设计主要语句说明设置串口参数。(1)设置波特率为38400,8个数据位,忽略任何调制解调器状
11、态同时启动接受器。newtio.c_cflag=BAUDRATE
12、CS8
13、CLOCAL
14、CREAD;(2)忽略奇偶校验错误newtio.c_iflag=IGNPAR;(3)设输出模式非标准型,同时不回应。ewtio.c_oflag=0;(4)启用正规模式newtio.c_lflag=ICANON;125.2.4串口通信程序设计主要语句说明清除所有列队在串口的输入输出tcflush(fd,TCIFLUSH);设置当前的串口为newtiotcsetattr(fd,TCSANOW,&newtio);向串口写入数据,储存在缓存中。write(fd,s1,1);关闭串口。close(fd);恢复旧
15、的端口参数tcsetattr(fd,TCSANOW,&oldtio);/*恢复旧的端口参数*/135.2.4串口通信程序设计主要语句说明例5.2:通过计算机的COM1和COM2进行通信,利用RS-232来传送信息,其中COM1为发射端,COM2为接收端,当接收端接收到字符‘@’时,结束传输。RS-232的通信格式为38400,n,8,1(38400表示波特率大小,n表示不进行奇偶校验,8表示数据位,1表示停止位)。步骤1:连线计算机