【STM32+HAL+Proteus】系列学习教程---RS485总线(收发仿真实现)

news/2025/1/15 18:18:48/

实现目标

1、掌握UART/USART/RS485等几个常见概念的区别

2、掌握RS485的逻辑电平、硬件接线等基础知识

3、具体实现目标:1、利用两个单片机组成RS485通信网络;2、两个单片机之间能实现正常收发数据。


一、串口、RS485等之间的关系

串口:是一个广义术语,通常指的是采用串行通信协议的接口,它可以包括多种具体的物理接口标准和逻辑电平标准。

UART(通用异步收发传输器):是一种集成电路,负责处理串行通信协议中的时序生成、数据编码解码等功能,是嵌入式系统中常见的用于实现串行通信的硬件模块。UART本身并不规定具体的电气特性,而是产生遵循串行通信时序的信号(如启动位、数据位、校验位和停止位)。

TTL(晶体管-晶体管逻辑)电平:是一种逻辑电平标准,通常在集成电路内部或者集成电路之间近距离通信时使用,它的高低电平相对较低,通常为3.3V或5V表示逻辑1,0V表示逻辑0。

RS232是一种早期广泛应用于计算机和终端设备之间的串行通信接口标准,它规定了详细的电气特性,如逻辑1(负电压,通常为-3V-15V)和逻辑0(正电压,通常为+3V+15V)。尽管逻辑电平与TTL电平不同,但可以通过电平转换器将UART产生的TTL电平转换为RS232电平进行远距离传输。

RS422是一种全双工、差分传输的串行通信标准,它具有较高的抗干扰能力和较长的传输距离,支持多点传输,每个信号都有明确的方向(发送和接收分离),常用于工业控制领域。

RS485:也是一种差分传输的串行通信标准,与RS422类似,但增加了多点通信的能力,支持多个设备通过同一条线路进行通信,但同一时间内只能有一个设备发送数据。

             

        综上所述,UART是生成串行通信时序的硬件模块,而TTL、RS232、RS422和RS485则分别代表了不同的电气接口标准和逻辑电平标准。在实际应用中,UART产生的TTL电平信号通常需要通过电平转换器转化为RS232、RS422或RS485标准的信号,以便在不同的物理环境中进行可靠的串行通信。   

二、RS485概述

RS485 是美国电子工业协会(Electronic Industries Association,EIA)于1983年发布的串行通信接口标准,经通讯工业协会(TIA)修订后命名为 TIA/EIA-485-A。RS485 是一种工业控制环境中常用的通讯协议,其中RS 是 Recommended Standard 的缩写。RS485 是 半双工异步 串行通信。

1、特点

  1. 支持多节点:一般最大支持 32 个节点。
  2. 传输距离远:最远通讯距离可达1200米。
  3. 抗干扰能力强:差分信号传输。
  4. 连接简单:只需要两根信号线(A+和B-)就可以进行正常的通信。

2、差分信号传输

RS485 通信采用差分信号传输,通常情况下只需要两根信号线就可以进行正常的通信。
在差分信号中,逻辑0和逻辑1是用两根信号线(A+和B-)的电压差来表示。

逻辑 1:两根信号线(A+和B-)的电压差在 +2V~+6V 之间。
逻辑 0:两根信号线(A+和B-)的电压差在 -2V~-6V 之间。

3、RS485连接方式

  • CPU:中央处理器,负责控制整个系统的运行和数据处理。
  • UART控制器:集成在CPU内部或外部的通用异步收发传输器,用于生成和解析串行通信数据流。
  • TXD/RXD连接:
  • TXD(Transmit Data):UART控制器的发送数据线,通常连接到485收发器的接收端(如DE/RE引脚禁能时的接收端或RO引脚)。
  • RXD(Receive Data):UART控制器的接收数据线,通常连接到485收发器的发送端(如DI引脚)。
  • 485收发器:如SP3485、TP8485E、MAX485等,这类芯片用于实现TTL电平与RS485差分信号电平之间的转换,并具备收发控制功能。
  • DE(Driver Enable)/RE(Receiver Enable):控制485收发器工作在发送或接收模式,防止在同一时刻既发送又接收导致冲突。
  • DI(Data Input):接收来自UART的TTL电平信号,并转换为RS485差分信号。
  • RO(Receiver Output):将接收到的RS485差分信号转换为TTL电平,发送给UART。
  • 485_A/485_B:这是RS485总线的差分信号线,485_A和485_B两根线通过双绞线连接到所有的RS485设备,确保信号质量良好。
  • 匹配电阻:在485_A和485_B的两端(或靠近设备端)通常会并联一个120欧姆左右的终端电阻,目的是吸收信号反射,确保RS485总线的稳定性,抑制噪声,增强信号质量

4、RS485总线芯片

        SP3485 芯片是一款非常经典的+3.3V低功耗半双工RS485收发器,数据传输速率高达10Mbps。单片机串口通信一般是TTL电平,如果需要RS485 通信,就需要RS485芯片在中间转换一下。因为RS485通信是半双工通信,就是发送数据的时候不能同时接收数据,所以我们选择SP3485做RS485收发器。

SP3485芯片典型原理图

SP3485 芯片的引脚说明

二、原理图设计

说明:开发板上没有485芯片,本章内容用proteus软件仿真实现。

三、STM32CubeMX 配置

1.USART 配置

配置1:USART1, 异步通信模式,波特率9600 ,484芯片控制端DIR为输出模式。

配置2:开启USART中断

四、程序设计

1、主机程序

1.1定义两个变量

/* USER CODE BEGIN PV */int  RxByte,TxByte;/* USER CODE END PV */

1.2 在while(1)里添加下面程序,实现数据发送

 //发送数据HAL_GPIO_WritePin(DIR_GPIO_Port, DIR_Pin, GPIO_PIN_SET);TxByte = 0x55;HAL_UART_Transmit(&huart1, (uint8_t *)&TxByte, 1, 0xFF);HAL_Delay(500);

2、从机程序

2.1定义两个变量

/* USER CODE BEGIN PV */int  RxByte,TxByte;/* USER CODE END PV */

2.2 开启接收中断,设置从机485芯片为接收模式

  /* USER CODE BEGIN 2 */HAL_UART_Receive_IT(&huart1, (uint8_t *)&RxByte, 1);	HAL_GPIO_WritePin(DIR_GPIO_Port, DIR_Pin, GPIO_PIN_RESET);//将485芯片设置为接收模式HAL_Delay(200);/* USER CODE END 2 */

2.3 串口接收中断回调函数,实现数据接收和转发功能。

/* USER CODE BEGIN 4 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if (0x55 == RxByte){TxByte = 0x01;HAL_GPIO_WritePin(DIR_GPIO_Port, DIR_Pin, GPIO_PIN_SET);HAL_UART_Transmit(&huart1, (uint8_t *)&TxByte, 1, 0xFF);}else{TxByte = 0x77;HAL_GPIO_WritePin(DIR_GPIO_Port, DIR_Pin, GPIO_PIN_SET);HAL_UART_Transmit(&huart1, (uint8_t *)&TxByte, 1, 0xFF);}HAL_GPIO_WritePin(DIR_GPIO_Port, DIR_Pin, GPIO_PIN_RESET); //重新使能串口接收中断HAL_UART_Receive_IT(&huart1, (uint8_t *)&RxByte, 1);
}/* USER CODE END 4 */

五、实验效果

说明:单片机开发板没有设计485芯片,用仿真实现。

六、仿真实现

功能说明:

1、主机发送0x55给从机,从机收到后,反发送0x01给主机。


总结


http://www.ppmy.cn/news/1431601.html

相关文章

【Flutter】序列化方案之命令行生成model

目录 方案一、json_model 一行命令,将json文件转为Dart model类及.g.dart。安装使用 方案二、build_runner 手动写model类,命令行生成.g.dart序列化类安装使用 参考 方案一、json_model 一行命令,将json文件转为Dart model类及.g.dart。 安装…

算法矩阵提速原理

不管是图形还是AI,如果看过相关的算法,都会注意到矩阵运算,很多讲算法的教程都会说将for转换成矩阵,可以极大的增加效率。 但是这不是为难我们这些数学低能儿吗?矩阵运算这些高级货算是高级数学了,比CURD还…

【Linux】学习记录_17_网络编程

17 网络编程 17.1 网络协议的分层模型 TCP/IP是一个庞大的协议族,它是众多网络协议的集合,包括:ARP、IP、ICMP、UDP、TCP、DNS、DHCP、HTTP、FTP、MQTT等等。这些协议按照功能,可以被划分为几个不同的层次,如图所示&…

TS-namespace(命名空间)#记录

一、命名空间 1、ts 中的 “命名空间” 就是之前的 “内部模块”,任何使用 module 关键字来声明一个内部模块的地方都应该使用 namespace 关键字来替换。 // ts 中的“内部模块” (废弃) module X { }// ts 中的“命名空间” &#xff08…

【ROMA解决方案和功能架构】

1、解决方案架构 1、基于ROMA融合集成平台,实现企业应用、数据、API 、OT设备、云服务、合作伙伴应用之间的集成连接。 2、ROMA主要包含四个组件:数据集成(Fast Data Integration,简称FDI)、服务集成(API …

谷歌广告B2C实战特训营,500+谷歌账户经验,实战演示从0-1搭建广告账户

结合数据优化搜索、购物(PMax)、再营销、展示、视频广告类型,提升ROI稳定增长 课程背景: 不同的电商产品(如大件家具、假发、服饰等)适合的广告类型、组合策略、预算配置大不相同。 为了让大家最快掌握不同产品的投放策略找到最适合自己的打法&#x…

JVM知识点总结二

参考文章:【Java面试题汇总】JVM篇(2023版)_jvm面试题2023-CSDN博客 1、说说你了解的JVM内存模型: JVM由三部分组成:类加载子系统、运行时数据区、执行引擎 JVM内存模型: 内存模型里的运行时数据区&#…

水利发电厂自动化控制系统如何保证电站稳定

水力发电是一种依赖于水位落差形成的冲击力强劲的水流来驱动水轮机旋转,进而通过发电机转化为电能的发电方式。水力发电自动化控制系统的基本原理在于利用水流的自然落差,转化为旋转的机械能,再进一步转化为电能。这种发电方式具有环保、可再…