预览加载中,请您耐心等待几秒...
1/4
2/4
3/4
4/4

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

通用异步串行通讯接口一般应用方法 通用异步串行通讯(UART,以下简称:串口通讯),是一般嵌入式工程控制系统中使用非常普遍的一种通讯方式,又主要是以TTL电平、RS232、RS485或RS422总线方式为最多。所以,一般从事工控行业的IT工程师,需撑握串口通讯的一般应用方法,包括接口总线的硬件及通讯协议的软件。但还是有不少的工程师对此不了解,因此该技术文章对串口通讯应用相关的硬件及软件进行一些描述。 串口设备在一般的PC机、单片机、ARM处理器等常用的CPU都有,且有些芯片多达好几个串口。串口通讯是按“字节”进行数据传输,每一个字节的传输由这几个位元素组成:起始位、数据位、校验位、停止位。其中,数据位由应用程序填装,校验位是通过应用程序设置相应的控制寄存器设置,为可选位。设置好校验并填装好要发送的数据后,串口控制器会自动生成数据通讯的波形。因此在通讯波形中就会根据校验设置,增加或不增加校验波形时钟。串口通讯的时序如下所示: 空闲:通讯线上没有任何数据在通讯,这时通讯电平为高电平(均以TTL进行说明) 起始位:通讯电平由高电平变为低电平,表示开始 数据位:开始位以后,接就是数据位,且低位在前,高位在后。(根据不同的控制器,通讯位可设置为7位、8位、9位,具体的要视应用而确定) 校验位:根据数据位的高电平个数及校验设置要求,在该位出现一个高电平或低电平 停止位:通讯电平由低电平变为高电平后且通讯位数据位已达到指定个数,则表示停止通讯。 串口通讯的各通讯电平距离说明: TTL:最长安全通讯距离视控制器而定,一般不要超过30cm RS232:最长安全通讯距离不要超过2M RS485/RS422:最长安全通讯距离不能超过1KM 如果两个通讯设备在同一个PCB基板或很近的两个板卡之间,可以使用TTL电平进行通讯,如同一机箱内的两个单片机微控制系统。 如果两个通讯设备相距很近,但没有在同一系统中,可以使用RS232进行通讯,如控制系统与PC机之间。 如两个通讯设备之间距离非常远,则必须使用RS485或RS422方式进行通讯,如室外环境控制与检测设备与控制室的服务器或管理器之间的通讯。 串口通讯的基本硬件连接方式: TTL连接: RS232连接: RS485连接: RS422连接: 电路连接说明: 使用TTL或RS232进行串口通讯时,需要共地处理,即两个系统的地线需要连接在一起,且最好想办法尽可能减小信号线受到外界的干扰,以保证通讯的可靠。由于RS482和RS422使用的是差分信号进行通讯,所以不需要也没必要共地。 但是,由于RS485和RS422的通讯距离比较长,因此受到外界环境的共模干扰信号也比较严重,特别是冲击波类型的信号,因此,在RS485和RS422的通讯线一定要使用双绞线,且连接线的最端口位置,需要增加TVS、放电管等对冲击脉冲信号及弱小雷电信号的过滤,对RS485和RS422驱动芯片进行保护。由于使用这种通讯方式的特殊性,因此有必要将通讯驱动部份与系统部份隔离,典型的隔离方法就是使用光电隔离。 串口通讯应用软件: 无论使用TTL、RS232、RS485、RS422,都需要应用软件对通讯数据进行打包、发送、数据接收、组装、解析,都需要针对自己的应用,编排有利于自己的数据包格式及协议。通常情况下,会相对地设置通讯主机及从机。如远程数据采集系统的应用中,数据服务器是主机,数据采集终端为从机。通讯主机主动发出数据请求,从机等待并接收到有效数据或指令后进行相应处理或回应。因此数据发送过程及数据接收过程则成了串口通讯编程中的重要工作。 对于大多数应用中,可以按如下的编程思路: 数据发送: 准备工作: 需要一个全局的数据发送BUFF及发送数据的计数变量,且需要将串口初始化为可使用数据发送状态,关闭串口发送中断。 1、组装要发送的数据,并装入数据发送BUFF中,同时统计好数据发送的字节数,放入发送数据的计数变量中。 2、设置并打开串口的发送中断。 3、串口中断服务代码中,检查是否为发送中断。如果是,则检查是否为发送FIFO为空,确认后,向串口发送的FIFO中放入一定的数据量(该数据量是根据相应的发送FIFO数量而定,如STM32F103,一次只能放一个字节。),同时重新统计要发送的数据个数。如这时发送的数据个数变为0,表示要发送的数据已发送完毕,则关闭串口的发送中断。 数据接收: 准备工作: 同样,需要一个全局的数据接收BUFF及接收到数据总字节数的计数变量,并初始化串口为可接收数据状态,同时打开串口接收中断(如是类似于WinCE系统,它有一个数据接收线程,即类似于数据接收中断)。 1、当中断产生时,检查是否为数据接收中断状态,如果是,则从控制器的数据接收BUFF中读取数据并存入全局的数据接收BUFF,同时统计接收个数。 2、对当前