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

devtools/2024/9/20 7:27:46/ 标签: stm32, proteus, 嵌入式硬件

实现目标

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/devtools/10503.html

相关文章

Stable Diffusion是什么

稳定扩散(Stable Diffusion)是一种数学模型和随机过程,用于描述不同粒子之间的随机运动和扩散过程。它是从随机漫步(Random Walk)发展而来,并具有一些特定的性质。 在稳定扩散中,粒子的运动是随…

xhs图片获取并且转换成PDF,实现了我考研期间一直想实现的想法

对于一些xhs图文,很多人其实想把它的图片保存到本地,尤其是下图所示的考研英语从文章中背单词,不说别人,我就是这样的。 我在考研期间就想实现把图片批量爬取下来,转成PDF,方便一篇一片阅读进行观看&#…

怎么清理电脑c盘?释放你的存储空间!

随着我们在电脑上的使用,C盘往往会积累大量的临时文件、缓存文件和无用的程序文件,导致C盘空间不足,影响系统性能和运行速度。因此,定期清理电脑C盘是维护电脑健康的重要步骤之一。本文将介绍怎么清理电脑c盘的三种方法&#xff0…

超越GPT-4V,苹果多模态大模型上新,神经形态计算加速MLLM(二)

上文介绍基于MINOnets神经网络架构加速多模态大模型的策略,本文将以Spinnaker2多核神经网络芯片EGRU架构为起点,覆盖存内计算架构,介绍新型计算架构在加速大模型推理的作用。SpiNNaker 2是一个设计用于大规模异步处理的多核神经形态芯片&…

【Flutter】自动生成图片资源索引插件一:FlutterAssetRefGenerator

介绍 FlutterAssetRefGenerator 插件:windows上 点击生成图片索引按钮后,pubspec.yaml 会出现中文乱码,需要手动改乱码;mac上没问题。 优点:点击图标自动生成。 目录 介绍一、安装二、使用 一、安装 安装FlutterAsset…

vscode 解决无法创建临时文件。

报错: Fatal error: cant create C:\Users???y\AppData\Local\Temp\ccqkCS9j.o: No such file or directory 右击此 电脑 -> 属性 打开 系统信息 -> 高级系统设置 系统属性 -> 高级 -> 环境变量 将temp 和 tmp 改为其它英文路径 只更改用户变量…

无人驾驶 自动驾驶汽车 环境感知 精准定位 决策与规划 控制与执行 高精地图与车联网V2X 深度神经网络学习 深度强化学习 Apollo

无人驾驶 百度apollo课程 1-5 百度apollo课程 6-8 七月在线 无人驾驶系列知识入门到提高 当今,自动驾驶技术已经成为整个汽车产业的最新发展方向。应用自动驾驶技术可以全面提升汽车驾驶的安全性、舒适性,满足更高层次的市场需求等。自动驾驶技术得益于人工智能技术的应用…

每日两题 / 438. 找到字符串中所有字母异位词 238. 除自身以外数组的乘积(LeetCode热题100)

438. 找到字符串中所有字母异位词 - 力扣&#xff08;LeetCode&#xff09; 记录p串每个字符出现次数 维护与p串等长的滑动窗口&#xff0c;记录其中每个字符的出现次数 每次滑动后将当前次数与p串的次数比较即可 class Solution { public:vector<int> findAnagrams(s…

php中常见的正则使用方法

在PHP中,正则表达式(Regular Expression)是一种强大的文本处理工具,用于匹配、查找和替换字符串中的模式。下面是一些常见的PHP正则表达式匹配示例: 匹配数字:$pattern = /\d+/; $str = There are 123 apples and 456 oranges.; preg_match($pattern, $str, $matches);

Delphi开发APP时的手势处理(缩放、旋转、平移、长按等)

在使用手机时&#xff0c;少不了使用手势了&#xff0c;像滑动&#xff0c;缩放&#xff0c;长按等&#xff0c; 那么如何在Delphi开发的APP中使用手势呢&#xff1f; Delphi自带有示例&#xff0c;在下面这个目录中&#xff0c; 可以看到ImageRotation图片旋转&#xff0c;I…

公钥和公有地址有什么区别?

目录 前言&#xff08;为了回答这个问题&#xff0c;有几件事需要理解。&#xff09; 1、首先是哈希是什么。 2、接下来要了解的是公钥和私钥 3、其他 公钥和公有地址有什么区别&#xff1f; 总结 前言&#xff08;为了回答这个问题&#xff0c;有几件事需要理解。&#…

Proxmox VE (PVE) 教学 (1) | 介绍与安装

在?好久没更新了,最近在研究 pve,这不刚研究透彻,所以就先记录一下吧。最近我会集中推出关于 Proxmox VE 的系列文章,该部分将会在heStudio博客同步更新,欢迎订阅,当然你也可以订阅本专栏。 介绍 | Proxmox VE:强大而灵活的开源虚拟化平台 Proxmox Virtual Environme…

设计模式之创建型模式详解

设计模式 创建型模式 创建型模式(Creational Pattern)对类的实例化过程进行了抽象&#xff0c;能够将软件模块中对象的创建和对象的使用分离。为了使软件的结构更加清晰&#xff0c;外界对于这些对象只需要知道它们共同的接口&#xff0c;而不清楚其具体的实现细节&#xff0…

森林保镖:了解森林防火杆!/恒峰智慧科技

在茂密的森林中&#xff0c;火势一旦失控&#xff0c;后果将不堪设想。为了保护森林资源和生态环境&#xff0c;森林防火工作显得尤为重要。而森林防火杆作为一种新型的森林防火设备&#xff0c;正逐渐成为森林防火的重要保障。本文将为您详细介绍森林防火杆的功能和特点。 一、…

SQL Server详细使用教程及常见问题解决

一&#xff1a;使用教程 SQL Server是**一个功能强大的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;由Microsoft开发**。 以下是使用SQL Server的详细教程&#xff0c;包括安装、基本概念和操作&#xff1a; 1. **安装SQL Server**&#xff1a; - 访问微软官…

gitee / github 配置git, 实现免密码登录

文章目录 怎么配置公钥和私钥验证配置成功问题 怎么配置公钥和私钥 以下内容参考自 github ssh 配置&#xff0c;gitee的配置也是一样的&#xff1b; 粘贴以下文本&#xff0c;将示例中使用的电子邮件替换为 GitHub 电子邮件地址。 ssh-keygen -t ed25519 -C "your_emai…

分布式与微服务的区别

首先分布式是一种系统部署模式&#xff0c;将一个系统分成多个不分进行运行。而微服务架构是一种更加精细化的设计方法&#xff0c;它是分布式的一个分支&#xff0c;主要强调将一个单体应用拆分成一组小型松耦合的服务&#xff0c;每个服务专注于单一业务功能并能够独立部署和…

在Nuxt.js中添加PostCSS自动前缀器

在其他浏览器中&#xff0c;有些 CSS 属性需要带有前缀。如-webkit- | -o- | -ms- 等等 Autoprefixer 是一个 PostCSS 插件&#xff0c;可以将你的CSS代码渲染到浏览器中自动补充厂商前缀&#xff0c;因此你不用担心自己编写的CSS代码有浏览器兼容性问题。 如&#xff1a; .fl…

python输入输出特殊处理

输出 需要满足输出一行后&#xff0c;再输出一行&#xff0c;行中每个元素用空格隔开 length len(tri) tmp [] for i in range(len(tri)):tmp tri[i]for j in range(len(tri[i])):print(tmp[j],end )print()输入p 一次性输入6个数字到列表中&#xff0c;并且输入的每个数…

MATLAB初学者入门(10)—— 粒子群算法

粒子群优化&#xff08;Particle Swarm Optimization, PSO&#xff09;是一种基于群体协作的优化技术&#xff0c;它由社会行为模型&#xff08;如鸟群觅食行为&#xff09;启发而来。PSO 通过模拟一群粒子&#xff08;候选解&#xff09;在解空间中的移动来寻找最优解。每个粒…