微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32F10xxx架构:通用同步异步收发器USART--USART通用

STM32F10xxx架构:通用同步异步收发器USART--USART通用

时间:11-10 来源:互联网 点击:

LIN断开。

位7:TXE(发送数据寄存器空):当TDR寄存器中的数据被硬件转移到移位寄存器的时候,该位被硬件置位,如果USART_CR1寄存器的TXEIE为1,则产生中断。对USART_DR的写操作,将该位清零。注意在单缓冲器传输中使用该位。 置为0时表示数据还没有被转移到移位寄存器,置为1时,表示数据已经被转移到移位寄存器。

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

位5:RXNE(读数据寄存器非空):当RDR移位寄存器中的数据被转移到USART_DR寄存器中,该位被硬件置位。如果USART_CR1寄存器中的RXNEIE为1,则产生中断。对USART_DR的读操作可以将该位清0。RXNE位也可以通过写0来清除,只有在多缓冲通讯录中才推荐这种清除程序。置为0表示数据没有收到,置为1表示收到数据,且可以读出。

位4:IDLE(检测到总线空闲):当检测到总线空闲时,该位被硬件置位。如果USART_CR1中的IDLEIE为1,则产生中断。由软件序列清除该位(先读USART_SR,然后读USART_DR)。置为0时,表示没有检测到空闲总线,为1时表示检测到空闲总线。备注:IDLE位不会被置高直到RXNE位被置起(即又一次检测到空闲总线)

位3:ORE(过载错误):当RXNE仍然是1的时候,当前被接收在移位寄存器中的数据,需要传送至RDR寄存器时,硬件将该位置位。如果USART_CR1中的RXNEIE为1的话,则产生中断。由软件序列将其清零(先读USART_SR,然后读USART_CR)。置为0时表示没有过载错误,置为1时表示检测到过载错误。备注:如果该位被置位时,RDR寄存器的值不会丢失。但是移位寄存器中的数据会被覆盖。如果设置了EIE位,在多缓冲器通信模式下,ORE标志置位会产生中断。

位2:NE(噪声错误标志):当接收到的帧检测到噪音时,由硬件对该位置位。由软件序列对其清零(先读USART_SR,然后读USART_DR)。置为0时表示没有检测到噪声,置为1时表示检测到噪声。备注:该位不会产生中断,因为它和RXNE一起出现,硬件会在设置RXNE标志时产生中断。在多缓冲区通信模式下,如果设置了EIE位,则设置NE标志时会产生中断。

位1:FE(帧错误):当检测到同步错位,过多的噪声或者检测到断开符,该位被硬件置位,由软件序列将其清零,先读USART_SR,再读USART_DR。为0时表示没有检测到帧错误,为1时表示检测到帧错误或者break符。备注:该位不会产生中断,因为它和RXNE一起出现,硬件会在设置RXNE标志时产生中断。如果当前传输的数据既产生了帧错误,又产生了过载错误,硬件还是会挤出该数据的传输,并且只设置ORE标志位。在多缓冲区通信模式下,如果设置了EIE位,则设置FE标志会产生中断。

位0:PE(校验错误):在接收模式下,如果出现奇偶校验错误,硬件对该位置位。由软件序列对其清零(依次读USART_SR和USART_DR)。在清除PE位前,软件必须等待RXNE标志位被置“1”。如果USART_CR1中的PEIE为“1”,则产生中断。置为0时表示没有奇偶校验错误,置为1时表示存在奇偶校验错误。

2、USART数据寄存器(USART_DR)

1】地址偏移:0x04,复位值:不定

2】位31-9:保留位,硬件强制为0;

位8-0:DR[8:0],数据值。包含了发送和接收的数据。由于它是由两个寄存器组成的,一个给发送用(TDR),一个给接受用(RDR),该寄存器兼具读和写的功能。TDR寄存器提供了内部总线和输出移位寄存器之间的并行接口。RDR寄存器提供了输出移位寄存器和内部总线之间的并行接口。当使能校验位(USART_CR1中的PCE位被置位)进行发送时,写到MSB的值(根据数据长度不同,MSB是第7位或者第8位)会被后来的校验位所取代。当使能校验位进行接收时,读到MSB位时接收到的校验位。

3、波特比率寄存器(USART_BRR)

1】地址偏移:0x08,复位值:0x0000

2】位31-16:保留位,硬件强制置为0;

位15-4:div_Mantissa[11:0],USARTdiv的整数部分。这12位定义了USART分频器除法因子(USARTdiv)的整数部分。

位3-0:div_Fraction[3:0],USARTdiv的小数部分。

分数波特率的产生:

接收器和发送器的波特率在USARTdiv的整数和小数寄存器中的值应设置成相同。

Tx/Rx 波特率 = fck/(16*USARTdiv)

这里的fck是给外设的时钟(PCLK1用于USART2,3,4,5),(PCLK2用于USART1)。

USARTdiv是一个无符号的定点数,

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top