首页 > 其他分享 >stm32入门教程--UART协议详解

stm32入门教程--UART协议详解

时间:2024-10-23 21:52:31浏览次数:3  
标签:异步 -- 入门教程 通信 发送 stm32 传输 全双工 数据

目录

简介

UART串口协议

串行通信

并行通信

串行通信与并行通信的区别

单工通信

半双工

全双工

同步和异步的区别

UART帧结构


简介

STM32是意法半导体公司推出的一款32位ARM Cortex-M系列微控制器。UART、SPI和I2C是STM32中常用的串行通信协议。

  1. UART(通用异步收发器):UART是一种广泛用于串行通信的协议,用于在设备之间传输数据。UART使用两根线(一根发送线和一根接收线)进行全双工通信。STM32通过UART通信可以与其他设备(如计算机、传感器等)进行数据交换。

  2. SPI(串行外设接口):SPI是一种用于设备之间通信的同步协议,常用于连接多个外设。SPI使用四根线(一个主设备和一个从设备之间需要一根时钟线、一根主设备输出线、一根从设备输出线和一根从设备输入线)进行通信。STM32的SPI接口可以实现高速、全双工的数据传输。

  3. I2C(串行外设接口):I2C是一种串行通信协议,用于在集成电路芯片之间进行通信。I2C使用两根线(一根时钟线和一根数据线)进行通信。STM32的I2C接口可以支持多个设备的连接,通过编程设置不同的设备地址来实现数据传输。

在STM32中,这三种协议都有相应的硬件模块支持,开发者可以通过编程设置寄存器来配置相应的协议参数,并通过读写寄存器来实现数据的发送与接收。

UART串口协议

UART即通用异步收发器,是一种通用的串行、异步通信总线,该总线有两条数据线,可以实现全双工的发送和接收。

串行?什么是串行?异步?什么是异步?全双工?什么是全双工?

接下来我们先来了解一下串行、并行,单工、半双工、全双工、异步、同步这几个概念。

串行通信

  1. 定义:串行通信是指通信双方按位进行,遵守时序的一种通信方式。在这种方式中,数据被逐位传输,每位数据占据固定的时间长度。它使用少数几条通信线路就可以完成系统间的信息交换。

  2. 特点

    • 传输线少、成本低:特别适用于近距离的人机交换、实时监控等系统通信工作。
    • 适用于远距离通信:借助于现有的电话网也能实现远距离传输。
    • 实现简单:但传输速度相对较慢。
  3. 应用场景:串行通信多用于系统间通信(多主控制系统)、设备间(主控设备与附属设备)、器件间(主控CPU与功能芯片)之间数据的串行传送,实现数据的传输与共享。例如,串口、USB接口等常采用串行通信方式。

 首先,串口协议一次可以发送八个数据,那么如图,8个数据分别在8个数据线上同时向外部设备发送数据,这种就是并行通信。

 如图,如果SOC和外部设备只有一条通信总线,而数据依次从低位顺次发送,这种就是串行通信的形式。

并行通信

  1. 定义:并行通信是指数据的各个位同时传送,可以字或字节为单位并行进行。在这种方式中,数据被分成多个并行传输线进行同时传输。

  2. 特点

    • 传输速度快:因为多个数据位同时传输。

    • 通信线多、成本高:需要更多的线路和接口。

    • 实现复杂:但传输距离受到限制,因为线路长度增加会导致干扰增加,数据容易出错。

  3. 应用场景:并行通信适用于数据传输量较大、距离较短、速度较快的场合。例如,高性能计算、数据中心、云计算等领域常采用并行通信方式。此外,计算机或PLC内部总线也是以并行方式传送数据的。

串行通信与并行通信的区别

  1. 数据传输方式:串行通信是按位的顺序依次传输数据,而并行通信是同时传输多个数据位。

  2. 传输速度:并行通信的传输速度更快,但需要更多的线路和接口;而串行通信的传输速度相对较慢,但线路和接口需求较少。

  3. 应用场景:串行通信适用于数据传输量较小、距离较远、成本较低的场合;而并行通信则适用于数据传输量较大、距离较短、速度较快的场合。

单工通信

 

单工通信(Simplex Communication)是通信领域中的一种基本通信方式,其特点在于消息只能单方向传输。以下是对单工通信的详细解释:

1、定义与原理

  • 定义:单工通信是指消息只能从一个方向传输的工作方式。在单工通信中,通信的信道是单向的,发送端与接收端的身份是固定的,即发送端只能发送信息,不能接收信息;接收端只能接收信息,不能发送信息。

  • 原理:单工通信的工作原理相对简单,它依赖于一个固定的发送端和一个固定的接收端。发送端负责产生并发送数据信号,而接收端则负责接收并处理这些数据信号。由于数据信号只能从一个方向传输,因此不存在数据碰撞或冲突的问题。

2、特点

  • 数据传输方向固定:在单工通信中,数据只能从一个方向传输到另一个方向,无法改变传输方向。

  • 设备配置简单:通常只需要一个发送器和一个接收器,以及一条单向的通信信道即可。

  • 无需反馈通道:由于数据是单向传输的,因此不需要设置反馈通道来接收发送端的确认信息。

3、应用场景

  • 广播和电视:广播电台或电视台作为发送端,向广大听众或观众发送信息;而听众或观众则作为接收端,接收并处理这些信息。这种传播方式是典型的单工通信应用。

  • 电子广告牌:显示信息的屏幕只能向观众发送信息,观众无法向屏幕发送数据,因此也属于单工通信的应用场景。

  • 数据收集系统:如气象数据的收集、电话费的集中计算等,这些系统通常只需要从数据源收集数据,而不需要向数据源发送反馈或控制信息。

4、优缺点

  • 优点

    • 技术实现相对简单,设备配置成本低。

    • 适用于那些不需要双向通信的场合,如广播、电视等媒体传播方式。

  • 缺点

    • 数据传输方向固定,无法实现双向通信。

    • 在需要双向通

    • 信的场合中,单工通信无法满足需求。

半双工

半双工(Half Duplex)是一种通信方式,它允许数据在两个方向上传输,但在同一时刻只能有一个方向上的数据传输存在。以下是对半双工的详细解释:

一、定义与原理

  • 定义:半双工通信是指在通信过程的任意时刻,信息既可由A传到B,又能由B传A,但只能由一个方向上的传输存在。这意味着,虽然数据可以在两个方向上传输,但在同一时间段内,只能有一个方向的数据传输是活跃的。

  • 原理:在半双工通信中,通信系统每一端的发送器和接收器通过收/发开关转接到通信线上,进行方向的切换。这种切换通常是由软件控制的电子开关来实现的。因此,在半双工通信中,会产生一定的时间延迟,因为需要在发送和接收之间进行切换。

二、特点

  • 数据传输方向交替:与单工通信相比,半双工通信允许数据在两个方向上传输,但同一时刻只能有一个方向的数据传输。

  • 设备配置相对简单:虽然需要发送器和接收器,但只需要一条通信线路即可实现数据的双向传输(尽管不能同时)。

  • 存在时间延迟:由于需要在发送和接收之间进行切换,因此会产生一定的时间延迟。

三、应用场景

  • 对讲机:对讲机是典型的半双工通信设备。在同一时间内,只允许一方讲话,另一方必须等待对方讲完话后才能回复。

  • 共享LAN:传统的共享型局域网(LAN)通常以半双工模式运行。在这种模式下,线路上容易发生传输冲突,因此通常采用CSMA/CD(载波侦听多路访问/冲突检测)等协议来协调数据传输。

  • TD-SCDMA:在移动通信领域,TD-SCDMA(时分同步码分多址)是一种典型的时分双工(TDD)技术。它采用时分复用的方式将上行和下行传输分离在不同的时隙内,从而实现了半双工模式下的数据传输。

四、优缺点

  • 优点

    • 成本相对较低:与全双工通信相比,半双工通信只需要一条通信线路和相对简单的设备配置。

    • 实现简单:半双工通信系统的设计和维护相对简单。

    • 可靠性较高:由于系统简单,半双工通信的故障点较少,整体系统的可靠性较高。

  • 缺点

    • 效率较低:由于不能同时发送和接收数据,半双工通信的带宽利用率较低,数据传输效率不如全双工。

    • 高延迟:由于需要在发送和接收之间进行切换,因此会产生一定的时间延迟。

全双工

全双工(Full Duplex)是一种通信方式,它允许数据在通信链路的两个方向上同时进行传输。以下是对全双工的详细解释:

一、定义与原理

  • 定义:全双工通信是指在通信的任意时刻,线路上可以同时存在A到B和B到A的双向信号传输。这意味着,发送端和接收端可以同时进行数据的发送和接收,从而实现数据的双向实时传输。

  • 原理:在全双工通信中,通信系统的每一端都设置了发送器和接收器,并且它们通过独立的传输线路进行连接。这样,发送端可以在发送数据的同时接收来自接收端的数据,而接收端也可以在接收数据的同时发送数据给发送端。

二、特点

  • 双向同时传输:与半双工和单工通信相比,全双工通信的最大特点是可以实现数据的双向同时传输。

  • 高效率:由于可以同时进行数据的发送和接收,全双工通信的带宽利用率较高,数据传输效率也更高。

  • 实时性强:全双工通信能够实现数据的实时双向传输,因此更适用于需要实时交互的应用场景。

三、应用场景

  • 电话通信:电话通信是典型的全双工应用之一。在通话过程中,双方可以实时听到对方的声音,并进行交流。

  • 视频会议:在视频会议中,参与者需要实时看到和听到对方的影像和声音。全双工通信能够确保数据的双向实时传输,从而满足视频会议的需求。

  • 网络数据传输:在高速网络数据传输中,全双工通信能够提高数据传输的效率和稳定性。例如,在以太网中,全双工模式可以支持高达千兆甚至更高的传输速率。

四、实现方式

  • 交换机:交换机是实现全双工通信的重要设备之一。它能够识别连接到交换机各端口上的网络设备的MAC地址,并实现点到点的专用连接。这样,交换机就可以在发送数据的同时接收数据,从而实现全双工通信。

  • 声卡:在音频设备中,声卡也可以实现全双工通信。例如,在录音的同时进行播放声音的工作,或者反之亦然。

五、优缺点

  • 优点

    • 数据传输效率高:由于可以同时进行数据的发送和接收,全双工通信的数据传输效率较高。

    • 实时性强:全双工通信能够实现数据的实时双向传输,适用于需要实时交互的应用场景。

    • 稳定性好:由于采用了独立的传输线路和先进的通信协议,全双工通信的稳定性较好,能够确保数据的可靠传输。

  • 缺点

    • 成本较高:与半双工和单工通信相比,全双工通信需要更多的硬件设备和更复杂的通信协议,因此成本较高。

    • 技术实现复杂:全双工通信需要实现数据的双向同时传输,因此需要更复杂的通信协议和算法来支持。

同步和异步的区别

同步和异步是两种不同的执行方式,它们的主要区别在于程序是否需要等待某个操作完成才能继续执行下一步。以下是同步和异步的详细区别:

一、定义与原理

  1. 同步

    • 同步执行指的是程序按照代码顺序一步一步地执行,必须等待当前操作完成并返回结果后才能执行下一步。

    • 在同步模式下,程序会在执行某个操作时被阻塞,无法做其他事情,直到该操作完成并返回结果后才能继续执行下一步。

  2. 异步

    • 异步执行指的是程序在执行某个操作时不会被阻塞,而是继续执行下一步。

    • 当操作完成后,程序会通过回调函数等方式接收到操作结果,并继续处理后续逻辑。

    • 在异步模式下,程序可以同时处理多个任务,提高了程序的效率和响应性。

二、执行方式

  1. 同步

    • 同步操作通常使用函数调用的方式实现。

    • 在函数调用完成后,程序才能继续执行下一行代码。

  2. 异步

    • 异步操作通常使用事件驱动或回调函数的方式实现。

    • 例如,定时器、网络请求、文件读取等都可以使用异步方式执行。

三、程序状态

  1. 同步

    • 在同步执行过程中,程序的状态是阻塞的,即等待当前操作完成。

  2. 异步

    • 在异步执行过程中,程序的状态是非阻塞的,可以继续执行其他任务。

四、效率与响应性

  1. 同步

    • 由于需要等待当前操作完成才能继续执行下一步,因此同步执行在处理大量数据或长时间运行的任务时可能会导致程序卡顿或崩溃。

  2. 异步

    • 异步执行允许程序同时处理多个任务,因此提高了程序的效率和响应性。

    • 在处理大量数据或长时间运行的任务时,异步执行可以避免程序的卡顿和崩溃。

五、应用场景

  1. 同步

    • 适用于需要精确控制程序执行顺序或保证数据一致性的场景。

    • 例如,在数据库事务处理中,通常需要等待前一个操作完成后再执行下一个操作以确保数据的一致性。

  2. 异步

    • 适用于需要处理大量数据、长时间运行的任务或需要提高程序响应性的场景。

    • 例如,在网络编程中,使用异步方式处理网络请求可以提高程序的响应速度和并发处理能力。

UART帧结构

起始位

串口通信在空闲状态下,系统内默认高电平,所以在数据需要有一个起始位的低电平来告诉接收方:现在有数据要发送过来啦!

数据位(5-8位)

起始位再往后有8个数据位,但具体数据位可以根据我们具体使用来设定,设定范围为5-8位,但是我们一般默认设为8位,8个bit位1个byte,就和char数据类型所占的空间一样

校验位

假设 没有校验位

发送端发送 1,2,3  ;而接收端收到的数据为2,2,3 ,彼此双方都认为自己没有数据错误,那要如何分辨到底谁的数据有误呢,这种情况就很难辨别了。

假设  有校验位

发送端发送 1 、 2、3、6(6为校验位,1+2+3=6),接收方为2,2,3,7(7为校验位2+2+3=7),那此时 发送端 校验位为6 而 接收端校验位为7,此时,接收端可以很快的辨别出自身接受到的数据有误,再对比一下收到的数据,223,和发送端的123,很容易就能对比出哪里有问题。

停止位

置1,接收方接收完数据位后,接收到该停止位1,则可以让系统知道数据接受结束

空闲位

空闲位也是UART协议特有的,因为SPI和IIC协议都是同步通信,而UART为异步通信,同步通信是指收发双方的时钟是完全同步的,而异步通信,收发之间存在时间差,比如发送端发送1秒数据,接收端只接收到0.9秒的数据;假设发送端发送了10秒的数据,而接收端只接受了9秒的数据,会出现累计误差,时间越久,数据的累计误差就会越多,如果没有空闲位的情况下,出现1位数据出错,后面的数据就会全部出错了;为了避免这种情况,出现了空闲位的概念,每1byte数据之间间隔1个空闲位,即使前1byte数据有出现误差,误差的也不会太大,极大的提高了数据的准确性。1

标签:异步,--,入门教程,通信,发送,stm32,传输,全双工,数据
From: https://blog.csdn.net/weixin_61733189/article/details/143164949

相关文章

  • 安装Maven配置以及构建Maven项目(2023idea)
    一、下载Maven绿色软件地址:http://maven.apache.org/download.cgi尽量不要选择最高版本的安装,高版本意味着高风险的不兼容问题,选择低版本后续问题就少。你也可以选择尝试。压缩后:打开后:在该目录下新建mvn-repo文件夹用来存放下载的依赖以及插件等二、配置本地仓库和......
  • 不吹不黑,客观理性深入探讨国产操作系统
    1.题记:本篇博文不吹不黑,客观理性深入探讨国产操作系统。文中数据来自权威的媒体报道。2.国产操作系统现状1.国产主流操作系统有哪些?1.麒麟操作系统:1.银河麒麟:银河麒麟:由天津麒麟信息技术有限公司开发,主要应用于服务器领域,具有高可靠性、高安全性、高扩展性、高......
  • uvm factory机制
    UVM(UniversalVerificationMethodology)是一种用于设计验证的标准方法学。UVM提供了一种基于类的、重用的验证框架,可以简化和加速验证环境和测试用例的开发。UVM使用了一种称为工厂机制(FactoryMechanism)的技术,用于创建和管理各种对象实例。工厂机制允许用户通过使用工厂对......
  • UVM中Seq-Seqr-Drv之间的通信
    Wediscussedsequece_item,sequence,sequencer,anddriverindependently.Inthissection,wewilldiscusshowtheytalkwitheachotherandprovidesequenceitemsfromsequencetodriverviathesequencer.Beforeyoustartreadingthissection,makes......
  • 渗透测试-安全见闻(5)
    声明学习视频来自B站UP主泷羽sec,如涉及侵权马上删除文章。笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。目录X量子物理学及量子计算一、学习方向量子物理学基础量子计算原理与技术传统网络安全知识量子......
  • MacOS 配置Maven
    1.安装Maven·下载MavenMaven官方下载链接如下:Maven–DownloadApacheMaven请根据自己的系统下载对应的Maven安装包。在下载或你习惯的文件夹中新建一个新的文件夹,本人喜欢用命令创建。大家也可自行右击新建文件夹,如下图所示:将apache-maven-3.9.9-bin.tar.gz......
  • C++ set和map的模拟实现
    我们之前在红黑树里讲过,STL容器中的set与map底层就是一棵红黑树,要模拟实现set与map底层需要实现红黑树,并将其做一些改造1.set类与map类的框架1.1setnamespacepc{ template<classK> classset { public://成员函数 private: RBTree<K,K,SetC......
  • js查缺补漏——闭包和单体内置对象Global、Math
    单体内置对象内置对象的概念:不依赖于宿主环境的对象,这些对象在程序之前前就已经存在,不需要再去实例化了。比如Object、Array、String。所以了解一下常用的这两个,Global和Math对象。一、Global对象方法:isNaN(),isFinite(),parseInt(),parseFloat()这些都是Global对象......
  • 在VMware环境下,用PE安装Windows可行吗?
    答案是可行的!而且这种方法还有个很好的地方:绕过Windows11版本在VMware低版本(17版本以下没有Windows11选项的TPM2.0限制)也就是很多小伙伴遇到的:在VMwareWorkstation下安装Windows11LTSC版本出现“这台电脑当前不满足windows11系统要求”,安装中断。”的问题。如果......
  • 由uint8_t USART_RX_BUF[USART_REC_LEN] __attribute__((at(0X20001000)));属性操作引
    在GCC编译器中,除了__attribute__((at(x))),还有许多其他属性可用于控制变量和函数的行为。以下是一些常见的属性及其用途:1.section将变量或函数放置在特定的段中。例如,将变量放在.data段中:intmy_var__attribute__((section(".my_section")));2.aligned指定变......