版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PC机串口通信的工作原理MCU资料2008-08-2709:03:59阅读22评论0字号:大中小订阅串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线UniversalSerialBus或者USB混淆)。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总常不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。典型地,串口用于ASCII码字符的传输。通信使用3根线完成:(1)地线,(2)发送,(3)接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。串口通信最重要的参数是波特率、数据位停止位和奇偶校验。对于两个进行通行的端口,这些参数必须匹配:a,波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如300波特表示每秒钟发送300个bit。当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。这意味着串口通信在数据线上的采样率为4800Hz。通常电话线的波特率为14400,28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。b,数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是8位的,标准的值是&7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII码是0〜127(7位)。扩展的ASCII码是0〜255(8位)。如果数据使用简单的文本(标准ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。c,停止位:用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。d,奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验位位1,这样就有3个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步、RS485串口通信电路图二.VxWorks中基于RS485总线的串口通信协议及实现摘要:本文介绍了在嵌入式实时操作系统Vxworks下串行设备的驱动架构及实现,提出了一种基于RS-485总线的新型串口通信协议,重点讨论了基于这种协议的应用程序的设计方法,发送时主要采用了总线仲裁机制,接收时主要采用了字符合法性校验、长度校验、内容的CRC校验,提高了系统的通信效率和稳定性。关键词:VxWorks;RS-485;通信协议;总线仲裁;CRC校验1引言随着信息技术和互联网的飞速发展,以及计算机、通讯、数码产品等领域的高速增长,数字化时代已经来临。嵌入式设备是数字化时代的主流产品,嵌入式软件是数字化产品的核心,作为嵌入式软件的基础和关键嵌入式操作系统在产业发展过程中扮演着越来越重要的角色,应用遍及工业自动化、网络通信、航空航天、医疗仪器等领域。RS-485总线RS-485总线接口是一种常用的串口具有网络连接方便、抗干扰性能妹传输距离远等优点。RS-485收发器采用平衡发送和差分接收,因此具有抑制共模干扰的能力,加上收发器具有高的灵敏度,能检测到低达200mv的电压,可靠通信的传输距离可达数千米。使用RS-485总线组网,只需一对双绞线就可实现多系统联网构成分布式系统、设备简单、价格低廉、通信距离长。VxWorks中串口驱动的实现VxWorks操作系统是美国WindRiver公司设计开发的嵌入式实时操作系统(RTOS),是嵌入式开发环境的关键组成部分。Vxworks操作系统的I/O系统可以提供简单、统一、与任何设备无关的接口。这些设备包括:面向字符设备、随机块存储设备、虚拟设备、控制和监视设备以及网络设备Vxworks的I/O系统包括基本I/O系统和缓冲I/O系统,具有比其他I/O系统更快速,兼容性更好的特性。这对于实时系统是很重要的。3.1串口驱动架构应用程序I/O系统无忧用脚F发网设备9锄程序硬件退备圈1串口设备驱瓣序架构基于vxWorks的串口设备驱动程序架构,对vxWorks的虚拟设备ttyDrv进行封装,向上将TTY设备安装到标准的I/O系统中,上层应用通过标准的I/O接口完成对硬件设备的操作,向下提供对实际硬件设备的底层设备驱动程序。其软件架构如图1所示。由图1可知,串口设备驱动由两部分组成,一部分为对ttyDrv进行封装,将串行设备安装到标准的I/O系统中,提供对外的接口;另一部分为串行设备驱动程序,提供对硬件设备的基本操作。虚拟设备ttyDrv管理着I/O系统和真实驱动程序之间的通信。在I/O系统方面,虚拟设备ttyDrv作为一个字符型设备存在,它将自身的入口点函数挂在I/O系统上创建设备描述符并将其加入到设备列表中。当用户有I/O请求包到达I/O系统中时,I/O系统会调用ttyDrv相应的函数响应请求。同时,ttyDrv管理了缓冲区的互斥和任务的同步操作。另一方面,ttyDrv负责与实际的设备驱动程序交换信息。通过设备驱动程序提供的回调函数及必要的数据结构,ttyDrv将系统的I/O请求作相应的处理后,传递给设备驱动程序,由设备驱动程序完成实际的I/O操作。匿审口驱动初始化流程3.2驱动初始化串口设备的初始化xxDevInit流程如图2。设备驱动的初始化过程首先调用系统函数ttyDrv(),该函数通过调用iosDrvInstall()将ttyOpen()、ttyIoctl()、tyRead()、tyRead、tyWrite安装到系统驱动函数表中,供I/O系统调用。接着根据用户入参对串口芯片寄存器进行初始化,安装驱动函数指针。最后调用系统函数ttyDevCreate()创建ttyDrv设备。该函数初始化设备描述符,调用tyDevInit()函数初始化tyLib、初始化select功能、创建信号量和输入输出缓冲区,调用iosDevAdd()函数将设备添加到设备列表中并将设备置为中断模式。驱动模块初始化成功后,应用程序就可以用标准的I/O函数read()和write()收发数据了。4RS-485通信协议4.1485通信帧格式表1 485通信帧格式目的地 源地址 长度 控制 帧净荷数据 CRC检1Byte 1Byte 1Byte 2Bytes 由长度字节确定,<255Bytes2Bytes长度字段不包含控制字段、检验字段。校验字段使用CCITT的CRC16的校验方法,其生成多项式G(X)=Xli+X*+尸+1为 。校验字段默认是加上的,只有在发送方的CPU负荷比较大时,并且能够保证本帧出现的错误不会对系统产生潜在的和现实的影响,或者保证影响在可以控制在一定范围内并且可以忍受时,才考虑取消校验字段。当接收方接收到帧的总长度减去长度字段值与帧头的长度之和,得到的结果为2时,表明发送方附带了校验和。4.2485数据链路层帧表2485链路层帧格式头标志 485通信帧 尾标志(0x7E) (0x7E)IByte 最大不超过485通信帧的长度(不包括字节拆分的添加字 2Bytes符)头标志是任意个数的连续的字符0x7E,尾标志也是任意个数的连续的字符0x7E。预定头标志为IByte,尾标志为2Bytes,在发送方的CPU认为发送完毕最后一个尾标志字符时,保证第一个尾标志字符能够完全到达目的设备。发送方除头标志或尾标志之外不允许出现0X7E若遇到0X7E则拆分成0X7D,0X5E;若出现0X7D,则拆分成0X7D,0X5D传送。5串行通信应用程序设计5.1初始化配置创建一个51200Bytes的接收环形缓冲区,用来存放剩余的或不成帧的数据:g_tRecvRingId=rngCreate(51200);串口设备描述符为“myCom”,打开串口并创建设备读写描述符:g_sdwChannelFD=open("myCom”,O_RDWR,0);•设置波特率:ioctl(g_sdwChannelFD,FIOBAUDRATE,g_RS485LinkCB[i].sdwBaudRate);•清空接收、发送缓存:ioctl(g_sdwChannelFD,FIOFLUSH,0);•工作模式设置:ioctl(g_sdwChannelFD,FIOSETOPTIONS,OPT_RAW);5.2通信发送过程
要按照双方约定的485通信帧格式将消息组帧,并按照约定数据链路传输协议组成485的数据链路帧。接下来就是如何发送数据包了。在RS-485通信中,发送过程主要采取了总线仲裁机制:在向485总线写数据时,主设备先写一字节的地址请求,所有的从设备均会收到,只有地址与之相等的从设备端口打开,其他设备全部关闭。这样,主设备与从设备之间的通信就是点对点的。每一个从设备均有一根请求线与主设备相连,若从设备需要与主设备通信时,先通过请求线进行请求,当请求成功后,从设备应能检测到总线上的地址与自身地址相同,从设备才能打开发送中断,才能发送消息,发送完之后必须关闭发送中断,释放总线,以保证其他从设备这段时间能与主设备正常通信,提高通信效率。RS-485通信发送流程图如图3所示。5.3通信接收过程对于串口通信,仍然要关心数据接收的实时性,因此采用中断方式,利用VxWorks提供的select函数的事件触发机制,将读串口的任务阻塞使其一直等待数据,当有数据来到的时候该任务会立刻自动响应,提高系统的实时性,调用read()接收数据并存入先前创建的接收环形缓冲区g_tRecvRingId中直至缓冲区g_tRecvRingId满或接收完链路上的数据,接下来就是根据通信协议来处理数据包--解帧处理过程。接收方判断开始485通信帧的条件是,设备不报告接收错误的情况下,接收到0x7E字符之后的第一个非0x7E的字符。判断帧结束的条件是,帧接收已经开始,遇到第一个尾标志字符。在两个0X7E间若收到0X7D,则丢弃,并将其后的一个字节数据与0X20异或。当链路层的通信帧接收已经开始的情况下,设备报告字符接收错误,此时应当丢弃本帧,结束帧的接收,重新开始搜索下一帧。长度字段后面的字节个数不等于长度字段指示,并且也不等于长度字段加2时,指示长度错误,作无效帧。帧长度小于帧头的长度的帧视为无效帧。当接收的字符个数超过最大的485通信帧字节数一一262时,也认为接收错误,重新开始搜索头标志,检出下一帧数据。超时保护:如果接收收方在接收一帧数据时,在未接收完一帧时,超过20ms(2个Ticks)仍未有数据到达,则认为本帧数据接收结束,并将其丢弃。在允许进行校验的情况下,对接收到的帧进行CRC校验。如果校验字段与帧的校验结果不符,认为帧出错,通常作丢弃处理。帧头中,目的地址与接收单元不匹配时,丢弃该帧。6、结束语VxWorks是一种高性能嵌入式实时操作系统,它以其良好的可靠性和卓越的实时性被广泛地应用在通信、自动化、航空等各个领域中。许多外部终端设备如打印机、逻辑分析仪等都采用串行方式,以及对单板的调试也要用到串行口,因此掌握在Vxworks下的串行通信是非常重要的。本文的创新之处在于提出一种新的RS-485通信协议,在这种协议中,发送方根据协议组帧,再采用总线仲裁机制将消息发送出去,而接收方则将收到的字符合法性校验,当收到一帧完整的帧后,根据帧头中长度字段做帧长度校验,再采用CCITT的CRC16校验方法做内容校验,如果长度校验已经出错,则不再做内容校验,提高了通信效率。文章给出了基于这种协议的串口通信应用程序的设计,详细描述了通信双方遵循约定的通信协议的通信过程及如何保证通信过程中信号的正确性、完整性。笔者在VxWorks开发过程中已将应用程序用于实例,而且运行可靠,具有很强的实用价值。RS485串口通信试验(接受与发送)技术交流2010-03-2922:11:53阅读182评论0字号:大中小订阅/*******************************************************************************RS485串口通信试验(接受与发送)1.通过本例程了解串口的基本原理及使用,理解并掌握对串口进行初始化2.请使用串口调试助手(Baud4800、数据位8、停止位1、效验位无)做为上位机(发送)数据和(接受)数据,*请在字符串输入框中输入字符和数字(HEX),按发送按钮。观看接受窗显示情况.也可以用自动循环发送。3.试验RS485需要用RS232转485的转换头。RS485的A对应串口头的9针B对应4针.接法大家可以参考原理图。********************************************************************************/#include<REG52.H>#include<stdio.h>sbitRS485E=P3A7;//定义485的使能脚bitSendFlag;unsignedintReData,SenData;/**************************************延时程序**************************************/voiddelay(unsignedchari)(unsignedcharj;for(i;i>0;i--)for(j=200;j>0;j--);}voidmain(void)(SCON=0x50; //REN=1允许串行接受状态,串口工作模式1TMOD|=0x20; //定时器工作方式2PCON|=0x80;//TH1=0xFD;//baud*2/*reloadvalue19200、数据位8、停止位1。效验位无(11.0592)TH1=0xF3;////baud*2/*波特率4800、数据位8、停止位1。效验位无(12M)TL1=0xF3;TR1=1;ES=1; 〃开串口中断EA=1; //开总中断//IE=0x0;while(1)(if(SendFlag==1)//max485(半双工通信)RE/DE定义RE=0为接受状态DE=1为发送状态(参考MAX485芯片管脚)(RS485E=1; // RS5485E=0为接收状态RS5485E=1为发送状态SBUF=SenData;〃发送数据delay(50);}else(RS485E=0; //接收状态}}/****************************************************串口中断程序*****************************************************voidser_int(void)interrupt4using1(if(TI==1)(TI=0;SendFlag=0;}if(RI==1)//RI接受中断标志(RI=0; 〃清除RI接受中断标志ReData=SBUF;//SUBF接受/发送缓冲器SenData=ReData;SendFlag=1;串口通信基本接线方法232&4852009-07-2022:01:19阅读214评论0字号:大中小订阅在电脑的使用中往往会遇到各种各样的连接线.这些连接线外观上好像都差不多,但内部结构完全不同并且不能混用.如果在使用中这些连接线坏了,往往很多使用者都不知道应该怎么办,下面就给出这些常见的连接线的连线方法以便于修理或查找故障.在介绍之前先对一些市场常用名词做出解释.现在所有的接头都可以分为公头和母头两大类.公头:泛指所有针式的接头.母头:泛指所有插槽式的接头.目前较为常用的串口有9针串口(DB9)和25针串口(DB25),通信距离较近时(<12m),可以用电缆线直接连接标准RS-232端口(RS-422、RS-485较远),若距离较远,需附加MODEM(MODEM)或远华科技发展有限公司系列产品.1、DB9和DB25的常用信号脚说明9针串口(DB9)25针串口(DB25)针号功能说明缩写针号功能说明缩写1数据载波检测DCD8数据载波检测DCD2接收数据RXD3接收数据RXD
3发送数据TXD2发送数据TXD4数据终端准备DTR20数据终端准备DTR5信号地GND7信号地GND6数据设备准备好DSR6数据设备准备好DSR7请求发送RTS4请求发送RTS8清除发送CTS5清除发送CTS9振铃指示DELL22振铃指示DELL2、RS-232C串口通信接线方法(三线制)首先,串口传输数据只要有接收数据针脚和发送针脚就能实现:同一个串口的接收脚和发送脚直接用线相连,两个串口相连或一个串口和多个串口相连•同一个串口的接收脚和发送脚直接用线相连对9针串口和25针串口,均是2与3直接相连;•两个不同串口(不论是同一台计算机的两个串口或分别是不同计算机的串口)9针一9针25针一25针9针一25针233222322333557757上面表格是对微机标准串行口而言的,还有许多非标准设备,如接收GPS数据或电子罗盘数据,只要记住一个原则:接收数据针脚(或线)与发送数据针脚(或线)相连,彼些交叉,信号地对应相接,就能百战百胜.3、串口调试中要注意的几点:•不同编码机制不能混接,如RS-232C不能直接与RS-422接口相连,必须通过武汉迈威光电技术有限公司系列转换器才能连接;•线路焊接要牢固,不然程序没问题,却因为接线问题误事;•串口调试时,准备一个好的调试工具,如串口调试助手、串口精灵等,有事半功倍之效果;■强烈建议不要带电插拨串口,插拨时至少有一端是断电的,否则串口易损坏.所有接头的针脚有统一规定,在接头上都印好了的,连接时要注意查看.在接线时没有提及的针脚都悬空不管.下面给出串口,并口各针脚功能表以供高级用户维护电缆或接头时使用.并口针脚功能一览表针脚功能针脚功能1选通端,低电平有效10确认,低电平有效2数据通道011忙3数据通道112缺纸4数据通道213选择5数据通道314自动换行,低电平有效6数据通道415错误,低电平有效7数据通道516初始化,低电平有效8数据通道617选择输入,低电平有效9数据通道718--25地线单片机与PC串口通信的部分C源代码串口2010-04-0616:54:34阅读139评论0字号:大中小订阅单片机与PC串口通信的部分C源代码2008-8-312:18:00点击:105单片机与PC串口通信的部分C源代码#defineUART_RX_BUFFER_SIZE16/*1,2,4,8,16,32,64,128or256bytes*/#defineUART_RX_BUFFER_MASK(UART_RX_BUFFER_SIZE-1)#defineUART_TX_BUFFER_SIZE16/*1,2,4,8,16,32,64,128or256bytes*/#defineUART_TX_BUFFER_MASK(UART_TX_BUFFER_SIZE-1)/*StaticVariables*/staticdataunsignedcharUART_RxBuf[UART_RX_BUFFER_SIZE];staticdatavolatileunsignedcharUART_RxHead;staticdatavolatileunsignedcharUART_RxTail;staticdataunsignedcharUART_TxBuf[UART_TX_BUFFER_SIZE];staticdatavolatileunsignedcharUART_TxHead;staticdatavolatileunsignedcharUART_TxTail;bitfSeri0_Send_Ok;/*initializeUART*///t2做波特率发生器9600bpsat11.0592MHzvoidInitUART()(unsignedcharx;T2CON=0x30; //t2做波特率发生器TH2=0xFF;TL2=0xdc;RCAP2H=0xFF;RCAP2L=0xdc;SCON=0x50; /*SM0SM1SM2RENTB8RB8TIRI:9bit*/PCON=0x00; /*bautrate,80h:double;00h:normal*/ES=1; /*串口中断允许1-enable */PS=0; /*串口中断优先级1-高,0-低 */TR2=1; /*StartT2asbautrategenerator*/x=0;/*flushreceivebuffer*/UART_RxTail=x;UART_RxHead=x;UART_TxTail=x;UART_TxHead=x;}/*interrupthandlers*/voidUART_interrupt(void)interrupt4(if
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年汽车销售合同担保服务模板附车辆改装服务3篇
- 2024年短期公租房租赁合同
- 岗位职责表课程设计
- 2024幼儿园发展规划(35篇)
- 基于机器学习的古代绘画修复与复原技术研究
- 2024年营销工作计划(59篇)
- 沼气池储气罐课程设计
- 线描西兰花课程设计
- 英汉互译系统的课程设计
- 物流行业运输司机工作总结
- 经颅多普勒超声(TCD)
- 激励约束考核实施细则
- 抽奖券模板(可修改)
- 高压蒸汽灭菌效果监测记录簿表(完整版)
- 人教版物理八年级上册全册知识点总结
- 编织密度自动计算
- 硝酸及液体硝酸铵生产行业风险分级管控体系实施指南
- 瑶医目诊图-望面诊病图解-目诊
- 染色体标本的制作及组型观察
- 导游实务课件
- 艺术类核心期刊目录
评论
0/150
提交评论