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

server/2025/1/15 18:09:51/

实现目标

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/server/10253.html

相关文章

【JavaSE】搞定String类

前言 本篇会细致讲解String类的常见用法,让小伙伴们搞定String类~ 欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 前言 常用的三种字符串构造 字符串长度length 字符串比较 比较 比较字符串的内容equals…

Rust腐蚀服务器清档多教程

Rust腐蚀服务器清档多教程 大家好我是艾西,一个做服务器租用的网络架构师。上期教了大家怎么搭建服务器以及安装插件等那么随着大家自己架设服或是玩耍的时间肯定会有小伙伴想要去新增开区数量或是把原本的服务器进行一些调整等,那么今天主要聊的就是怎…

React 19 带来了 JSX 运行时的重要更新

在 React 的发展历程中,JSX 运行时一直扮演着重要的角色。在以前的的版本,JSX 运行时会克隆传入的 props 对象,这背后有着两大原因。 历史原因 React 保留了一些特殊的 prop 名称,如 key 和在 React 19 之前的 ref。这些 prop 并…

丁晴无硫指套:高科技产品保护的利器

Nitrile Sulphur-Free Finger Cots: A Weapon for Protecting High-Tech Products 随着科技的不断发展,微型电机、精密电子器件、仪器仪表等高科技产品的制造与应用日益普及。然而,这些产品的制造过程中往往需要特殊的保护措施,以防止静电、…

MATLAB使用速成 第八章(定积分的计算与微分方程求解)

一、计算定积分的相关函数 1、trapz(梯形法) (1)梯形法求解定积分的步骤: ①曲边小梯形的面积可以由直边小梯形的面积来近似,那么整个曲边梯形的面积S为 ②将区间[a,b]进行n等分,即令 ③整个…

Topaz Photo AI 3.0.0 (macOS Universal) - AI 图片修复工具

Topaz Photo AI 3.0.0 (macOS Universal) - AI 图片修复工具 Maximize Image Quality with AI 请访问原文链接:Topaz Photo AI 3.0.0 (macOS Universal) - AI 图片修复工具,查看最新版。原创作品,转载请保留出处。 作者主页:sy…

Spring Cloud面试篇

面试篇-nacos面试题 1. springboot常见组件 注册中心组件:Eureka、Nacos 负载均衡组件:Ribbon 远程调用组件:OpenFeign 网关组件:Zuul、Gateway 服务保护组件:Hystrix、Sentinel 服务配置管理组件:SpringCl…

多元函数泰勒公式(含黑塞矩阵)

一元函数的泰勒公式: 接下来,由一元函数有关知识,我们有: 注意这里的dxn中,应把dx看作一个整体,即一个微小变量的n次方 我们接下来推导微分算子: 接下来,把一元泰勒公式转为微分形式: 对于二元…