您的位置  > 互联网

STM32串口通信与并行通信串行通信的通信分类内容

【通讯栏目】1:STM32串口通讯(usart)

本文简单介绍一下通信分类:

串行通信和并行通信

串行通信是指一位一位地发送和接收数据,而并行通信则可以一次发送和接收N位数据。 因此,串行或并行通信是一个概念,是理论上的。

并行接口:

串行接口:串行接口需要三根线:GND、RXD、TXD。 其余线路用于握手并且是可选的。

串行接口

串口,全称“串行接口”,又称串行通信接口(通常简称COM接口),是采用串行通信方式的扩展接口,处于物理层面。 常见的包括 RS-232(用于一般计算机应用)。 25 针或 9 针连接器)以及用于工业计算机应用的半双工 RS-485 和全双工 RS-422。

所以我们今天介绍的485通信是一种通信接口,其软件通信协议与一般的usart通信相同。

串行通讯

串行通信是一种通信方式。 与以太网、红外、蓝牙、USB(USB也算广义上的串行通信)等相比,它是一种比较底层的通信方式。

串行通信最重要的参数是波特率、数据位、停止位和奇偶校验。 为了两个端口进行通信,这些参数必须匹配。 我们熟悉的是串行通信协议。 下图是异步串行通信协议图:

当然,串口通信和串口通信对于非专业人士来说是一样的,只是理科专业的男人很着迷,想了解一些东西。

那么我们前面学习的USART通信、I2C通信、SPI通信是什么?

以usart为例:USART是全双工通用同异步串行收发模块。 该接口是一种高度灵活的串行通信设备。 因此,USART通信、I2C通信、SPI通信都是基于串行通信理论开发的实际串行通信应用。 所谓的I2C通信协议只是针对该应用的一种规范。

RS232通讯和RS485通讯硬件

RS232是一种异步传输标准接口。 通常RS-232接口以9针(DB-9)或25针(DB-25)的形式出现,如下图:

RS232接口缺陷:

尽管存在上述缺陷,RS232 接口在计算机和其他设备上仍然很常见。 一般个人计算机上有两组RS-232接口,分别称为COM1和COM2。

485(通常称为RS485/EIA-485)是一个标准,规定OSI模型物理层的电气特性为2线、半双工、多点通信。

RS485特点:

1、接口电平低,不易损坏芯片。

2、传输速率高。 RS485最大数据传输速率可达10米,传输速度可达1200m。

3、抗干扰能力强。 RS485接口采用平衡驱动器和差分接收器的组合,增强了抗共模干扰能力,即抗噪声干扰良好。

4、传输距离远,支持节点多。 RS485总线传输距离可达1200m以上(速度≤),一般最多支持32个节点。 如果使用特殊的485芯片,可以达到128或256个节点。 最大的可以支持400个节点。

【嵌入式物联网MCU学习】可以加我微信一起学习。 我整理了100多G(全网最全)的学习资料包(持续更新)和最新的学习路线思维导图。 各种学习群和项目开发教程。您还可以在我的朋友圈观看第一手行业新闻,以及每周技术专家问答直播

防范措施:

1:485建议使用在线式和总线式网络,而不是星形和环形网络(涉及信号反射并产生干扰)。

2:当传输距离较长时,RS485需要两个终端匹配电阻,其阻值要求等于传输电缆120欧姆的特性阻抗。 (485通讯硬件设计中有很多注意事项,稍有不慎就可能对通讯造成很大的干扰,请查看更多资料)

3:具体使用时,使用相应的485芯片作为收发器,如等。

图中的A、B总线接口用于连接485总线。 RO为接收输出端,DI为发送数据接收端,RE为接收使能信号(低电平有效),DE为发送使能信号(高电平有效)。

4:RS485通讯解决了RS232通讯距离短的问题,但485主要传输的是差分信号,只需要两根线,+和-两根线,或者也叫A、B线。 两条线A和B的差分电平信号作为数据信号传输。 那么就没有RX和TX的概念了,发送和接收也不能分开。 发送和接收都是通过这两条线传输的,即每次只能发送或接收,这就是半双工的概念,在效率上比232弱很多。

RS485通讯流程及实​​现方法

说到这里,我们大概对什么是RS485有了一个大概的了解,但是通信过程是如何进行的呢? 正如我们之前所说,RS485是一种串行接口。 它实际上使用的是串行通信协议,与USART相同。

所以在实际编程中,我们需要使用STM32单片机。

除了PA3和PA2之外,我们还定义了一个额外的引脚PA1:

正如评论所说,目的是485模式控制:

485通信是半双工的,所以在我们发送或接收数据之前,我们需要先设置485通信的方向,而方向的设置是通过485通信模块进行的

对于两条使能信号线,我们将RE和DE连接在一起,然后将它们连接到PA1。 当PA1置高时,传输使能; 当PA1设置为低电平时,接收使能;

我们配置好之后,使能串口接收中断,就可以正常接收数据了。 串口中断函数如下:

该程序非常简单。 实现的功能是将串口中断接收到的字符存储到字符串[]中。

通过RS485发送字符串:

该函数是在库函数()的基础上稍微组合而成的; 实现字符串的发送。

通过RS485接收字符串:

我们知道USART通信每接收到一个字符就会跳入中断,是一个字一个字的接收。 上图中的函数实现了接收完所有字符后,将接收数组中的所有字符取出到另一个数组中的操作。 意思是让逻辑更清晰。

如何通过RS485通讯实现多机通讯

至此我们就分析完了原子哥的程序,但是上面的程序似乎只能实现一对一的数据传输。 如何利用RS485通讯的强大功能实现多机通讯?如上一篇文章

【通讯专栏】STM32单片机/SPI通讯

最后,我们提到与从机通信需要地址和命令代码,并且在SPI通信时我们可以将片选信号拉低来选择某个从机设备。 但使用RS485通讯时,主机和从机的地址是如何确定的呢? 主机(或从机)的数据传输对象是如何确定的?

RS485总线是一种传统的通信总线。 它不能进行总线的自动仲裁,即不能同时发送数据以避免总线竞争。 因此,整个系统的通信效率必然较低,数据冗余量较大。 RS485总线对于速度要求不高的应用场合不适合。

也就是说,当主机(后面的从机)发送数据时,总线上的所有设备都可以接收到。 唯一的区别是设备是否会对数据做出响应。

那么如何判断设备是否应该响应呢? 这里需要一个协议。

协议定义了数据帧格式:帧头---地址---功能码---数据---CRC校验。 注意:协议是一个非常灵活的东西,目的是定义数据通信的格式。 以上是标准的通信协议。 在具体应用中,可以根据实际需要进行剪裁,比如添加帧尾,或者改为其他验证方式。

我们用

比如我们可以自己写一个数据传输协议,就像原子哥写的接收中断一样。 地址和功能码都是我们自己指定的。

发送地址后,485总线上的所有设备都会将接收到的指令的地址码0x00与自己的地址进行比较。 如果它们相同,他们就会知道它是发送给他们的。 如果他们不同,他们不会回应。 实现接入485总线的多点通讯。