很多朋友对简述什么是工作分析,UART是什么串口工作过程分析不是很了解,六月小编刚好整理了这方面的知识,今天就来带大家一探究竟。一、什
很多朋友对简述什么是工作分析,UART是什么串口工作过程分析不是很了解,六月小编刚好整理了这方面的知识,今天就来带大家一探究竟。
一、什么是UARTUART即通用异步接收器/发送器(Universal Asynchronous Receiver/Transmitter),通常简称UART,是一种异步收发发送器,是设备间进行异步通信的关键模块。 UART负责处理数据总线与串口之间的串/并、并/串转换,并规定帧格式;只要通信双方采用相同的帧格式和波特率,就可以不共享时钟信号进行通信。
通信过程只需要两条信号线(Rx和Tx)即可完成,因此也称为异步串行通信。如果加上合适的电平转换器,如SP3232E、SP3485,UART也可用于RS-232、RS-485通讯,或与电脑端口连接。
UART应用广泛,手机、工控、PC等应用中都使用了UART。UART 使用异步、串行通信。
串行通信是指使用传输线逐位顺序传输数据。特点是通讯线路简单,使用一根简单的电缆即可实现通讯,降低了成本。
适用于远距离通信,但传输速度较慢的应用。异步通信以一个字符为传输单位,通信中两个字符之间的时间间隔或多或少是固定的,但同一字符中相邻两个位的时间间隔是固定的。
数据传输速率由波特率表示,它是每秒传输的二进制位数。例如数据传输速率为120个字符/秒,每个字符为10位(1个起始位,7个数据位,1个校验位,1个结束位),那么它传输的波特率为10120=1200个字符/秒=1200 波特。
数据通信格式如下:各位的含义如下: 起始位:先发送一个逻辑“0”信号,表示传输字符的开始。数据位:可以是58位逻辑“0”或“1”。
如ASCII码(7位)、扩展BCD码(8位)。小端传输校验位:数据位加上该位后,“1”的个数应为偶数(偶校验)或奇数(奇校验) 停止位:是一个字符数据的结束标志。
它可以是1 位、1.5 位或2 位的高电平。空闲位:处于逻辑“1”状态,表示当前线路上没有数据传输。
注意:异步通信是按字符传输的,接收设备只要在收到起始信号后一个字符的传输时间内能与发送设备保持同步就可以正确接收。下一个字符起始位的到来重新校准同步(依靠起始位的检测实现发送方和接收方时钟的自同步)综上所述,如果我们要配置串口通信,至少要设置几个参数:字长(即一次传输的数据长度)、波特率(即每次传输的数据位数)第二)、奇偶校验位和停止位。
二、串口工作过程分析USART 是通用同步/异步收发器UART 是Universal Asynchronous Receiver 接收器由于常用的是异步方式,这里我们只需要使用UART即可。下面先介绍一下串口传输的过程。
我们先看一下串口架构图:可见,串口外设的架构图乍一看有点复杂。这里我们分别分析一下:让我们直接从发送(TX) 和接收(RX) 开始。
RX和TX这里就不过多介绍了。根据下图中的红色箭头标记可以看出,接收时,经过编解码模块,然后直接进入接收移位寄存器。
接收移位寄存器逐位接收数据,然后将接收到的数据一次写入接收数据寄存器(RDR),这样CPU就可以通过读取接收数据寄存器(RDR)来读取接收到的数据。同样,对于发送,CPU向发送数据寄存器(TDR)写入数据,发送数据寄存器(TDR)一次性将数据发送到发送移位寄存器,然后根据波特率逐位发送数据速度。
删除。如下所示:我们知道发送和接收必须事先确定波特率,那么波特率是怎么配置的呢?我们继续沿着箭头往下看:根据上图不难看出,波特率是由发送控制器和接收控制器分别控制发送时钟和接收时钟,然后传送到发送移位寄存器和接收移位寄存器登记。
从上图我们也可以看出,发送端时钟和接收端时钟来自同一个单元。现在我们来分析一下这两个时钟是如何产生的。
上面说了,波特率实际上就是每秒传输的二进制位数,可以通过控制时钟来改变波特率。我们向波特率寄存器(上图中的USART_BRR)写入参数,修改串口时钟的分频值USARTDIV。
USART_BRR寄存器包括两部分:DIV_Mantissa(即USARTDIV的整数部分)和DIV_Fraction(即USARTDIV的小数部分)。计算公式为:USARTDIV=DIV_Mantissa+(DIV_Fraction/16)。
波特率的计算公式如下:我们只要知道USARTDIV的值,就可以知道串口波特率寄存器的值。举个简单的例子:假设串口1要设置的波特率为115200,PLCK2的时钟频率为72MHz。
根据上面的公式,我们可以得到:USARTDIV=72000000/(16*115200)=39.0625由此我们可以得到DIV_Fraction=16*0.0625=1=0x01;DIV_Mantissa=39=0x27。由于USARTDIV对串口外设的时钟源进行分频,不同的USART挂载的总线不同,因此其时钟源fPCLK也不同。
USART1挂载在APB2总线上,其时钟源为fPCLK2; USART2、3、4、5挂在APB1上,时钟源为fPCLK1。串口时钟源经过USARTDIV分频输出,分别作为发送时钟和接收时钟,控制发送和接收的时序。
三、程序解析首先,我们打开iBox开发板的例程USART_DEMO,在左侧工程目录中找到USER工程文件夹,点击前面的“+”,找到main.c文件并打开。我们可以看到在main函数上面有一个fputc(intch, FILE *f)函数。
该函数的作用是向文件中写入一个字符。它的参数包括:Ch中要写入的字符; *f 指向FILE 结构的指针。
接下来我们看一下main函数:上图中的两行代码分别是定义GPIO结构和定义USART结构。上面的函数是开启APB2总线上的串口时钟,同时启动GPIOA口。
上图中的代码是GPIO口的配置。它的配置方法在第三讲中有提到,我们可以看到它配置的是PA9口。
因为PA9口也是USART1_TX,也就是串口的发送数据口。上图中的代码是PA10口的配置。
因为PA10口也是USART1_RX,也就是串口的接收数据口。我们看一下GPIO的工作模式: GPIO_Pin_9的工作模式为复用推挽输出; GPIO_Pin_10 工作模式为浮空输入。
我们可以在STM32参考手册的GPIO配置中找到USART的配置,如下表所示:我们的工作模式是全双工的,所以根据表格配置对应的GPIO口工作模式,分别为复用推挽输出和浮空输入。下一步是初始化和配置串口。
如图所示我们逐行分析。在此之前,我们可以在工程目录下找到stm32f10x_usart.h(可以在main.c下找到,因为我们的main函数中包含这个库函数),也就是USART库函数。
我们可以在最底部找到许多函数声明。我们可以在用户手册中找到这些功能的说明,大家可以有个大概的了解。
我们继续浏览stm32f10x_usart.h库函数,可以找到typedef结构体,如下图(为了方便截图,这里已经隐藏了注释):我们可以发现,我们程序中需要配置的USART相关参数都在这里声明了。不仅如此,继续向下滚动还可以找到所需配置的相关参数(因为代码略多,这里就不截图了,读者可以自行查看)。
uint32_t USART_BaudRate:该成员设置USART传输的波特率。uint16_t USART_WordLength:表示一帧中传输或接收的数据位数。
可能的值有:USART_WoedLength_8b(8位数据)和USART_WoedLength_9b(9位数据)。uint16_t USART_StopBits:帧结束时传输的停止位。
它被定义为USART_StopBits_0.5(0.5 个停止位)、USART_StopBits_1(1 个停止位)、USART_StopBits_1.5(1.5 个停止位)、USART_StopBits_2(2 个停止位)。uint16_t USART_Parity:奇偶校验位。
定义为USART_Parity_No(未使用)、USART_Parity_Even(偶数模式)、USART_Parity_Odd(奇数模式)。uint16_t USART_Mode:指定启用或禁用发送和接收模式。
它定义为:USART_Mode_Rx(接收使能),USART_Mode_Tx(发送使能)。 uint16_t USART_HardwareFlowControl:指定是启用还是禁用硬件流控模式。
定义为:USART_HardwareFlowControl_RTS(发送请求RTS使能),USART_HardwareFlowControl_CTS(清除发送CTS使能),USART_HardwareFlowControl_RTS_CTS(RTS和CTS使能)。USART_Clock、USART_CPOL、USART_CPHA、USART_LastBit只需要在同步模式下配置,这里不再赘述。
知道了这些,初始化和配置串口就非常容易了。我们回到main函数,观察几行串口初始化和配置的代码:上面的代码是设置波特率为115200。
上述代码将数据位数定义为8位数据。上面的代码设置了一个在帧末尾发送的停止位。
上面的代码设置为不使用奇偶校验。上面的代码设置了硬件流控模式不使用。
上面的代码定义了发送和接收模式:启用发送和启用接收。上面两行代码,第一行初始化串口,第二行开启串口。
最后,我们循环打印“USART Printf Example: retarget the C library printf function to the USART”。接下来我们观察实验现象:先将程序烧录到iBox中,然后使用USB转TTL串口工具将iBox连接到电脑上,如下图:iBox的J12接口从左到右依次为:TX、RX、GND(注意:我们没有给iBox接电源,iBox需要单独供电)。
接下来,我们打开串口助手。如上图:首先,我们需要根据自己的程序配置串口(不同的助手界面可能不同)。
设置好参数后,我们将程序烧录到iBox中,观察串口助手。
以上就是关于简述什么是工作分析,UART是什么串口工作过程分析的知识,希望能够帮助到大家!
声明本站所有作品图文均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系我们