STM32 您所在的位置:网站首页 TTL转485原理图多串口 STM32

STM32

2024-07-13 15:53| 来源: 网络整理| 查看: 265

原文:https://www.cnblogs.com/WhiteTears/p/8810801.html

阅读目录

1、RS485简介 2、RS485特性3、RS485通信硬件实现4、RS485通信软件实现

OS:Windows 64

Development kit:MDK5.14

IDE:UV4

MCU:STM32F103C8T6/VET6

AD:Altium Designer 18.0.12

回到顶部

1、RS485简介 

  RS-485又名TIA-485-A, ANSI/TIA/EIA-485或TIA/EIA-485。

  RS485是一个定义平衡数字多点系统中的驱动器和接收器的电气特性的标准,该标准由电信行业协会和电子工业联盟定义。使用该标准的数字通信网络能在远距离条件下以及电子噪声大的环境下有效传输信号。RS-485使得廉价本地网络以及多支路通信链路的配置成为可能。RS485接口组成的半双工网络,一般是两线制(以前有四线制接法,只能实现点对点的通信方式,现很少采用),多采用屏蔽双绞线传输。这种接线方式为总线式拓扑结构在同一总线上最多可以挂接32个结点。在RS485通信网络中一般采用的是主从通信方式,即一个主机带多个从机。很多情况下,连接RS-485通信链路时只是简单地用一对双绞线将各个接口的“A”、“B”端连接起来。RS485接口连接器采用DB-9的9芯插头座,与智能终端RS485接口采用DB-9(孔),与键盘连接的键盘接口RS485采用DB-9(针)。

  在低速、短距离、无干扰的场合可以采用普通的双绞线,反之,在高速、长线传输时,则必须采用阻抗匹配(一般为120Ω)的RS485专用电缆(STP-120Ω(用于RS485 & CAN)一对18AWG),而在干扰恶劣的环境下还应采用铠装型双绞屏蔽电缆(ASTP-120Ω(用于RS485 & CAN)一对18AWG)。

回到顶部

2、RS485特性 RS-485的电气特性:逻辑“0”以两线间的电压差为+(2—6)V表示;逻辑“1”以两线间的电压差为-(2—6)V表示。接口信号电平比RS-232降低了,就不易损坏接口电路的芯片,且该电平与TTL电平兼容,可方便与TTL电路连接RS-485的数据最高传输速率为10MbpsRS-485接口是采用平衡驱动器和差分接收器的组合,抗共模干扰能力增强,即抗噪声干扰性好RS-485接口的最大传输距离标准值为4000英尺(约1219米),实际上可达3000英尺,另外RS-232接口在总线上只允许连接1个收发器,即单站能力。而RS-485接口在总线上是允许连接多达128个收发器。即具有多站能力,这样用户可以利用单一的RS-485接口方便地建立起设备网络。

回到顶部

3、RS485通信硬件实现

  博主使用的485芯片为MAX3485,实现半双工通信。应用电路如下图:

 

 

  R6为120欧的阻抗匹配电阻,如果长距离通信的话,一定要在最后一个节点接上这一个电阻;但是短距离通信的话焊上R6反而出错(博主在实验中发现,焊上匹配电阻后,主从节点通信异常,调试发现大量的00字节在自动收发),因此建议大家先不要焊上,但是在电路设计时保留。RXD485、TXD485分别接控制芯片的USART1_RX、USART1_TX(串口号可自行选择,这里使用串口1),此外;485C接芯片的PA4引脚(随意选择)用以切换485的通信状态。J1、J2为两个JST接口,方便485通信线路的连接,由于是从节点因而留出两个。以下为其余连接电路:

 

MAX3485通信指示        

回到顶部

4、RS485通信软件实现

复制代码

1 #include "sys.h" 2 #include "stdio.h" 3 4 #define USART1_RX_LEN 50 //接收最大字节 5 #define USART1_TX_LEN 50 //发送最大字节 6 #define RS485_TX_EN PAout(4) 7 8 9 extern u8 USART1_RX_Buf[USART1_RX_LEN]; //接收缓冲 10 extern u8 USART1_TX_Buf[USART1_TX_LEN]; //发送缓冲 11 extern u8 USART1_RX_Data_Len; //实际接收数据字节长度 12 extern u8 USART1_TX_Data_Len; //待发送数据字节长度 13 extern u8 USART1_RX_Flag; //是否收到数据 14 15 void RS485_Config(u32 bound); 16 void USART1_IRQHandler(void); 17 void RS485_Send_Data(u8 *buf,u8 len);

复制代码

复制代码

1 #include "sys.h" 2 #include "delay.h" 3 #include "rs485.h" 4 5 u8 USART1_RX_Buf[USART1_RX_LEN]; //接收缓冲 6 u8 USART1_TX_Buf[USART1_TX_LEN]; //发送缓冲 7 u8 USART1_RX_Data_Len = 0; //实际接收数据字节长度 8 u8 USART1_TX_Data_Len = 0; //待发送数据字节长度 9 u8 USART1_RX_Flag = 0; //串口1是否接收完数据 10 11 void USART1_IRQHandler(void) 12 { 13 u8 res; 14 if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收到数据 15 { 16 res =USART_ReceiveData(USART1); //读取接收到的数据 17 if(USART1_RX_Data_Len


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有