历史上的今天
返回首页

历史上的今天

今天是:2025年03月13日(星期四)

正在发生

2019年03月13日 | 【STM32】串口通信基本原理(超基础、详细版)

2019-03-13 来源:eefocus

STM32F1xx官方资料:


《STM32中文参考手册V10》-第25章通用同步异步收发器(USART)


 


通信接口背景知识

设备之间通信的方式

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


并、串行通信的区别

  并行通信 串行通信

传输原理 数据各个位同时传输 数据按位顺序传输

优点 速度快 占用引脚资源少

缺点 占用引脚资源多 速度相对较慢

串行通信的分类

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


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

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

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



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


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

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

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


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


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


常见的串行通信接口

 


常见的串行通信接口

通信标准 引脚说明 通信方式 通信方向

UART


(通用异步收发器)


TXD:发送端


RXT:接收端


GND:共地


异步通信 全双工

1-wire


(单总线)


DQ:发送/接收端 异步通信 半双工

SPI

SCK:同步时钟


MISO:主机输入,从机输出


MOSI:主机输出,从机输入


同步通信 全双工

I2C

SCK:同步时钟


SDA:数据输入/输出端


同步通信 半双工

 


STM32串口通信基础

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


UART引脚连接方法

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

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



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



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


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


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

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

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



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



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


STM32的UART特点

全双工异步通信;

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

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

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

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

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

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

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

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

 


串口通信过程



STM32中UART参数

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


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



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


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


UART(USART)框图



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


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


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


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


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


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


UART1的时钟:PCLK2(高速);

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

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

推荐阅读

史海拾趣

EDAL公司的发展小趣事

为了进一步巩固市场地位和提升技术实力,EDAL公司开始通过收购和合作的方式拓展业务。公司成功收购了几家在EDA领域具有领先地位的公司,获得了更多的技术专利和市场份额。此外,EDAL公司还与其他科技公司建立了战略合作关系,共同研发新技术、新产品,推动整个EDA行业的发展。

EOZ Secme公司的发展小趣事

EOZ Secme深知人才是企业发展的核心动力。因此,公司高度重视人才的培养和引进。通过设立研发中心、提供优厚的福利待遇等方式,EOZ Secme吸引了大量优秀人才加入。同时,公司还建立了完善的培训体系,不断提升员工的技能和素质。这些措施为EOZ Secme的持续发展提供了有力的人才保障。

ES Systems公司的发展小趣事

ES Systems在创立初期主要面向高端市场提供定制化服务。然而,随着市场竞争的加剧和客户需求的变化,公司意识到必须调整市场策略。于是,ES Systems开始加大在中低端市场的投入,推出了一系列性价比高的产品。这一策略的调整使得公司的市场份额迅速扩大,同时也提高了品牌知名度。

ENTRELECUK公司的发展小趣事

ENTRELEC UK深知品质对于企业的重要性,因此公司始终坚持严格的质量管理体系。从原材料采购到产品制造,再到售后服务,每一个环节都经过严格把关。这种对品质的执着追求使ENTRELEC UK赢得了客户的信任和好评。公司还建立了完善的客户服务体系,确保客户在使用产品过程中得到及时、有效的支持。

FOCI Fiber Optic Communications Inc公司的发展小趣事

在电子行业的早期,ENTRELEC UK以其创新的接触器设计在市场中脱颖而出。随着技术的进步,公司不断研发新产品,如过载继电器和电动机保护开关,这些产品迅速获得了市场的认可。公司通过持续的研发投入,确保产品始终走在行业前沿,为客户提供更安全、更可靠的解决方案。

上海晶岳(AFSEMI)公司的发展小趣事

随着移动互联网的快速发展,晶岳电子敏锐地捕捉到了移动终端支付芯片市场的潜力。2016年,公司推出了具有自主知识产权的移动终端支付芯片,以及过压保护芯片和充电管理IC系列产品。这一创新举措不仅使晶岳电子成功拓展了新的市场领域,也进一步提升了公司在行业内的知名度和影响力。同时,公司还加强了与移动支付平台的合作,共同推动移动支付技术的发展和应用。

问答坊 | AI 解惑

wince6.0 通过USB连接打印机问题

wince6.0 通过USB连接打印机时,当打印机连接上怎么去自动识别连接状态呢?…

查看全部问答>

memset与 变量定义时初始化的 区别

unsigned char pDATA[8]; memset(pDATA,0 ,8); 如果直接在定义处初始化为0,与memset的区别是 什么?…

查看全部问答>

CE 下字符显示加速问题

请问: 在WINCE 下的驱动里,怎样加速显示字符。??????…

查看全部问答>

有没有人做过CAN的项目?比如CAN转换,混合

有没有人做过CAN的项目?比如CAN转换,混合…

查看全部问答>

利用SOCKET通讯到WINCE如何保存文件

我用EVC4写了个SOCKET通讯的程序,与计算机通讯,连接和接收都很正常,可能保存文件的路径不对,所以文件保存不了.所以请问大家,在WINCE下可用的路径是什么. 目前用的开发板是三星ARM2410,保存的路径是ResidentFlash…

查看全部问答>

求教一个关于mdk下载的问题!!很奇怪 的flash err

Contents missmatch at: 0000012FH  (Flash=40H  Required=47H) ! 程序在keil4下下载,编译与链接都没有问题,但是,下载到8962开发板过程中,出现了这个问题: 提示说是:flash err Contents missmatch at: 00000134H  ...…

查看全部问答>

430的位操作有什么简单方法?

我刚接触430单片机,总觉得位操作太麻烦,我要置位或清零,需要两种不同的头文件,且占用的程序空间比较大,在判断位时,也很麻烦,总要先读到CPU寄存器中,才能判断,否则就改变了该位所在的RAM的值。 其它单片机,如51,PIC都有专门的位操作,很 ...…

查看全部问答>

求教5509外扩SDRAM,谢谢

我使用的VC5509,硬件仿真器为XDS510,在做外扩SDRAM的时候,写不进去数据。请教各位帮忙解决,谢谢 报错如下: Trouble Reading Memory Block at 0x6005 on Page 1 of Length 0x1: Error 0x80000002/-1143 Fatal Error during: Memory, The ...…

查看全部问答>

如何生成一个集成库并且实现对库的管理

想要知道如何生成一个集成库并且实现对库的管理吗?请见 pdf …

查看全部问答>

15F104E应用之三:定时器产生延时通7秒断13秒程序

15F104E应用之三:定时器产生延时通7秒断13秒程序…

查看全部问答>