【STM32】并、串行通信的区别 串行通信的分类

发布者:CrystalBreeze最新更新时间:2024-04-18 来源: elecfans关键字:STM32  串行通信 手机看文章 扫描二维码
随时随地手机看文章

通信接口背景知识

设备之间通信的方式


一般情况下,设备之间的通信方式可以分成并行通信和串行通信两种。它们的区别是:

并、串行通信的区别

d418a926-abf3-11ed-bfe3-dac502259ad0.png?imageView2/2/w/1000

串行通信的分类

1、按照数据传送方向,分为:

单工:数据传输只支持数据在一个方向上传输;

半双工:允许数据在两个方向上传输。但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;它不需要独立的接收端和发送端,两者可以合并一起使用一个端口。

全双工:允许数据同时在两个方向上传输。因此,全双工通信是两个单工通信方式的结合,需要独立的接收端和发送端。

2、按照通信方式,分为:

同步通信:带时钟同步信号传输。比如:SPI,IIC通信接口。

异步通信:不带时钟同步信号。比如:UART(通用异步收发器),单总线。

在同步通讯中,收发设备上方会使用一根信号线传输信号,在时钟信号的驱动下双方进行协调,同步数据。例如,通讯中通常双方会统一规定在时钟信号的上升沿或者下降沿对数据线进行采样。

在异步通讯中不使用时钟信号进行数据同步,它们直接在数据信号中穿插一些用于同步的信号位,或者将主题数据进行打包,以数据帧的格式传输数据。通讯中还需要双方规约好数据的传输速率(也就是波特率)等,以便更好地同步。常用的波特率有4800bps、9600bps、115200bps等。

在同步通讯中,数据信号所传输的内容绝大部分是有效数据,而异步通讯中会则会包含数据帧的各种标识符,所以同步通讯效率高,但是同步通讯双方的时钟允许误差小,稍稍时钟出错就可能导致数据错乱,异步通讯双方的时钟允许误差较大。

常见的串行通信接口

常见的串行通信接口

d4368158-abf3-11ed-bfe3-dac502259ad0.png?imageView2/2/w/1000

STM32串口通信基础

STM32的串口通信接口有两种,分别是:UART(通用异步收发器)、USART(通用同步异步收发器)。而对于大容量STM32F10x系列芯片,分别有3个USART和2个UART。

UART引脚连接方法

RXD:数据输入引脚,数据接受;

TXD:数据发送引脚,数据发送。

d44d3aa6-abf3-11ed-bfe3-dac502259ad0.png?imageView2/2/w/1000

对于两个芯片之间的连接,两个芯片GND共地,同时TXD和RXD交叉连接。这里的交叉连接的意思就是,芯片1的RxD连接芯片2的TXD,芯片2的RXD连接芯片1的TXD。这样,两个芯片之间就可以进行TTL电平通信了。

d471cbdc-abf3-11ed-bfe3-dac502259ad0.png?imageView2/2/w/1000

若是芯片与PC机(或上位机)相连,除了共地之外,就不能这样直接交叉连接了。尽管PC机和芯片都有TXD和RXD引脚,但是通常PC机(或上位机)通常使用的都是RS232接口(通常为DB9封装),因此不能直接交叉连接。RS232接口是9针(或引脚),通常是TxD和RxD经过电平转换得到的。故,要想使得芯片与PC机的RS232接口直接通信,需要也将芯片的输入输出端口也电平转换成rs232类型,再交叉连接。

经过电平转换后,芯片串口和rs232的电平标准是不一样的:

单片机的电平标准(TTL电平):+5V表示1,0V表示0;

Rs232的电平标准:+15/+13 V表示0,-15/-13表示1。

RS-232通讯协议标准串口的设备间通讯结构图如下: 

d488d7aa-abf3-11ed-bfe3-dac502259ad0.png?imageView2/2/w/1000

所以单片机串口与PC串口通信就应该遵循下面的连接方式:在单片机串口与上位机给出的rs232口之间,通过电平转换电路(如下面图中的Max232芯片) 实现TTL电平与RS232电平之间的转换。

d49ed7c6-abf3-11ed-bfe3-dac502259ad0.jpg?imageView2/2/w/1000

具体要了解RS232串口的,可以查看链接RS232串口简介。

STM32的UART特点

全双工异步通信;

分数波特率发生器系统,提供精确的波特率。发送和接受共用的可编程波特率,最高可达4.5Mbits/s;

可编程的数据字长度(8位或者9位);

可配置的停止位(支持1或者2位停止位);

可配置的使用DMA多缓冲器通信;

单独的发送器和接收器使能位;

检测标志:① 接受缓冲器  ②发送缓冲器空 ③传输结束标志;

多个带标志的中断源,触发中断;

其他:校验控制,四个错误检测标志。

串口通信过程

d4cea0f0-abf3-11ed-bfe3-dac502259ad0.png?imageView2/2/w/1000

STM32中UART参数

串口通讯的数据包由发送设备通过自身的TXD接口传输到接收设备的RXD接口,通讯双方的数据包格式要规约一致才能正常收发数据。STM32中串口异步通信需要定义的参数:起始位、数据位(8位或者9位)、奇偶校验位(第9位)、停止位(1,15,2位)、波特率设置。

UART串口通信的数据包以帧为单位,常用的帧结构为:1位起始位+8位数据位+1位奇偶校验位(可选)+1位停止位。如下图所示:

d4e57852-abf3-11ed-bfe3-dac502259ad0.png?imageView2/2/w/1000

奇偶校验位分为奇校验和偶校验两种,是一种简单的数据误码校验方法。奇校验是指每帧数据中,包括数据位和奇偶校验位的全部9个位中1的个数必须为奇数;偶校验是指每帧数据中,包括数据位和奇偶校验位的全部9个位中1的个数必须为偶数。

校验方法除了奇校验(odd)、偶校验(even)之外,还可以有:0 校验(space)、1 校验(mark)以及无校验(noparity)。0/1校验:不管有效数据中的内容是什么,校验位总为0或者1。

UART(USART)框图

d4fbd5f2-abf3-11ed-bfe3-dac502259ad0.jpg?imageView2/2/w/1000

这个框图分成上、中、下三个部分。本文大概地讲述一下各个部分的内容,具体的可以看《STM32中文参考手册》中的描述。

框图的上部分,数据从RX进入到接收移位寄存器,后进入到接收数据寄存器,最终供CPU或者DMA来进行读取;数据从CPU或者DMA传递过来,进入发送数据寄存器,后进入发送移位寄存器,最终通过TX发送出去。

然而,UART的发送和接收都需要波特率来进行控制的,波特率是怎样控制的呢?

这就到了框图的下部分,在接收移位寄存器、发送移位寄存器都还有一个进入的箭头,分别连接到接收器控制、发送器控制。而这两者连接的又是接收器时钟、发送器时钟。也就是说,异步通信尽管没有时钟同步信号,但是在串口内部,是提供了时钟信号来进行控制的。而接收器时钟和发送器时钟有是由什么控制的呢?

可以看到,接收器时钟和发送器时钟又被连接到同一个控制单元,也就是说它们共用一个波特率发生器。同时也可以看到接收器时钟(发生器时钟)的计算方法、USRRTDIV的计算方法。

这里需要知道一个知识点:

UART1的时钟:PCLK2(高速);

UART2、UART3、UART4的时钟:PCLK1(低速)。

框图的中部分,涉及到UART(USART)的中断控制部分,在后面的文章中会具体介绍到。


关键字:STM32  串行通信 引用地址:【STM32】并、串行通信的区别 串行通信的分类

上一篇:用STM32CubeMx配置定时器
下一篇:STM32F103移植到AT32F403A之MDK(一)

推荐阅读最新更新时间:2026-03-20 07:19

串行通信 软件仿真STM32与74LS164通信
1、串行通信 2、常见的4种串行通信标准 3、对74LS164芯片的介绍 74LS164:串行转并行芯片,内部是1个8位的移位寄存器组成,由8个D触发器组成 缺点是:不带锁存寄存器,移位寄存器移位的过程会表现在164的输出引脚上,容易产生输出干扰。 4、用KEIL4进行软件仿真时,按正常步骤建立工程,然后在下图位置按照下图设置即可。 5、软件仿真:STM32与74LS164进行通信的程序如下: /**************************************************************************************************
[单片机]
<font color='red'>串行通信</font> 软件仿真<font color='red'>STM32</font>与74LS164通信
STM32使用KEIL pack包快速移植LVGL GUI框架实战指南
先展示最终实现的功能效果如下: 1.目的与意义 之前在学习STM32移植LVGL图形库的时候,搜到的很多教程都是在官网下载LVGL的文件包,然后一个个文件包含进去,还要添加路径,还要给文件改名字,最后才能修改程序实现效果,十分繁琐,编译时还容易报错缺少各种文件,而采用KEIL的pack包直接进行移植,则可以直接跳过这些繁琐的环节,直接对文件程序进行修改。 2.LVGL pack包的获取及移植到KEIL-STM32工程上 LVGL pack包下载网址: https://www.keil.arm.com/packs/?q=LVGL&pack-search= 下载之后通过keil的pack installer file im
[单片机]
stm32生成bin文件添加CRC校验到文件末尾
做STM32的IAP升级需要用到BIN文件,为了确保BIN文件正确,于是在BIN文件的末尾增加了CRC校验。 校验值是自动生成的并添加的。 首先是准备工作: 1.下载校验值生成工具 下载后里面的exe文件解压到keil任意的文件下,这里我是放在D:Keil_v5ARMARMCC文件夹内。这个路径 后续需要用到。 2.在你项目的启动文件所在的文件夹内,增加一个bat文件 方法:新建txt文件,然后将下面的内容拷贝进去,最后修改后缀名 内容如下: @echo off ECHO Add CRC32 At the end of the document ECHO ----------------------
[单片机]
STM32 软件复位模拟USB拔插
最近做了个USB跟上位机的通信,需要软件对MCU进行复位,复位后如果USB没有拔插,PC就不会重新枚举USB为了解决这个问题,我做了软件复位跟,软件模拟USB拔插。 1、软件复位 这里我用的是HAL库的软件复位,复位前先把中断关掉,再复位,在你需要复位的代码处添加下面代码即可,代码如下: __set_FAULTMASK(1); //关中断 NVIC_SystemReset(); //复位 2、模拟USB拔插 至于怎么实现模拟USB拔插,则只需要在USB初始化前把PA12进行一个拉低——延时——拉高的操作即可,一般PC机可以通过检查USB的D+引脚来判断USB是否有变化的,对于STM32的PA12就对应了这个引脚(我这
[单片机]
ST更新TouchGFX软件包,功能丰富减少对STM32内存和CPU需求
意法半导体更新了STM32 *微控制器TouchGFX用户界面软件框架,新增功能能够让图形用户界面变得更流畅,动态效果更好,并降低对存储器和CPU的需求。 TouchGFX是STM32生态系统中的一套免费软件工具,包括TouchGFX Designer PC(PC端工具)和TouchGFX Engine(设备端软件)。TouchGFX Designer PC用于设计和配置丰富多彩的用户界面,而TouchGFX Engine则运行在终端设备上,使用户界面实现高性能。最新的4.12版TouchGFX对这两个软件都进行了更新。用户现在可以在单片显示解决方案上构建先进的用户界面,无需外部RAM存储器或闪存,节能特性可以延长电池续航时间
[嵌入式]
在LINUX环境在编译STM32烧写代码
因为最近在移植PixFlow的光流,需要在LINUX下编译32的代码并用JLINK烧写,当然光流代码部分现在还没研究懂。 首先我们需要下载好QT和JLINK工具,编译没什么好说的,就是在QT下代开工程构建即可。 JLINK烧写可以参考下面博客 http://www.cnblogs.com/zjutlitao/archive/2015/12/22/5065322.html 1,SEGGER官网下载最新jlink驱动,网址 https://www.segger.com/downloads/jlink ubuntu下当然选择DEB安装格式,我的机器是32位选择32位的开始下载(不知道系统是x86还是x64的可以在命令行里输入g
[单片机]
在LINUX环境在编译<font color='red'>STM32</font><font color='red'>并</font>烧写代码
STM32串口接收字符串控制LED
串口相关配置 GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
[单片机]
<font color='red'>STM32</font>串口接收字符串<font color='red'>并</font>控制LED
串行通信协议详解 UART IIC SPI 串口-I2C-SPI协议区分对比
我们也可以看一下,UART、IIC和SPI对比表 特性 串口 IIC SPI 通信速率(最大) 230400 bps 400 kbps(快速) 高达72 MHz(主机) 通信线数量 2 根 2 根 4 根 通信距离 短距离 短距离 短距离 通信协议 异步串行 同步串行 同步串行 硬件复杂度 低 中等 中等 软件复杂度 低 中等 中等 主从设备支持 支持(从设备) 支持(主/从设备) 支持(主/从设备) 多设备通信 支持 支持 支持 数据传输完整性 低 高 高 UART其实也是可以进行多设备通信。在多设备通信时,需要使用分时复用技术或者基于协议的多点通信技术。其中分时复用技术将多个设备连接到同一串口,通过
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved