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进制相加,即可求出结果。

小结

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

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

相关推荐
国科安芯3 小时前
ASP4644芯片低功耗设计思路解析
网络·单片机·嵌入式硬件·安全
充哥单片机设计3 小时前
【STM32项目开源】基于STM32的智能厨房火灾燃气监控
stm32·单片机·嵌入式硬件
CiLerLinux10 小时前
第四十九章 ESP32S3 WiFi 路由实验
网络·人工智能·单片机·嵌入式硬件
时光の尘10 小时前
【PCB电路设计】常见元器件简介(电阻、电容、电感、二极管、三极管以及场效应管)
单片机·嵌入式硬件·pcb·二极管·电感·三极管·场效应管
Lu Zelin10 小时前
单片机为什么不能跑Linux
linux·单片机·嵌入式硬件
宁静致远202111 小时前
stm32 freertos下基于hal库的模拟I2C驱动实现
stm32·嵌入式硬件·freertos
Wave84515 小时前
STM32--智能小车
stm32·单片机·嵌入式硬件
wdfk_prog18 小时前
[Linux]学习笔记系列 -- lib/timerqueue.c Timer Queue Management 高精度定时器的有序数据结构
linux·c语言·数据结构·笔记·单片机·学习·安全
helesheng20 小时前
用低成本FPGA实现FSMC接口的多串口(UART)控制器
stm32·fsmc·fpga·uart控制器
充哥单片机设计21 小时前
【STM32项目开源】基于STM32的智能家居环境(空气质量)检测系统
stm32·单片机·嵌入式硬件