0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

通过改变GPIO端口状态实现RS485/422串口通信

电子设计 来源:电子世界 作者:张忠波,何苗,姚 2020-02-26 08:02 次阅读

1.引言

工程实践中,对于解决同一个问题,我们常面临两种选择:要么硬件简单软件复杂,要么软件复杂硬件简单。如某引信系统的DSP电路,需要与内部两个组部件以及外部多个系统进行接口或者信息交互,且总体要求采用异步串口方式进行通信。此类问题主要有三种解决方案:第一,在DSP的并行总线上扩展UART芯片,通过硬件转换实现,软件最简单;第二,在DSP的McBSP串行总线上扩展UART芯片,软件有一定的复杂度;第三,不扩展其他硬件直接利用IO引脚通过软件控制实现,该方法软件最复杂。根据以往文献可知在硬件资源允许的前提下,前两种方法已经得到了广泛的研究。

然而在产品的研制过程中,常出现引信硬件资源紧张的情况,无法扩展满足需求的UART,只能选择第三种解决方式,总体的高波特率和高可靠性要求增加软件设计的难度。通过软件的合理设计,成功地解决了以上问题。

2.串行通信基本原理

串行通信的基本原理是以改变数字电平的方式将数据按照一定的时间宽度(波特率)按位(通常低位在前高位在后)顺序传输,分为同步串口和异步串口两类。同步串口通信主要应用于传输速率高但传输距离要求不高的场合,异步串口则侧重于传输速率要求稍低的情形。

图1给出了异步串行通信的数据基本格式,对于一个完整的字节,传输时包含起始位、数据位、校验位。

通过改变GPIO端口状态实现RS485/422串口通信

实现同步串口通信通常需要6根总线,即收、发数据线,收、发帧同步线,收、发位时钟线。而异步串口则最少可只需2条总线(最多4条)便实现数据通信,如果采用差分传输还可以有效地提高传输距离,根据能否同时收发数据又分为全双工和半双工两种工作模式。

图2是应用最普遍的串口形式之一的RS485/422串口总线,RS485半双工传输采用一对差分信号,由主控端的RE和DE来控制当前数据收发,收发不能同时进行;RS422全双工传输采用两对差分信号,主控端直接独立收发,且收发可同时进行。

通过改变GPIO端口状态实现RS485/422串口通信

本研究通过软件控制改变GPIO端口的状态,完成RS485/422串口通信的时序。

3.基本流程设计

为提高软件的质量和可维护性,收发通讯实现时均采用位、字节和帧三个处理层次。每层相对独立,低层处理的结果通过状态传递方式通知上一层。

研究中采用的数据传输格式:1bit起始位“0”,8bit数据位(先低后高),无校验位,1bit停止位“1”,每个字节累计为10bit.

3.1 发送通信流程

主动发送数据形式的流程如下:

1)底层:位发送。在波特率控制的时间间隔内将发送数据管脚置为和当前bit一致的电平状态。

2)中间层:字节发送,如图3所示。发送当前bit,发送完位计数器+1,如果位数达到10位,则当前字节发送结束,并通知顶层;3)顶层:帧发送,如图4所示。首先检测串口当前状态是否为发送允许,如果不是则将串口置为接收禁止、发送允许状态,确定了发送允许后进入帧发送。帧发送按照报文格式顺序发送各字节,发送结束将串口设为发送禁止、接收允许状态。

通过改变GPIO端口状态实现RS485/422串口通信

通过改变GPIO端口状态实现RS485/422串口通信

3.2 接收通信流程

接收通信需要把每一个bit的数据准确地检测出来,确定字节的起止位,判断帧的起止字节,也就是说通过分析和计算将数据格式和通信协议所规定的每一个细节精确定位。对于帧起始时刻的判断,根据图1数据格式知在数据传输的过程中,即使数据位为全“1”或全“0”,由于有起始位和停止位的存在,也不会出现连续10个bit的“1”或“0”的情况,于是当连续出现10个bit的“1”时,则数据线处于停止传输的状态;而连续出现10个bit的“0”时,则数据线处于异常状态。于是接收通信开始后至少连续10个bit的“1”之后的“0”可以作为帧的起始位。这里的“帧”不是指通信协议中的完整报文,只是指收到的一段数据,至于当前字节是否为报文头,则需根据协议判断。好处是不漏任何数据,可靠接收约定报文。

接收通信流程如下:

1)底层:位接收,如图5所示。位接收在由波特率确定的时间间隔到达时,采样接收数据线的电平状态作为当前bit值,同时判断帧起始位,帧开始后的位接收完成,通知中间层进行字节处理。

通过改变GPIO端口状态实现RS485/422串口通信

2)中间层:字节接收,如图6所示。当新bit接收完成时,将当前Bit值按照格式组合到字节数据。当字节位计数器满一个字节时,如果满足起始位“0”和停止位“1”的条件,字节接收完成,并通知顶层进行帧接收控制,否则字节无效。

通过改变GPIO端口状态实现RS485/422串口通信

3)顶层:帧接收,如图7所示。首先检测串口当前状态是否为接收允许,如果不是则将串口置为接收允许、发送禁止状态,在确任接收允许后开始收数。在新字节接收完成后,将新字节写入接收缓冲区,同时根据通信协议启动报文识别,直到收到一帧完整的报文,结束接收通信。根据实际需要可以加入通信超时控制。

通过改变GPIO端口状态实现RS485/422串口通信

4.面向对象实现方法

在DSP中,对某一个GPIO管脚操作,需要对某一个寄存器的某一位进行置位或者清零。

为避免每次对管脚操作时去寻找寄存器的地址和位地址这个易出错的缺点,软件设计时采用C++类结构的方式进行数据封装,使用时只需在初始化时一次性的传入寄存器及其位地址,其余用处均采用交互性良好的助记符。

4.1 GPIO管脚类数据结构

在构建GPIO管脚类时,围绕寄存器以及位地址操作和电平操作进行。

软件数据类型与处理器的型号相关,本文采用TMS3206713处理器,为有效控制数制,将硬件支持数制和编译系统符号相对应,将C6000数据类型重定义,在GPIO操作中主要使用无符号数。

4.2 串口类数据结构

为了区分当前使用的串口类型,故定义串口类型号枚举,为串口操作程序提供识别入口。

由类的构造函数知,由于RS422和RS485所使用的管脚不同,为了将每种操作统一到一个函数中,采用了swtich结构,其他成员函数类似。其中发射函数Sending()对应图3、4中的流程,接收函数Receving()对应图5、6、7中的流程。

软件设计以定时器为中心,由使用目的属性来区分发送还是接收,以中断方式控制通信时序,能够实现全双工通信。在全双工通信中,当出现收发定时中断冲突的极端情况时,可设定发送优先,由于端口操作时间为纳秒级,接收滞后处理的影响可以忽略不计。

5.位检测与接收通信可靠性

由于每一个bit的检测结果直接决定着接收数据是否正确,按照波特率所确定的时间间隔对端口电平采样一次来确定bit的值来实现的软件,实验室拷机时存在误码现象,因此通过提高bit的检测能力,降低误码率。bit检测改进方法如下:

(1)接收通信的位采样仍然采用由波特率确定的时间间隔,但对于位检测时,采用读3次管脚电平然后进行表决的方式确定当前bit的值,有效降低了误码率,但仍有字节出错的问题,因为3取2的方式可以部分地剔除纳秒级的高频毛刺,但不能有效抑制强干扰引起的电平翻转,需进一步改进。

( 2 )将每一b i t检测的时间间隔缩短到1/3,即对每一个bit进行三次检测,然后做3取2判决,并将连续30个1/3bit的高电平后的首个1/3bit低电平作为帧起点的先决条件,确保正常情况下每一bit的3个1/3bit都是同样的电平值,这样做的好处是每一个bit的检测可以允许一个1/3bit出错。

以下进行简要分析,令改进之前的误码率是p,引起误码的噪声为非相干的,第一次改进后,对于任一bit的三次检测中允许有一次出错,因此在理想状态下的误码率为检测出错两次和三次的条件概率:

通过改变GPIO端口状态实现RS485/422串口通信

如果p=10-6,那么最终的误码率可以降低到约为1.4×10-25,分析表明改进措施应该有效。

经改进的软件在实验室进行了30小时通讯强度试验,试验中20ms完成一轮收发,报文长度为20个字节,在约1.08×108字节的接收通信中,未发现一个字节的通信错误。此后在产品8个月的调试与外场试验统计数据表明,除了有一次因通信接口芯片损坏以及一次不明原因的通信出错以外,没有出现因为软件产生的通信故障,证实了接收通信的可靠性。

6.结论

本文在GPIO模拟通用RS485/422串口通信的研究中,采用分层处理技术、优化bit检测方法、面向对象设计手段,实现了全双工通讯,具有逻辑清晰、易于实现、可靠性高和易于改进、维护和移植的优点;但也存在一定的局限性,如软件不宜采用汇编语言实现,全双工通信是以定时器为中心进行统筹实现的,并不是真正独立意义上的全双工,其波特率受工作频率的限制较大。

责任编辑:gt


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • dsp
    dsp
    +关注

    关注

    553

    文章

    7998

    浏览量

    348872
  • 芯片
    +关注

    关注

    455

    文章

    50791

    浏览量

    423491
  • 总线
    +关注

    关注

    10

    文章

    2881

    浏览量

    88076
收藏 人收藏

    评论

    相关推荐

    stm32串口1和RS485通信串口2的配置过程是怎样的?

    stm32串口1和RS485通信串口2的配置过程是怎样的?
    发表于 12-08 06:49

    RS485 232串口通信数据解析

    文章目录(RS485 232串口通信数据解析实用干货(1)生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX
    发表于 02-22 07:14

    RS232C/RS422/RS485通信标准

    RS232C、RS422/RS485通信标准 一、RS232C串行接口标准简介
    发表于 10-17 08:35 1.2w次阅读
    <b class='flag-5'>RS</b>232C/<b class='flag-5'>RS422</b>/<b class='flag-5'>RS485</b><b class='flag-5'>串</b>行<b class='flag-5'>通信</b>标准

    RS232-RS485串口通信详解

    RS232-RS485串口通信详解,很不错的东东
    发表于 08-09 15:08 29次下载

    rs232串口接线,RS232串口通信基本接线方法

    目前较为常用的串口有9针串口(DB9)和25针串口(DB25),通信距离较近时(《12m),可以用电缆线直接连接标准RS232
    发表于 11-01 15:47 6.8w次阅读
    <b class='flag-5'>rs</b>232<b class='flag-5'>串口</b>接线,<b class='flag-5'>RS</b>232<b class='flag-5'>串口</b><b class='flag-5'>通信</b>基本接线方法

    RS485转换器可有效解决RS232串口通信中存在的问题

    采用RS485转换器,可有效解决RS232串口通信中存在的一些问题: RS232通信距离,理论上
    发表于 02-13 10:57 2131次阅读

    RS485串口转mqtt协议网关

    RS485串口转mqtt协议网关
    发表于 11-21 10:12 2343次阅读
    <b class='flag-5'>RS485</b><b class='flag-5'>串口</b>转mqtt协议网关

    RS485/RS232串口转Modbus网关

    RS485/RS232串口转Modbus网关
    发表于 12-03 16:59 2661次阅读

    RS485或者rs232串口设备如何上传mqtt平台

    RS485或者rs232串口设备如何上传mqtt平台
    发表于 12-03 17:03 1765次阅读

    (RS485 232串口通信数据解析实用干货(1)

    文章目录(RS485 232串口通信数据解析实用干货(1)生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX
    发表于 12-28 19:35 16次下载
    (<b class='flag-5'>RS485</b> 232<b class='flag-5'>串口</b><b class='flag-5'>通信</b>数据解析实用干货(1)

    如何实现RS485串口通讯采集模拟量

    如何实现RS485串口通讯采集模拟量流程分享
    的头像 发表于 08-23 11:30 4830次阅读
    如何<b class='flag-5'>实现</b><b class='flag-5'>RS485</b><b class='flag-5'>串口</b>通讯采集模拟量

    如何实现开关量输入与继电器输出联动功能RS485串口通讯

    如何实现开关量输入与继电器输出联动功能RS485串口通讯流程分享
    的头像 发表于 08-23 11:33 2142次阅读
    如何<b class='flag-5'>实现</b>开关量输入与继电器输出联动功能<b class='flag-5'>RS485</b><b class='flag-5'>串口</b>通讯

    工业RS485串口网关实现485接口数据采集

    其成为首选的串行接口。但是RS485通信的最远的短离也只有1.2KM,无法实现远程控制,对于分布式的设备来说,环境不适合布线或者布线成本高,数据采集远程监控存在问题。那么如何解决这个问题呢? 利用物通博联工业
    的头像 发表于 02-03 16:56 1716次阅读
    工业<b class='flag-5'>RS485</b><b class='flag-5'>串口</b>网关<b class='flag-5'>实现</b><b class='flag-5'>485</b>接口数据采集

    rs422rs485的区别

    。 首先,RS422RS485都是点对点通信协议,即只能在单个发送方和单个接收方之间进行通信。它们通过将电压差异传输到数据线上进行
    的头像 发表于 12-20 17:03 8743次阅读

    RS232、RS422RS485怎么选?串口通信标准的深度剖析!

    RS232、RS422RS485三种串口通讯规范各有千秋,适用于不同的应用场景。RS232适宜短路线、低速简单地通讯,
    的头像 发表于 09-02 11:51 3651次阅读
    <b class='flag-5'>RS</b>232、<b class='flag-5'>RS422</b>、<b class='flag-5'>RS485</b>怎么选?<b class='flag-5'>串口</b><b class='flag-5'>通信</b>标准的深度剖析!