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

小结

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

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

相关推荐
沐欣工作室_lvyiyi1 小时前
基于单片机的蓄电池内阻检测系统设计(论文+源码)
stm32·单片机·嵌入式硬件·物联网·智能家居
电子绿洲1 小时前
三极管恒流源电路
stm32·单片机·嵌入式硬件·硬件工程·信息与通信·智能硬件
新手嵌入式学习2 小时前
单片机理论基础
单片机·嵌入式硬件
柘木木2 小时前
STM32使用UART发送字符串与printf输出重定向
stm32·单片机·嵌入式硬件
国产化嵌入式平台解决方案3 小时前
【服务器主板】定制化:基于Intel至强平台的全新解决方案
嵌入式硬件·intel·服务器主板·至强处理器·定制化
不能只会打代码4 小时前
32单片机从入门到精通之硬件架构——内核与外设(一)
单片机·嵌入式硬件·硬件架构
陌夏微秋6 小时前
STM32单片机芯片与内部47 STM32 CAN内部架构 介绍
数据库·stm32·单片机·嵌入式硬件·架构·信息与通信
7yewh18 小时前
Linux驱动开发 IIC I2C驱动 编写APP访问EEPROM AT24C02
linux·arm开发·驱动开发·嵌入式硬件·嵌入式
上海易硅智能科技局有限公司18 小时前
AG32 MCU 的电机控制方案
单片机·嵌入式硬件
程序员JerrySUN18 小时前
Yocto 项目 - 共享状态缓存 (Shared State Cache) 机制
linux·嵌入式硬件·物联网·缓存·系统架构