STM32第十二节(中级篇):串口通信(第一节)——功能框图讲解

前言

我们在51单片机中就已经学习过了串口通信的相关知识点,那么我们现在在32单片机上进一步学习通信的原理。我们主要讲解串口功能框图以及串口初始化结构体以及固件库讲解。

STM32第十二节(中级篇):串口通信(第一节)------功能框图讲解


URAST框图:分为四个部分,分别是引脚,数据寄存器,控制器,波特率。

引脚介绍

TX:数据发送;

RX:是数据接收;

SCLK:时钟,仅同步通信时使用;

nRTS:请求发送(Request To Send);

nCTS :允许发送(Clear To Send)。

引脚必然会对应相对应的GPIO口,我们所学的指南者所对应的GPIO引脚就在下面了,我们发现USART1挂载在APB2总线上,剩下的都在APB1总线上,我们要注意写代码的时候要打开APB1以及APB2总线的时钟。

数据寄存器

数据寄存器-USART DR:

9位有效,包含一个发送数据寄存器TDR和一个接收数据寄存器RDR。一个地址对应了两个物理内存。我们通过观察USART_DR的前九位,是由控制寄存器(USART_CH1以及USART_CR2)所控制的。

字长M:

在由控制寄存器USART_CH1的13位是M(字长),控制着数据字的长度,由软件对其设置和清零。

0:一个起始位,8个数据位,n个停止位:

1:一个起始位,9个数据位,n个停止位。

注意:在数据传输过程中(发送或者接收时),不能修改这个位。

停止位(STOP):

我们观察上图发现,在启动位之后会有数据帧,数据传输结束后会有停止位(STOP);而停止位由控制寄存器USART_CH2决定。

STOP:停止位(STOP bits)这2位用来设置停止位的位数

00:1个停止位;

01:0.5个停止位;

10:2个停止位;

11:1.5个停止位;

注:UART4和UART5不能用0.5停止位和1.5停止位。

可能的奇偶校验位:

位10:

PCE:检验控制使能(Parity control enable)

用该位选择是否进行硬件校验控制(对于发送来说就是校验位的产生;对于接收来说就是校验位的检测)。当使能了该位,在发送数据的最高位(如果M=1,最高位就是第9位;如果M=0,最高位就是第8位)插入校验位;对接收到的数据检查其校验位。软件对它置"1或清0'。一旦设置了该位,当前字节传输完成后,校验控制才生效。

0:禁止校验控制:

1:使能校验控制。

位9:

PS:校验选择(Parity selection)

当校验控制使能后,该位用来选择是采用偶校验还是奇校验。软件对它置"1或清0'。当前字节传输完成后,该选择生效。

0:偶校验:

1:奇校验

位8:

PEIE: PE中断使能(PE interrupt enable)该位由软件设置或清除。

0:禁止产生中断:

1:当USART_SR中的PE为'1'时,产 生USART中断。

数据发送和接收具体的流程:

我们一步步来,

UE:USART使能(USART enable)

当该位被清零,在当前字节传输完成后USART的分频器和输出停止工作,以减少功耗。该位由软件设置和清零。

0:USART分频器和输出被禁止;

1:USART模块使能。

TE:发送使能(Transmitter enable)

该位使能发送器。该位由软件设置或清除。

0:禁止发送;

1:使能发送

注意:

1.在数据传输过程中,除了在智能卡模式下,如果TE位上有个0脉冲(即设置为'0'之后再设置为'1'),会在当前数据字传输完成后,发送一个"前导符"(空闲总线)。

2.当TE被设置后,在真正发送开始之前,有一个比特时间的延迟。

RE:接收使能(Receiver enable)

该位由软件设置或清除。

0:禁止接收;

1:使能接收,并开始搜寻RX引脚上的起始位。

通过观察功能框图,我们发现具体的流程为:

发送数据:
UE=1;TE=1

而数据从CPU或DMA从内存里读取来,然后就会。放到发送数据寄存器(TDR)中,然后转交给发送移位寄存器,然后八位数据一位一位的通过串行的方式传输到TX引脚,表示发送完成。

在这个过程中,有两个寄存器的位会改变,在TDR中,TXE为空.

TXE:发送数据寄存器空(Transmit data register empty)

当TDR寄存器中的数据被硬件转移到移位寄存器的时候,该位被硬件置位。如果USARTCR1寄存器中的TXEIE为1,则产生中断。对USARTDR的写操作,将该位清零。

0:数据还没有被转移到移位寄存器:

1:数据已经被转移到移位寄存器。

注意:单缓冲器传输中使用该位。

TC:发送完成(Transmission complete)

当包含有数据的一帧发送完成后,并且TXE=1时,由硬件将该位置"1'。如果USARTCR1中的TCIE为"1',则产生中断。由软件序列清除该位(先读USART SR,然后写入USART_DR)。TC位也可以通过写入0'来清除,只有在多缓存通讯中才推荐这种清除程序。

0:发送还未完成:

1:发送完成。

接收数据:
UE=1;RE=1

相反的,接收数据就是先从RX(GPIO口)进入数据,然后转到接收移位寄存器中,再到接收数据寄存器(RDR)中,同时也有位的改变(标志位):

RXNE:读数据寄存器非空(Read data register not empty)

当RDR移位寄存器中的数据被转移到USART DR寄存器中,该位被硬件置位。如果USART CR1寄存器中的RXNEIE为1,则产生中断。对USART DR的读操作可以将该位清RXNE位也可以通过写入0来清除,只有在多缓存通讯中才推荐这种清除程序。

0:数据没有收到;

1:收到数据,可以读出。

控制器(USART_CRx(1,2,3))

熟读手册即可,手册可在官网中找到:

野火手册下载https://doc.embedfire.com/products/link/zh/latest/index.html

波特率

USART BRR:波特率寄存器。

以下是波特率计算公式:

为了计算出USARTDIV,我们需要知道时钟配置为72M还是别的,然后根据给定的波特率即可计算出USARTDIV的值,计算结果分为整数和小数两个部分,分开计算,小数部分要乘以16达到所计算的值。最后以16进制相加,即可求出结果。

小结

本节课讲了关于功能框图的讲解,细致的展现了从寄存器到固件库的讲解,下节课将继续代码部分的实操。

创作不易,点个三连支持一下吧!

相关推荐
LateBloomer7772 小时前
FreeRTOS——信号量
笔记·stm32·学习·freertos
wenchm2 小时前
细说STM32单片机DMA中断收发RTC实时时间并改善其鲁棒性的另一种方法
stm32·单片机·嵌入式硬件
编码追梦人4 小时前
如何实现单片机的安全启动和安全固件更新
单片机
电子工程师UP学堂4 小时前
电子应用设计方案-16:智能闹钟系统方案设计
单片机·嵌入式硬件
飞凌嵌入式4 小时前
飞凌嵌入式T113-i开发板RISC-V核的实时应用方案
人工智能·嵌入式硬件·嵌入式·risc-v·飞凌嵌入式
blessing。。5 小时前
I2C学习
linux·单片机·嵌入式硬件·嵌入式
嵌新程7 小时前
day03(单片机高级)RTOS
stm32·单片机·嵌入式硬件·freertos·rtos·u575
Lin2012307 小时前
STM32 Keil5 attribute 关键字的用法
stm32·单片机·嵌入式硬件
电工小王(全国可飞)7 小时前
STM32 RAM在Memory Map中被分为3个区域
stm32·单片机·嵌入式硬件
maxiumII7 小时前
Diving into the STM32 HAL-----DAC笔记
笔记·stm32·嵌入式硬件