当前位置: 首页 > web >正文

单片机-STM32部分:10-1、485

飞书文档https://x509p6c8to.feishu.cn/wiki/LNUjw1bHDiIkICkKRSRc6NccnQj

什么是RS485


RS485是美国电子工业协会(Electronic Industries Association,EIA)于1983年发布的串行通信接口标准。
 

RS485的特点:


总线标准,RS485具有支持多节点

一条RS485总线能并联多少台设备要看什么芯片,可以控制多少个设备的问题是与该485网络中的电气特性和协议特性所决定的,并和所用电缆的品质相关,节点越多、传输距离越远、电磁环境越恶劣,所选的电缆要求就越高。
支持32个节点数的芯片:SN75176,SN75276,SN75179,SN75180,MAX485,MAX488,MAX490
支持64个节点数的芯片:SN75LBC184
支持128个节点数的芯片:MAX487,MAX1487
支持256个节点数的芯片:MAX1482,MAX1483,MAX3080~MAX3089

传输距离远(最大1219m)

连接简单(在构成通信网络时,仅需要一对双绞线作传输线)

能抑制共模干扰(差分传输)

在多站、远距离通信等多种工控环境中获得了广泛应用。

多个设备进行485通讯的接线

RS-485通信链路时只是简单地用一对双绞线将各个接口的“A”、“B”端连接起来

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

STM32RS485通信

STM32是没有硬件485接口的,所以通常使用485收发器将UART的TTL电平转换成RS485的差分信号。MCU的串口控制器TxD发送数据,经485收发器转换成差分信号,传输到总线上。接收数据时,485收发器将总线上的差分信号转化成TTL信号由RxD到串口控制器。

这里的485收发器,我们使用SP3485芯片。

我们先看看普通的收发电路。

DE: 1 发送使能;0发送禁止
RE: 0 接收使能;1接收禁止

当单片机要发送数据的时候,控制CTRL为高电平,数据通过485_TXD发送出去。
当单片机要接收数据的时候,控制CTRL为低电平,数据通过485_RXD接收回来。

这里我们可以看到需要485_RXD、485_TXD、CTRL 3个IO进行控制,如果我们希望使用更少的IO控制,有没有办法呢?

那我们可以使用自动收发电路,不用单片机引脚CTRL,当数据进来的时候,数据会自动通过RXD到单片机,当需要发送数据时,自动通过TXD发送出去。也就是只需要连接单片机的RXD和TXD引脚就可以,无需用单片机引脚连接485芯片的DE RE引脚。

R5的作用是限流,保护引脚,R5的大小,可以选择470欧、1K、4.7K都可以。
R6是上拉电阻,一般可以选择4.7K,也可以选择10K。
Q1是N型MOS管,当TXD高电平,MOS管导通,RE DE引脚接地,进入接收模式。当TXD低电平,MOS管截止,RE DE引脚接高电平,进入发送模式。
C3是电源旁路电容,作用是给485芯片提供一个干净的电源,使它稳定的工作。
电阻R1和R2,SP3485推荐电路,R1是下拉电阻,接到B上。R2是上拉电阻,接到A上。
电阻R3,匹配电阻。
双向稳压二极管D1、D2、D3的作用是把A、B引脚对地的电压以及A和B引脚之间的电压,牵制到6.5V以内,保护485芯片。

发送数据过程
发送数据,用的是单片机的TX引脚,也就是说,在TX引脚上表现数据。要发送数据0x32,写成二进制就是0x00110010,TXD引脚上就会依次的用高低电平体现1和0。
当TX发送0时,三极管不导通,DE接高电平,进入发送模式,485芯片会把DI上的电平反应到AB引脚上输出,因为DI已经接地,所以AB引脚会传输0。所以,当TXD发送0时,AB引脚发送0。
当TX发送1时,三极管导通,RE接低电平,进入接收模式,485芯片的AB引脚进入高阻状态,因为R2把A拉高,R1把B拉低,所以,AB传输的是1。所以,当TXD发送1时,AB引脚发送1。
一句话:TXD发1,AB就发1;TXD发0,AB就发0。

接收数据过程
接收数据,用的是单片机引脚RX,在RXD引脚上表现数据。在接收数据的过程中,TX引脚是一直保持高电平的,当TXD是高电平时,RE是低电平,正好变成了接收状态,然后485芯片的RO引脚(也就是接RX的引脚)就会接收AB传输过来的数据。

接线

因为我们电脑也是没有485接口的,所以如果需要接收485信号,则需要用485转UART的模块进行转换。

485通信接线是不交叉的,即A接A,B接B,可以多节点的挂载在总线上。

原理图

R3为120欧的阻抗匹配电阻,如果长距离通信的话,一定要在最后一个节点接上这一个电阻;

我们可以看到这里的UART转485使用PD2和PC12两个IO,对应UART5,

新建或复制工程,开启UART5,UART5对应PD2和PC12

代码和串口部分逻辑一样:

  /* USER CODE BEGIN 2 */uint8_t rxbuf[12];uint8_t ackbuf[]="ack";/* USER CODE END 2 */while (1){/* USER CODE BEGIN 3 */
//    uint8_t txbuf[]="Hello,world!";
//    HAL_UART_Transmit(&huart5,txbuf,sizeof(txbuf),1000);
//    HAL_Delay(500);    if(HAL_UART_Receive(&huart5,rxbuf,sizeof(rxbuf),1000) == HAL_OK){HAL_UART_Transmit(&huart5,ackbuf,sizeof(ackbuf),1000);}}

参考工程

参考飞书文档

http://www.xdnf.cn/news/5182.html

相关文章:

  • 【AI提示词】漏斗思维优化专家
  • RocketMQ Kafka区别
  • upload-labs靶场通关详解:第四关
  • zdir3个人网盘dockerfile打包
  • 202534 | KafKa简介+应用场景+集群搭建+快速入门
  • 大模型微调终极方案:LoRA、QLoRA原理详解与LLaMA-Factory、Xtuner实战对比
  • 绑定 SSH key(macos)
  • uniapp-商城-49-后台 分类数据的生成(方法加精)
  • 【计算机视觉】OpenCV实战项目:FunnyMirrors:基于OpenCV的实时哈哈镜效果实现技术解析
  • Checkmk实战指南:从零构建企业级监控系统
  • 字节:增强LLM角色区分能力
  • 第十八章,入侵检测/防御系统(IDS/IPS)
  • mysql-8.0.30-winx64 Install/Remove of the Service Denied!
  • 互联网大厂Java求职面试实战:Spring Boot微服务与数据库优化详解
  • Java云原生到底是啥,有哪些技术
  • DA14585墨水屏学习
  • 电子电器架构 --- 新能源高压上下电那点事一文通
  • 浅谈装饰模式
  • 旅游推荐数据分析可视化系统算法
  • 数据结构中的栈与队列:原理、实现与应用
  • C++学习-入门到精通-【6】指针
  • 【AI智能推荐系统】第七篇:跨领域推荐系统的技术突破与应用场景
  • [RoarCTF 2019]Easy Calc1
  • 【许可证】Open Source Licenses
  • 异地多活单元化架构下的微服务体系
  • 某某文KU下载工具,请低调再低调使用!
  • Hadoop 2.x设计理念解析
  • 【大模型】使用 LLaMA-Factory 进行大模型微调:从入门到精通
  • AI 驱动数据库交互技术路线详解:角色、提示词工程与输入输出分析
  • Linux——Mysql索引和事务