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

实现目标

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定义两个变量

cpp 复制代码
/* USER CODE BEGIN PV */

 int  RxByte,TxByte;

/* USER CODE END PV */

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

cpp 复制代码
 //发送数据
 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定义两个变量

cpp 复制代码
/* USER CODE BEGIN PV */
 int  RxByte,TxByte;

/* USER CODE END PV */

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

cpp 复制代码
  /* 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 串口接收中断回调函数,实现数据接收和转发功能。

cpp 复制代码
/* 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给主机。


总结

相关推荐
小狗爱吃黄桃罐头14 分钟前
江协科技STM32学习- P14 示例程序(定时器定时中断和定时器外部时钟)
stm32·江科大stm32
@@庆1 小时前
stm32 PWR电源控制(修改主频&睡眠模式&停机模式&待机模式)
stm32·单片机·嵌入式硬件
JT灬新一1 小时前
STM32巡回研讨会总结(2024)
stm32·单片机·嵌入式硬件
爱桥代码的程序媛2 小时前
鸿蒙OpenHarmony【轻量系统芯片移植案例】标准系统方案之瑞芯微RK3568移植案例
嵌入式硬件·harmonyos·鸿蒙·鸿蒙系统·移植·openharmony·鸿蒙开发
Whappy0012 小时前
51单片机-DA(数字转模拟)
单片机·嵌入式硬件·51单片机
鸽子汤1972 小时前
想高效开发?从文件系统开始着手。。。
嵌入式硬件·物联网·硬件工程
Whappy0012 小时前
51单片机-AD(模拟信号转数字信号)-实验()
单片机·嵌入式硬件·51单片机
redcocal12 小时前
地平线秋招
python·嵌入式硬件·算法·fpga开发·求职招聘
辰哥单片机设计15 小时前
门磁模块详解(防盗感应开关 STM32)
stm32·单片机·嵌入式硬件·传感器