RS485协议

发布者:Zhenxiang最新更新时间: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.  [page]

第二步:发送数据

这里需要注意的是:

 

方法一: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协议

上一篇:RS485与4~20mA的区别
下一篇:西门子S7-200PLC的RS485通信口易损坏的原因分析和解决办法

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

应用最新的CAN总线增强功能,实现安全可靠的高速汽车通信
多年来,设计人员一直依靠控制器局域网 ( CAN ) 在汽车的各个子系统和 电子 控制单元 (ECU) 之间进行可靠的 通信 。然而,随着板载 网络 节点数量的增加,所需的数据吞吐量以及对更低延迟和更高级安全性的需求也在增加,所有这些都在严格的尺寸、重量和成本限制内完成。尽管如此,许多设计人员还是不愿意改变网络拓扑结构,而且由于CAN规范和相关IC解决方案的稳步改进,他们不必这样做。 迁移到另一种网络拓扑很困难,因为会损失先前的投资,并且随着设计人员的学习曲线向上移动,可能会出现设计延迟。但是,通过再次查看CAN规范增强功能可以避免这种情况,例如用于更高吞吐量的CAN灵活数据速率(FD),使用部分网络等技术来处理泄漏和干扰,使
[汽车电子]
应用最新的CAN<font color='red'>总线</font>增强功能,实现安全可靠的高速汽车<font color='red'>通信</font>
基于Profibus-DP现场总线通信接口设计
O 引言 Profibus是开放的、与制造商无关、无知识产权保护的标准。因此世界上任何人都可以获得该标准并设计各自的软硬件解决方案。Pro-fibus-DP通信接口的开发有两种方案选择:单片机+软件;单片机+Profibus通信芯片ASIC。 方案2中Profibus-DP协议完全由Profibus通信ASIC来实现,单片机主要处理用户程序。因此方案2开发周期相对少很多,本文将采用单片机+Profibus通信ASIC来实现Profibus通信接口的设计。 1 Profibus-DP基本特性 Profibus包括三个兼容系列:Profibus-FMS,Profibus-DP,Profibus-PA。FMS提供大量的通信服务用
[单片机]
基于Profibus-DP现场<font color='red'>总线</font><font color='red'>通信</font>接口设计
IIC总线通信协议
  IIC总线通信只需要两根线,一根数据线SDA,一根时钟线SCL。 IIC总线进行数据传输时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线为低电平期间,数据线上的高电平或低电平才允许变化。 发送启动信号:在SCL为高电平期间,SDA出现下降沿则为启动信号。其中SDA高电平时间应大于4.7us,变为低电平后SCL高电平时间应持续大于4us。 起始信号(模拟) void start() //起始信号 { sda=1; delay(); scl=1; delay(); sda=0; delay(); }   应答信号:每传送一个字节数据,都要有接收设备产
[嵌入式]
基于Ethernet现场总线的多协议网络通信系统设计与实现
引言     现场总线已成为自动化技术的集成组件,如今已获得广泛应用。它废弃了DCS(分散控制系统)的控制站及其输入/输出单元,从根本上改变了DCS集中与分散相结合的集散控制系统体系,通过将控制功能高度分散到现场设备这一途径,实现了彻底分散控制。虽然控制器CPU的性能发展迅猛,但传统的现场总线系统正日趋成为控制系统性能发展的“瓶颈”。此外对于现场总线系统来说,整个系统的分层控制结构由几层子系统构成,整个系统响应时间是控制器周期时间的3~5倍。工业以太网作为一种全新的“现场总线”是未来工业控制网络的必然选择,并实现了现场设备层与企业内部信息网(Intranet)的无缝连接。但如何使以太网总线实现传统现场总线的实时性、确定性及可靠
[嵌入式]
I2C总线通信接口的CPLD实现
    摘要: 介绍采用ALTERA公司的可编程器件,实现I2C总线的通信接口的基本原理;给出部分VHDL语言描述。该通信接口号专用的接口芯片相比,具有使用灵活,系统配置方便的特点。     关键词: I2C总线 CPLD VHDL I2C总线是PHILIPS公司开发的一种简单、双向二线制同步串行总线。它只需要两根线(串行时钟线和串行数据线)即可在连接于总线上的器件之间传送信息。该总线是具备多主机系统所需要的包括裁决和高低速设备同步等功能的高性能串行总线,应用极为广泛。 目前,虽然市场上有专用I2C总线接口芯片,但是地址可选范围小,性能指标固定,功能单一,而且使用不方便。针对I2C总线的电气特性及其通信协
[工业控制]
基于C8051F040单片机的CAN总线通信
硬件部分   硬件部分电路结构如下:   CAN收发模块原本采用的是ATA6660高速CAN收发芯片,电路连接如下:      设计电路为:当单片机发送数据时,D18闪烁,并将数据传送给ATA6660芯片;当ATA6660芯片接受到总线上的数据时,D17闪烁,并将数据传送给单片机。   实际调试时,发现C8051F040单片机既没办法发送数据到总线上,也没办法从总线上接收到数据。   用示波器对电路检测发现,当单片机需要发送数据时,ATA6660芯片的TXD引脚上能检测到数据,且D18闪烁。示波器检测总线上的电压,没有变化。PC端显示总线上的数据为FE。当PC端给总线发送数据时,总线上能检测到电压的变化,而ATA6660芯片的R
[单片机]
CAN总线通信错误与处理措施
在CAN总线中存在5种错误类型: 位错误:向总线送出一位的某个节点同时也在监视总线,当监视到总线位的电平与送出的电平不同时9则在该位时刻检测到一个位错误。但是在仲裁区的填充位流期间或应答间隙送出隐性位而检测到显性位时,不认为是错误位。送出认可错误标注的发送器,在检测到显性位时也不认为是错误位。 填充错误:在使用位填充方法进行编码的报文中,出现了第6个连续相同的位电平时,将检 测出一个填充错误。 CRC错误:CRC序列是由发送器CRC计算的结果组成的。接收器以与发送器相同的方法计算CRC。如果计算的结果与接收到的CRC序列不同,则检测出一个CRC错误。 形式错误: 当固定形式的位区中出现一个或多个非法位时,则检测到一
[嵌入式]
基于CAN总线智能建筑监控系统的通信协议设计
  现代智能建筑监控系统广泛采用了现场总线技术。现场总线的种类目前有40多种,但适合智能建筑且在我国推广的主要有两种:CAN(Control Area Network)总线和Lonworks总线。CAN总线技术以其可靠性高,结构简单,传输距离长和成本低而具有巨大的应用潜力。   控制局域网CAN是现场总线技术中最成熟、最有发展前途的微处理器局域网络。协议采用总线型拓扑结构,通过研究CAN2.0B协议规范,制定了符合智能建筑监控系统的通信协议,并进行了通信节点软件的设计。   1 基于CAN总线的智能建筑网络拓扑结构   CAN总线的智能建筑监控系统拓扑结构,如图1所示。该系统由3部分组成:上位机、CAN通信节点和各个现场智能
[工业控制]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

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

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