这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【转载】STM32串口通信及实验--from毅

共2条 1/1 1 跳转至

【转载】STM32串口通信及实验--from毅

工程师
2026-05-19 15:23:17     打赏

通信接口背景知识

设备之间的通信方式

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

串行通信的分类

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

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

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

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

image.png



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

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

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

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

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

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

常见的串行通信接口

STM32串口通信基础

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

UART引脚连接方法:

RXD:数据输入引脚,数据接收

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

image.png


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

image.png

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

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

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

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

RS232通信协议标准串口的设备间通信结构如下:

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

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


STM32的UART特点:


全双工异步通信

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

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

可配置的停止位(支持1位或者2两位或者0.5或者1.5位)

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

检测标志:1、接收缓冲器 2、发送缓冲器 3、传输结束标志

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

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

串口通信过程

image.png

STM32中UART参数

串口通信的数据包 由发送设备通过自身的TXD接口传输到接收设备的RXD接口,通信双方的数据包格式要规约一致才能正常收发数据。

STM32中串口异步通信需要定义的参数:起始位,数据位(8位或者9位),奇偶校验位,停止位,波特率设置

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

image.png

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


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

这个框图分成上中下三个部分。


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


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


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


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


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


USART1的时钟:PCLK2(高速)

USART2、USART3、UART4、UART5的时钟:PCLK1(低速)

串口通信实验

实现串口发送数据到上位机以及上位机发送数据到串口后接收到数据,并立马发送回上位机,以及通过发送的信息,控制RGB灯。


首先讲解的是USART的接发通信实验


编程要点

使能RX和TX引脚GPIO时钟和USART时钟

初始化GPIO,并将GPIO复用到USART上

配置USART参数

配置中断控制器并使能USART接收中断

使能USART

在USART接收中断服务函数实现数据接收和发送

来源: 整理文章为传播相关技术,网络版权归原作者所有,如有侵权,请联系删除。
















院士
2026-05-19 16:20:19     打赏
2楼

学习了,谢谢分享。


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]