大话串口协议
  CXuiBqhmn0Jq 2023年11月02日 82 0

1 引言

在当今数字化时代,嵌入式系统的应用广泛而不可或缺。而串口通信作为连接外部世界的重要桥梁,在嵌入式系统的设计中发挥着至关重要的作用。在众多微控制器中,STMicroelectronics的STM32F103系列因其卓越的性能和丰富的功能而备受赞誉。而其中,串口接口作为最常用的通信方式之一,为开发者们提供了无限可能。本文将带您以STM32F103系列的串口特性与应用来说明串口在嵌入式中的广泛应用。通过项目级串口通信协议的应用来彻底了解串口的特性、不仅仅局限于理论知识的介绍。

2 STM32F103 串口硬件介绍

2.1 硬件框图

大话串口协议_串口

对于初学者来说、了解串口硬件特性这对于理论基础至关重要的。但是即使不了解这些硬件特性、也能写出很好的应用程序、对于大多数工程师来说、底层配置都已经做的很好,大多数都是基于应用层开发,如果花很多时间在底层配置上有点得不偿失。我的建议是了解这个框图的.如果需要完整了解、建议查看完整的参考手册。

2.1.1 硬件引脚

TX:发送数据输出引脚。 RX:接收数据输入引脚。 SW_RX:数据接收引脚,只用于单线和智能卡模式,属于内部引脚,没有具体外部引脚。 nRTS:请求以发送(Request To Send),n 表示低电平有效。如果使能 RTS 流控制,当USART 接收器准备好接收新数据时就会将 nRTS 变成低电平;当接收寄存器已满时,nRTS 将被设置为高电平。该引脚只适用于硬件流控制。 nCTS:清除以发送(Clear To Send),n 表示低电平有效。如果使能 CTS 流控制,发送器在发送下一帧数据之前会检测 nCTS 引脚,如果为低电平,表示可以发送数据,如果为高电平则在发送完当前数据帧之后停止发送。该引脚只适用于硬件流控制。

SCLK:发送器时钟输出引脚。这个引脚仅适用于同步模式。

2.1.2 数据寄存器

数据移位寄存器:串口接收或者发送的数据就是通过寄存器来自动操作的。

比如我们需要通过串口发送“hello usart”,我们通过ST提供的API将“hello usart”写到TDR寄存器中,硬件检测到寄存器有数据就通过移位寄存器移到发送端口,整个发送流程结束。所以软件工程师只需要通过API将数据拷贝到TDR寄存器中就开以。需要注意的是、我们需要按照串口的硬件特性去拷贝,我们可以按照官方提供的函数去查看调用了哪些寄存器。通过查看寄存器的信息、我们就可以了解硬件特性。同理接收“hello usart”的过程也一样。

2.1.3 发送控制器

想象一个场景:如果1个社会如果没有法律会发生什么情况、可能整个社会就没有办法正常的运转。比如你辛辛苦苦的干活存了几百万,结果一些地痞流氓1一晚上就把你洗劫一空,你作何感受。所以任何东西都需控制、按照某种规则来运动、程序如此、社会也是如此。就像天道里面的丁原因、正因为看透了事务运行的规律,他才能控制财富。串口收发控制器也是这样,正是因为它、串口里面的数据才会有规律的运行。

  • 数据缓冲区:STM32F103串口发送控制器拥有一个数据缓冲区,开发者可以将要发送的数据写入缓冲区。然后,发送控制器会自动从缓冲区读取数据,并通过串口通信协议将数据发送出去。
  • 波特率设置:开发者可以设置串口发送控制器的波特率,即数据传输的速率。波特率的设置需要与外部设备相匹配,确保数据传输的稳定和正确。
  • 发送中断:STM32F103的串口发送控制器支持中断方式的数据发送。开发者可以配置发送中断,当发送缓冲区为空时,发送控制器会触发中断并请求CPU发送下一个数据。

2.1.4 接收控制器

  • 数据缓冲区:串口接收控制器拥有一个数据缓冲区,用于存储从外部设备接收到的数据。一旦接收到数据,控制器会自动将数据存储在接收缓冲区中。
  • 接收中断:STM32F103串口接收控制器支持中断方式的数据接收。开发者可以配置接收中断,当接收缓冲区有新的数据时,接收控制器会触发中断并请求CPU处理接收到的数据。
  • 错误检测:串口接收控制器可以检测数据接收过程中的错误,如校验错误、帧错误等。在检测到错误时,控制器可以触发相应的错误中断,开发者可以处理这些错误情况。

3 串口软件协议

3.1 串口通信方式

USART:通用同步异步收发器(Universal Synchronous Asynchronous Receiver and Transmitter)可以灵活地与外部设备进行全双工数据交换。USART 支持使用 DMA,可实现高速数据通信。

3.1.1 同步方式

  • 同步通信是指在发送和接收数据时,发送方和接收方之间使用一个共同的时钟信号来保持数据传输的同步性。发送方按照时钟信号的节拍发送数据,接收方也按照相同的时钟信号节拍接收数据。这样可以确保发送方和接收方的数据传输速度和时序是一致的。
  • 同步通信通常适用于高速数据传输和对时序要求较严格的场景,例如在计算机内部总线、以太网等高速数据传输中常使用同步通信。

3.1.2 异步方式

  • 异步通信是指在发送和接收数据时,发送方和接收方之间没有共同的时钟信号来保持数据传输的同步性。发送方在每个数据帧之间使用一个起始位和一个或多个停止位来标志数据的开始和结束,而数据本身则按照发送方和接收方约定的速率发送。
  • 异步通信通常适用于低速数据传输和对时序要求较灵活的场景,例如串口通信、键盘输入等。

3.1.3 同步异步的区别

  • 同步通信需要共同的时钟信号来保持数据传输的同步性,而异步通信没有共同的时钟信号。
  • 同步通信适用于高速数据传输和对时序要求严格的场景,异步通信适用于低速数据传输和对时序要求灵活的场景。
  • 同步通信的硬件复杂度较高,而异步通信的硬件复杂度较低。
  • 异步通信由于没有同步时钟信号,相对于同步通信来说容易出现数据传输的错误或丢失。因此,异步通信通常需要在数据中添加校验位等机制来确保数据的可靠性。

3.1.4全双工方式

  • 全双工通信是指在通信过程中,发送方和接收方可以同时进行双向的数据传输。这意味着发送方和接收方之间可以同时发送和接收数据,互不干扰。
  • 在全双工通信中,发送方和接收方拥有独立的信道,使得它们可以同时进行数据的发送和接收。这种模式类似于电话通话,每个参与者都可以同时说话和听到对方的声音。
  • 全双工通信可以实现高效的数据传输,适用于需要同时双向通信的场景,例如视频通话、双向对讲等。

3.1.5半双工方式

  • 半双工通信是指在通信过程中,发送方和接收方之间不能同时进行双向的数据传输。数据的传输是单向的,发送方和接收方在同一时间只能进行其中一种操作。
  • 在半双工通信中,发送方完成数据的发送后,需要等待接收方的响应或完成接收后才能进行下一步的数据传输。这种模式类似于对讲机,只有一个人说话时另一个人才能听到,不能同时说话和听到对方的声音。
  • 半双工通信通常用于一方发送数据,而另一方接收数据,然后反过来进行数据传输,交替进行双向通信。这种模式适用于一次只需要一个方向传输数据的场景,例如普通的串口通信。

3.1.6 全双工和半双工的区别

  • 全双工通信允许发送方和接收方同时进行双向数据传输,而半双工通信只允许一方在一个时间段内进行数据传输。
  • 全双工通信拥有独立的双向信道,允许同时双向通信,而半双工通信只有一个共享信道,需要在发送和接收之间切换。
  • 全双工通信适用于需要同时双向通信的场景,而半双工通信适用于一次只需要一个方向通信的场景。

3.1.7 串行通信

  • 串行传输是一种逐位顺序传输数据的方式。在串行传输中,数据位逐个地按照顺序传输,每次传输只传送一个位。数据通过单条传输线或信道传递,一位接着一位地进行。
  • 串行传输的优点是传输线路简单,仅需要一条信号线即可传输数据。这使得串行传输适用于长距离通信,因为串行传输不会受到并行传输中数据线路长度差异导致的时序问题。
  • 串行传输的缺点是传输速率较慢,因为数据逐位传输,需要较长的传输时间。
  • 串行传输常见于串口通信、以太网等通信协议

3.1.8 并行通信

  • 并行传输是一种同时传输多个数据位的方式。在并行传输中,多个数据位同时通过多条传输线或信道传递,每次传输传送多个位。
  • 并行传输的优点是传输速率较快,因为多个数据位同时传输,可以在较短的时间内完成数据传输。
  • 并行传输的缺点是传输线路复杂,需要多条信号线,并且要求各个数据线路的长度相等,否则会导致数据传输的时序问题。
  • 并行传输通常应用于计算机内部总线、存储器传输等场景,这些场景的传输距离相对较短,可以容忍多条信号线的复杂性。

3.1.9 串行通信和并行通信的区别

  • 串行传输逐位传输数据,一次传送一个位,而并行传输同时传输多个数据位。
  • 串行传输线路简单,适用于长距离通信,但传输速率较慢。并行传输线路复杂,适用于短距离通信,但传输速率较快。
  • 串行传输常见于串口通信、以太网等通信协议。并行传输通常应用于计算机内部总线、存储器传输等场景。

3.2 串口通信数据格式

大话串口协议_数据_02

  1. 数据位数(Data Bits):数据位数表示在每个数据字节中用于传输数据的位数。通常情况下,数据位数为8位,但也可以是5位、6位、7位等。一般来说,数据位数越多,可以传输的字符集越大。
  2. 停止位数(Stop Bits):停止位数表示在每个数据字节之后发送的停止位数。常见的停止位数为1位或2位。停止位的作用是使接收端可以区分不同数据帧之间的边界。
  3. 校验位(Parity Bit):校验位用于在数据传输中检测和纠正错误。常见的校验方式有奇偶校验和无校验。奇偶校验位用于使数据位的总数为奇数或偶数,从而确保数据的正确性。
3.2.1 数据在硬件上的表现形式

大话串口协议_数据_03

我们要知道在单片机中,数字输入和输出通常使用TTL电平标准,即IO口输出高电平时输出3.3V或5V,输出低电平时输出0V。类似我们常用的模块和单片机的串口的TX和RX能直接向连,就是应为它们之间的电平特性一样,数据才传输的过程中才不会乱码。

大话串口协议_数据_04

3.2.2 保证数据的正确性的方法
  1. 奇校验(Odd Parity):
  • 假设要传输的数据是8位,其中有7位是数据位(D0 ~ D6),一个位是奇校验位(P)。
  • 发送端在发送数据时,计算数据中所有1的个数。如果1的个数是偶数,那么校验位P设置为1,使得数据中1的个数变为奇数。如果1的个数是奇数,那么校验位P设置为0,使得数据中1的个数保持奇数个。
  • 接收端在接收数据后,计算数据中所有1的个数,包括接收到的校验位。如果1的个数是偶数,说明数据传输中没有出现奇数个错误位,数据是正确的。如果1的个数是奇数,说明数据传输中出现了奇数个错误位,数据可能发生错误。
  1. 偶校验(Even Parity):
  • 假设要传输的数据是8位,其中有7位是数据位(D0 ~ D6),一个位是偶校验位(P)。
  • 发送端在发送数据时,计算数据中所有1的个数。如果1的个数是奇数,那么校验位P设置为1,使得数据中1的个数变为偶数。如果1的个数是偶数,那么校验位P设置为0,使得数据中1的个数保持偶数个。
  • 接收端在接收数据后,计算数据中所有1的个数,包括接收到的校验位。如果1的个数是偶数,说明数据传输中没有出现奇数个错误位,数据是正确的。如果1的个数是奇数,说明数据传输中出现了奇数个错误位,数据可能发生错误。

通过奇偶校验,可以简单地检测数据传输中是否出现了错误。如果在传输过程中发生了一个或多个位的错误,校验位的奇偶性就会发生变化,接收端可以根据校验位来判断是否出现了错误,并进行相应的处理。需要注意的是,奇偶校验只能检测出错误的发生,但不能纠正错误。对于更复杂的错误检测和纠正,通常需要使用更强大的校验码或纠错编码。

3.3 RS232标准

3.3.1 发展背景

RS232(Recommended Standard 232),也称为EIA-232(Electronic Industries Alliance 232),是一种通信标准,用于定义串行通信接口的电气特性和通信协议。RS232最初是由美国电子工业协会(Electronic Industries Association,EIA)开发和推广的,因此也常被称为EIA-232。

RS232标准主要用于连接计算机和外部设备之间,例如调制解调器、打印机、数据采集设备等。它提供了一种简单可靠的方式来进行串行数据通信。

3.3.2 电气特性

大话串口协议_数据_05

RS232使用负逻辑电平标准,其中1被表示为负电压(通常是-3至-15V),而0被表示为正电压(通常是+3至+15V)。这种负逻辑标准使得在发送端和接收端之间可以使用简单的电压比较来解码数据。

3.3.3 通信协议

RS232采用异步通信方式,也称为异步串行通信。异步通信表示数据传输不需要共同的时钟信号,每个数据字符的传输时间可以不同。在异步通信中,每个数据字符之间使用起始位和停止位来标志数据的开始和结束

3.3.4 数据格式

RS232数据帧通常由一个起始位、8位数据位、一个可选的奇偶校验位和一个或多个停止位组成。数据帧的格式可以根据通信的需求进行配置

3.3.5 传输距离

RS232通信适用于较短的距离,通常在15米以内。超过这个距离,信号可能会受到衰减和干扰。

3.3.6 电路原理图

大话串口协议_串口_06

3.4 RS485标准

3.4.1 发展背景

RS485是一种通信标准,用于定义串行通信接口的电气特性和通信协议。它是RS-232标准的一种改进和扩展,针对在长距离通信和多点通信的应用场景进行了优化。RS485通常用于工业自动化、远程监控、数据采集等领域,特别适用于需要在远距离传输数据和多个设备之间进行通信的应用。

3.4.2 电气特性

大话串口协议_串口_07

RS485使用差分信号传输,即每个数据线对都由一对线组成,分别称为A线和B线。在数据传输过程中,一个线路保持高电平(1)时,另一个线路保持低电平(0),这样的组合形式可以有效抵消电磁干扰,提高信号的抗干扰能力。RS485规定了差分电压的范围用于表示逻辑1和逻辑0。典型的差分电压范围为±200mV至±6V。当差分电压大于等于0V时,表示逻辑1;当差分电压小于0V时,表示逻辑0。这种电压标准使得RS485在不同供电电平和不同噪声环境下都能正常工作。

3.4.3 多点通信

RS485支持多点通信,即在同一总线上可以连接多个设备(最多32个)。每个设备都有一个唯一的地址,数据的发送和接收是通过地址识别来实现的。这使得RS485在工业控制和自动化系统中非常实用,因为可以通过一个总线连接多个传感器、执行器和控制器。

3.4.4 通信协议

RS485是半双工通信,意味着在同一时间内数据只能在一个方向上传输。发送设备将数据发送到总线上,其他接收设备根据地址判断是否接收数据。接收设备不能同时发送数据。

3.4.5 传输距离

RS485通信可以在较长距离上进行,最大传输距离可以达到1200米,这使得RS485特别适用于需要远距离传输数据的应用场景。

3.4.6 传输速度

RS485支持多种数据传输速率,通常可以从300bps到10Mbps不等。可以根据通信需求选择合适的速率

3.4.7 电路原理图

大话串口协议_串口_08

3.5 RS422标准

3.5.1 发展背景

RS422是一种串行通信标准,类似于RS485,它用于定义串行通信接口的电气特性和通信协议。RS422主要用于在工业自动化、数据采集、长距离数据传输等应用中,特别适合于需要高速和可靠数据传输的场景。

3.5.2 电气特性

大话串口协议_串口_09

差分信号传输:与RS485一样,RS422也使用差分信号传输。数据传输线上同时存在两个相互互补的信号,分别称为A线和B线。在数据传输过程中,一个线路保持高电平,而另一个线路保持低电平,这种差分传输方式可以有效抵消电磁干扰,提高信号的抗干扰能力。

3.5.3 点对点通信

RS422通信通常用于点对点通信,即一对发送器和接收器之间的通信。不像RS485支持多点通信。

3.5.4 传输距离

RS422通信可以在较长距离上进行,最大传输距离可以达到1500米,比RS485稍微短。这使得RS422在需要远距离传输数据的应用中非常实用。

3.5.5 传输速度

RS422支持高速数据传输,通常可以达到10Mbps以上的速率,比RS485高一些。在RS422总线的两端需要加上终端电阻,通常为120欧姆。这些终端电阻用于防止信号的反射和干扰,保持信号的完整性,与RS485相同。

4 RS232 、RS485、RS422的区别

4.1 通信方式

  • RS232:RS232通常用于点对点通信,即一对发送器和接收器之间的通信。它不支持多点通信,通常用于连接计算机和外部设备(如调制解调器、打印机等)。
  • RS485:RS485支持多点通信,允许多个发送器和接收器在同一总线上进行通信。每个设备都有唯一的地址,数据的发送和接收是通过地址识别来实现的,适用于工业自动化、数据采集等多设备通信场景。
  • RS422:RS422也支持多点通信,类似于RS485,但通常用于点对点通信,用于连接两个设备的长距离通信。

4.2 差分信号传输

  • RS232:RS232使用单一的数据线和共享的地线进行通信,没有差分信号传输,相对于RS485和RS422,抗干扰能力较弱。
  • RS485和RS422:RS485和RS422都采用差分信号传输,使用两根数据线,分别为A线和B线。这种差分传输方式可以有效抵消电磁干扰,提高信号的抗干扰能力

4.3 传输距离

  • RS232:RS232通信适用于较短的距离,通常在15米以内。
  • RS485:RS485通信可以在较长距离上进行,最大传输距离可以达到1200米。
  • RS422:RS422通信可以在更长的距离上进行,最大传输距离可以达到1500米。

4.4 传输速度

  • RS232:RS232通常支持较低的数据传输速率,通常在几十kbps到几百kbps之间。
  • RS485和RS422:RS485和RS422都支持较高的数据传输速率,通常可以达到10Mbps以上的速率

4.5 电平特性

  • RS232:RS232采用负逻辑电平标准,即高电平的电压较低,低电平的电压较高。
  • RS485和RS422:RS485和RS422也采用差分电平标准,即高电平和低电平的电压相对于地线之间的差分电压来表示

5 电平转化原理图介绍

5.1 TTL转RS485电路

大话串口协议_串口_10

大话串口协议_数据_11

上图为使用 GPIO 口控制使能信号的原理图,TE 发送使能与 RE 接收使能短接起来,这样发送接收同一时刻只能一者有效,从而实现了半双工。

5.2 TTL转RS232电路

大话串口协议_串口_12

5.3 TTL转422电路

后续补充

6 面试常问点

6.1 串口通信的基本概念

6.2 RS485、RS232的共同点和不同点,简要说一下。

6.3 基于串口用过哪些协议(重要)

  • 基于rs485的国际标准modbus协议、后面我会出一个专题介绍modbus协议、包括源码的讲解和移植。
  • 自定义协议、后面我会从我工作生涯中写一个基于串口的自定义协议,以后所有基于串口的协议大部分都可以利用这个方式来解决。
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
CXuiBqhmn0Jq
作者其他文章 更多