RS485通讯协议

发布者:姑苏清风泉源客最新更新时间:2015-11-17 来源: eefocus关键字:RS485  通讯协议 手机看文章 扫描二维码
随时随地手机看文章
RS485缺点:

RS485总线是一种常规的通信总线,它不能够做总线的自动仲裁,也就是不能够同时发送数据以避免总线竞争,所以整个系统的通信效率必然较低,数据冗余量较大,对于速度要求高的应用场所不适应用RS485总线。同时由于RS485总线上通常只有一台主机,所以这种总线方式是典型的集中—分散型控制系统。一旦主机出现故障,会使整个系统的通信限于瘫痪状态,因此做好主机的在线备份是一个重要措施。

**传统光电隔离的典型电路:

VDD与+5V1(VCC485)是两组不共地的电源,一般用隔离型的DC-DC来实现。通过光耦隔离来实现信号的隔离传输,ISL3152EIBZ与MCU系统不共地,完全隔离则有效的抑制了高共模电压的产生,大大降低485的损坏率,提高了系统稳定性。但也存在电路体积过大、电路繁琐、分立器件过多,传输速率受光电器件限制等缺点,对整个系统的稳定性也有一定影响。

***RXD1 :串口接收端

***TXD1 :串口传输端

***TRE1 :为控制位:控制发送还是接收数据;

当TRE1=1(高电平时),光耦电路121截止,/RE=1(无效),DE=1(有效),即发送数据;

当TRE=0   (低电平时),光耦电路导通,/RE=0(有效),即接收数据,DE=0(无效);

/RE: 485接收端

DE:485发送端

第一步,配置好串口发送、接收端引脚和485控制引脚;

因为RXD1引脚相对于STM32芯片来说是接收外来数据,所以设置为输入;

TXD1引脚相对于STM32芯片来说是对外发送数据,所以设置为输出;

TRE1 引脚是对外发送“1”或“0”高低电平命令,所以设置为输出;

  1.   
  2. void UART2Init(void)  
  3.  
  4.         GPIO_InitTypeDef GPIO_InitStructure;  
  5.         USART_InitTypeDef USART_InitStructure;  
  6.   
  7.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);  
  8.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  
  9.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  
  10.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//使能外设时钟      
  11.   
  12.         //GPIO结构的成员设置如下:  
  13.            
  14.          GPIO_InitStructure.GPIO_Pin GPIO_Pin_1  
  15.         GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; //50M时钟速度  
  16.         GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; //推挽输出  
  17.         GPIO_Init(GPIOA, &GPIO_InitStructure);  
  18.   
  19.           
  20.         GPIO_InitStructure.GPIO_Pin GPIO_Pin_2;          //485_TX  
  21.         GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;   
  22.         GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP;  //复用推挽输出  
  23.         GPIO_Init(GPIOA, &GPIO_InitStructure);  
  24.   
  25.         GPIO_InitStructure.GPIO_Pin GPIO_Pin_3;           //485_RX  
  26.         GPIO_InitStructure.GPIO_Mode GPIO_Mode_IN_FLOATING; //浮空输入  
  27.         GPIO_Init(GPIOA, &GPIO_InitStructure);  
  28.   
  29.         //串口的结构成员设置如下:  
  30.         USART_InitStructure.USART_BaudRate 9600;           
  31.         USART_InitStructure.USART_WordLength USART_WordLength_8b;  
  32.         USART_InitStructure.USART_StopBits USART_StopBits_1;  
  33.         USART_InitStructure.USART_Parity USART_Parity_No;  
  34.         USART_InitStructure.USART_HardwareFlowControl USART_HardwareFlowControl_None;  
  35.         USART_InitStructure.USART_Mode USART_Mode_Tx USART_Mode_Rx;  
  36.         USART_Init(USART2, &USART_InitStructure);  
  37.   
  38.         USART_Cmd(USART2, ENABLE);  
  39.   
  40.           
  41.       //  USART_ClearFlag(USART3, USART_FLAG_TC);   
  42.           
  43.          
  44.        USART_GetITStatus(USART1, USART_FLAG_TC);  
  45.        
  46.  

第二步:发送数据

这里需要注意的是:

 

方法一:USART_ClearFlag(USART3, USART_FLAG_TC);

方法二:

               USART_GetITStatus(USART1, USART_FLAG_TC);

刚上电时出现乱码的原因:

while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);  // USART_FLAG_TXE---检测发送数据寄存器空标志位

如果USART_FLAG_TC---发送完成标志位

(1)       当设为USART_FLAG_TXE---检测发送数据寄存器空标志位—为空,但是发送移位寄存器不为空,数据还没有完全的发送出去,又有数据就被写进来了,所以就会容易出现乱码;

(2)       当设为USART_FLAG_TC—检测发送完成标志位—为空,即发送移位寄存器为空,数据才真正的发送出去,因此此时又有数据被写进来也不会发生乱码

STM32的数据发送有两个中断标志,一个是发送数据寄存器空标志,一个是发送完毕标志。两个标志都可以引起中断. 

要以中断的方式发送一个数据包,流程是这样的:

1.设置RS485的方向为发送,使能发送寄存器空中断,使能完毕进入串口中断。

2.串口中断里读取串口状态,并填充一个数据到发送数据寄存器,硬件自动清除发送数据寄存器空标志,串口数据发送开始。

3.串口发送完一个数据,发送数据寄存器变空,再进入中断,继续填充下一个数据,直到最后一个数据填充完,使能串口

 发送完毕中断。

4.最后一个数据发送完毕,再次进入中断,清除发送数据寄存器空标志,清除发送完毕中断标志,清除这两个中断标志

 的使能位,设置RS485的方向为接收.

  1.   
  2.   
  3. #define RX_485  GPIO_SetBits(GPIOA,GPIO_Pin_1);  
  4.   
  5. #define TX_485  GPIO_ResetBits(GPIOA,GPIO_Pin_1);  
  6.   
  7.   
  8.   
  9.    
  10.   
  11. void UART2_TX485_Puts(char str)  
  12.   
  13.     
  14.   
  15.      
  16.   
  17.     while(*str)  
  18.   
  19.        
  20.   
  21.        TX_485;     //打开485发送DE端口,关闭接收/RE端口  
  22.   
  23.        DelayNmS(1);  
  24.   
  25.         USART_SendData(USART2, *str++);  
  26.   
  27.           
  28.   
  29.         while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);  //检测发送数据寄存器空标志位  
  30.   
  31.        DelayNmS(1);  
  32.   
  33.         RX_485;     //关闭发送DE端口,打开接收/RE485端口,  
  34.   
  35.      
  36.   
  37. }<span style="font-family:Times New Roman;font-size:14px;"> span>  

在485芯片的通信中,尤其要注意对485控制端DE的软件编程。为了可靠工作,在485总线状态切换时需要做适当延时,再进行数据收发。具体的做法是在数据发送状态下,   先将控制端置“1”,延时1ms左右的时间,在发送有效的数据,一包数据发送结束后再延时1ms后,将控制端置“0”,这样处理会使总线在状态切换时,有一个稳定的工作过程。

关键字:RS485  通讯协议 引用地址:RS485通讯协议

上一篇:RJ45接口保护方案
下一篇:关于RS485和MODBUS的区别/RS485和其它总线网络的区别

推荐阅读最新更新时间:2024-05-03 00:06

浅谈RS232和RS485
很多搞工控的都搞不清楚RS485跟RS232通讯这两个通讯协议区别, 现在我为大家介绍下: ps 大神们不要乱喷啊 这是给新手看的 图1 232波形示意图 图1中纵轴是电压值,横轴是时间值。蓝色是232通讯波形。我们此时显示的波形的数据是2#1000 0000 一般而言,232接口的高电平“1”是用-5~-15V的电压表示,低电平“0”是用+5~+15V的电压表示,结合图1,高电平“1”的电压为-10V左右,低电平“0”的电压为+10V左右。 那485的波形有什么特点呢?” 我们一起看一下图2吧。图中纵轴是电压值,横轴是时间值。红色是485通讯波形。我们此时显示的波形的数据是2#1000 0000 ,和232接口的数据是一样
[嵌入式]
RS485通信和Modbus协议
在工业控制、电力通讯、智能仪表等领域,通常情况下是采用串口通信的方式进行数据交换。最初采用的方式是RS232接口,由于工业现场比较复杂,各种电气设备会在环境中产生比较多的电磁干扰,会导致信号传输错误。除此之外,RS232接口只能实现点对点通信,不具备联网功能,最大传输距离也只能达到几十米,不能满足远距离通信要求。而RS485则解决了这些问题,数据信号采用差分传输方式,可以有效的解决共模干扰问题,最大距离可以到1200米,并且允许多个收发设备接到同一条总线上。随着工业应用通信越来越多,1979年施耐德电气制定了一个用于工业现场的总线协议Modbus协议,现在工业中使用RS485通信场合很多都采用Modbus协议,本文讲解RS485通
[网络通信]
提高RS485总线通信速度的一种设计
引言   工业现场经常要采集多点数据,模拟信号或开关信号,一般用到RS485总线,使用一主带多从的通信方式,该种方式接线方便只需要两根屏蔽电缆线,通信距离远最大可支持1500m,加中继器还可延长通信距离,采用差分信号方式抗电磁干扰好。但该方式通信速度不能太快,一般采用主从召唤的方式采集各子单元的数据,即主单元依次召唤各子单元(见图1),召唤到哪个单元哪个单元上传数据,总线的使用权完全由主单元分配,各子单元不能擅自占领总线。如果系统的单元多,主单元循环采集一周的时间就很长,子单元信息变化时不能及时发送给主单元,导致系统对突变事件的反应处理速度慢。本文通过总线状态检测、从机主动上发的方式解决。 图1  常规RS485总线主从方式接
[嵌入式]
基于PLC的变频器液位控制设计
    随着电力电子技术以及工业自动控制技术的发展,使得交流变频调速系统在工业电机拖动领域得到了广泛应用。另外,由于PLC的功能强大、容易使用、高可靠性,常常被用来作为现场数据的采集和设备的控制。本设计就是利用变频器和PLC实现水池水位的控制。    变频器技术是一门综合性的技术,它建立在控制技术、电子电力技术、微电子技术和计算机技术的基础上。它与传统的交流拖动系统相比,利用变频器对交流电动机进行调速控制,有许多优点,如节电、容易实现对现有电动机的调速控制、可以实现大范围内的高效连续调速控制、实现速度的精确控制。容易实现电动机的正反转切换,可以进行高额度的起停运转,可以进行电气制动,可以对电动机进行高速驱动。完善的保护功能:变频器保
[嵌入式]
示波器调试RS485通信波形图
由于笔者在调试STM32移植的MODBUS协议的时候遇到了一些问题,需要借助示波器来看波形,而关于485通信波形相关的资料网上不多,所以把自己调试过程中的波形记录下来。 硬件:STM32单片机,1个主机和10个从机,移植MODBUS协议,采用轮询机制,主机挨个询问从机,从机采集一些信息回复给主机。 原理图:使用带隔离的芯片ADM2483,PA1,PA2,PA3指的是单片机的引脚,分别是使能,TXD和RXD。 代码:基本上是http://www.openedv.com/forum.php?mod=viewthread&tid=98367&highlight=modbus 根据自己的业务稍微做了简化和修改。 以下是主机询问
[单片机]
示波器调试<font color='red'>RS485</font>通信波形图
基于RS485的远程控制系统设计
0 引 言 某型防空指挥系统是一个以微型计算机为核心的模块化和节点化设计的网络系统。全系统由6种基本工作站组成,组成了比较完整的防空作战情报指挥系统,主要用于空中目标情报的快速采集、处理和传递,实现实时有效的射击指挥及办公自动化。由于各工作站所要完成的工作都较复杂,安装、搭载的软件和设备也都很多,因此工作站的计算机上普遍装有多个硬盘,并按照功能的分类装有不同的系统,在使用时,根据需要对系统进行选择和系统间的切换。随着现代科技的发展和军事变革的不断推进,在应用时对系统选控的实时性、可靠性和操控性都提出了更高的要求,传统的控制手段已不能满足新的需要。基于此该文设计了一种由固态继电器和单片机构成的控制单元。该控制单元能够利用固态继电器
[工业控制]
基于<font color='red'>RS485</font>的远程控制系统设计
尚晟新能源顺利通过开普国家实验室最新通讯协议
  3月1日,广东尚晟新能源科技有限公司顺利通过了许昌开普国家实验室的最新通讯协议。这意味着尚晟的储能系统在技术、质量、安全等各方面皆已达到国际主流技术标准,充分展示了尚晟的研发实力及核心技术,同时标志着尚晟充电桩进入了一个里程碑式的进展。   新能源的时代已经到来,尚晟新能源以持续创新的核心技术构建国内最先进的储能系统,时刻响应市场需求,为推动新能源中国储能产业的蓬勃发展奉献自己的力量,为世界提供更高效、更清洁的能源。
[新能源]
红外通讯协议在嵌入式系统中的实现
摘要:从红外通讯协议的特点、基本原理对红外无线通信技术进行了分析,结合实际例程探讨了红外数据通信在嵌入式系统中的基本设计要点。 关键词:红外通讯协议 嵌入式系统 异步通信收发器 状态机 红外和蓝牙协议是两种较流行的短距离无线通信协议。但目前蓝牙协议各大厂商尚未有一个统一的标准规范,加之硬件价格较为昂贵的缺点,因此市场上红外通信在手机、笔记本电脑等小型移动设备中仍然应用广泛,在嵌入式系统中的实际应用有着较高实际意义。 1 红外协议背景 红外线是波长在750nm至1mm之间的电磁波,其频率高于微波而低于可见光,是一种人的眼眼看不到的光线。目前无线电波和微波已被广泛应用在长距离的无线通信中,但由于红外线的波长较短,对障碍物的衍
[工业控制]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved