USART简介:
USART运用分数波特率发生器供给宽规模的波特率挑选。支撑同步单向通讯和半双工单线通讯,也支撑LIN(部分互联网)、智能卡协议、IrDA(红外数据安排)SIR ENDEC规范、调制解调器(CTS/RTS)操作。答应多处理器通讯。运用多级缓冲装备的DMA办法,能够完结高速数据通讯。
USART首要特性:
全双工异步通讯,NRZ规范格局,分数波特率发生器体系(发生和接纳共用的可编程波特率,最高达4.5Mbits/s),8-9位数据长度,1-2位中止位,LIN主发送同步断开符的才干及LIN从检测断开符的才干(当装备成LIN时生成13位断开符,检测10/11位断开符),发送方为同步传输供给时钟,IRDA SIR编解码器(正常形式下支撑3/16位持续时刻),智能卡模仿功用(支撑ISO7816-3规范的异步智能卡协议,用到0.5/1.5个中止位),单线半双工通讯,可装备的运用DMA的多缓冲器通讯(在SRAM里运用集中式DMA缓冲接纳/发送字节),独自的发送器和接纳器使能位,检测标志(接纳缓冲器满,发送缓冲器空,传输完毕标志),校验操控(发送校验位,对接纳数据进行校验),四个过错检测标志(溢出,噪音,帧过错,校验过错),10个带标志中止源(CTS改动,LIN断开符检测,发送数据寄存器空,发送完结,接纳数据寄存器满,检测到总线为闲暇,溢出过错,帧过错,噪音过错,校验过错),多处理器通讯(假如地址不匹配,则进入静默形式),从静默形式中唤醒(经过总线检测和地址标志检测),两种唤醒接纳器的办法(地址位MSB 第9位,总线闲暇)。
USART功用概述:
1、USART双向通讯至少需求两个脚:RX(接纳数据输入)、TX(发送数据输出)。
RX:接纳数据串行输入,经过采样技能来差异数据和噪音,然后康复数据。
TX:发送数据输出,当发送器被制止时,输出引脚康复到它的IO端口装备。当发送器被激活而且不发送数据时,TX引脚处于高电平。在单线和智能卡形式里,此引脚被一同用于数据的发送和接纳。
总线在发送和接纳前应处于闲暇状况,开端位(1个),数据位(1个,8-9位,最低有用位在前),中止位(0.5,1.5,2位,标明数据帧完毕),分数波特率发生器(12位整数和4位小数的标明办法),状况寄存器1个(USART_SR),数据寄存器1个(USART_DR),波特率寄存器1个(USART_BRR,12位整数和4位小数)。一个智能卡形式下的维护时刻寄存器(USART_GTPR)。
2、USART作业于同步形式时,需求一个引脚:CK。
CK:发送器时钟的输出,此引脚输出用于同步传输的时钟。在start和stop位上没有时钟脉冲,软件可选地,能够在最终一个数据位送出一个时钟脉冲。数据能够在RX上同步被接纳。这能够用来操控带移位寄存器的外部设备(例如LCD驱动器),时钟相位和极性都是软件可编程的。在智能卡形式里,CK能够为智能卡供给时钟。
3、USART作业于IRDA形式时,需求两个引脚:IRDA_RDI(数据输入),IRDA_TDO(数据输出)
4、USART作业于硬件流控形式时,需求两个引脚:nCTS,nRTS。
nCTS:铲除发送,若是高电平,在当时数据传输完毕时阻断下一次的数据发送。
nRTS:发送恳求,若是低电平,标明USART准备好承受数据。
USART特性描绘:
字长能够经过编程USART_CR1寄存器中的M位,挑选成8位或许9位。在开端位期间,TX脚处于低电平,在中止位期间处于高电平。
闲暇符号被视为完全由“1”组成的完好的数据帧,后边跟着包括了数据的下一帧的开端位(“1”的位数也包括了中止位的位数)。
断开符号被视为在一个帧周期内悉数接纳到“0”(包括中止位期间,也是“0”)。在断开帧完毕时,发送器再刺进1或2个中止位(“1”)来应对开端位。
发送和接纳由一共用的波特率发生器驱动,当发送器和接纳器的使能别离置位时,别离为其发生时钟。
USART寄存器描绘:
1、USART状况寄存器(USART_SR)
1】地址偏移:0x00,复位值:0x00C0
2】位31-位10:保存位,硬件强制为0
位9:CTS(CTS标志位):在USART4和USART5上不存在这一位。参照上文所述的硬件流形式(USART功用概述里边)。假如设置了“CTSE位”,当nCTS输入改动状况时,该位被硬件置高。由软件将其清零。假如USART_CR3中的CTSIE为“1”,则发生中止。 置为0时,标明nCTS状况线上没有改动,置为1时,标明nCTS状况线上发生改动。
位8:LBD(LIN断开检测标志):当探测到LIN断开时,该位由硬件置“1”,由软件清“0”(向该位写0)。假如USART_CR3中的LBDIE为“1”,则发生中止。 置为0时,标明没有检测到LIN断开,置为1时,标明检测到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是一个无符号的定点数,则12位的值设置在USART_BRR寄存器。补白在写入USART_BRR之后,波特率计数器会被波特率寄存器的值所替换。因而,不要再通讯进行中改动波特率寄存器的数值。
从USART_BRR寄存器得到USARTDIV
例1:若DIV_Mantissa = 27,DIV_Fraction=12(USART_BRR = 0x1BC),则:
Mantissa(USARTDIV) = 27
Fraction(USARTDIV) = 12/16 = 0.75
所以此刻USARTDIV = 27.75
例2:要求USARTDIV = 25.62,则:
DIV_Fraction = 16*0.62 = 9.92,最接近的整数是10 = 0x0A
DIV_Mantissa = mantissa(25.620) = 25 = 0x19
所以USART_BRR = 0x19A
例3:要求USARTDIV = 50.99,则:
DIV_Fraction = 16*0.99 = 15.84,最接近的整数是16 = 0x10 => DIV_frac[3:0]溢出 => 进位有必要加到小数部分。
DIV_Mantissa = mantissa(50.990+进位) = 51 = 0x33
所以USART_BRR = 0x330,USARTDIV = 51
4、操控寄存器1(USART_CR1)
1】地址偏移:0x0C,复位值:0x0000
2】位31-14:保存位,硬件强制为0
位13:UE(USART使能):当该位被清零,在当时字节传输完结后的USART的分频器和输出中止作业,以削减功耗。该位由软件设置和清零。置0时,USART分频器和输出被制止,置1时,USART模块使能。
位12:M(字长):该位界说了数据字的长度,由软件对其设置和清零。置为0时标明一个开端位,8个数据位,n个中止位。置位1时,标明一个开端位,9个数据位,n个中止位。留意在数据传输过程中(发送和接纳时)不能修正这个位。
位11:WAKE(唤醒的办法):该位决议了把USART唤醒的办法,由软件对该位设置和清零。为0时,标明被闲暇总线唤醒,为1时标明被地址符号唤醒。
位10:PCE(查验操控使能):用该位挑选是否进行硬件校验操控(关于发送来说便是校验位的发生,关于承受来说,便是校验位的检测)。当使能了该位,在发送数据的最高位(假如M=1,最高位是第9位,假如M是0,最高位是第8位)刺进校验位。对承遭到的数据查看其查验位。软件对它置“1”或许清“0”,一旦设置了该位,当时直接传输完结后,校验操控才收效。置0时标明制止校验操控,置为1时标明使能校验操控。
位9:PS(校验挑选):当校验操控使能后,该位用来挑选选用偶校验仍是奇校验。软件对它置1或清0.当时字节传输完结后,该挑选收效。置为0时标明为偶校验,置为1时标明为奇校验。
位8:PEIE(PE中止使能):该位由软件设置或铲除。置为0时制止发生中止,置为1时,当USART_SR中的PE为“1”时,发生USART中止。
位7:TXEIE(发送缓冲区空中止使能):该位由如软件设置或铲除。为0时制止发生中止,为1时,当USART_SR中的TXE为“1”时,发生USART中止。
位6:TCIE(发送完结中止使能):该位由软件设置或铲除。置为0时标明制止发生中止,置为1时标明当USART_SR中的ORE或许RXNE为1时,发生USART中止。
位5:RXNEIE(接纳缓冲区非空中止使能):该位由软件设置或铲除,为0时标明制止发生中止,为1时标明当USART_SR中的IDLE为1时,发生USART中止。
位4:IDLEIE(IDLE,总线闲暇中止使能):该位由软件设置或铲除。当为0时标明制止发生中止,为1时当USART_SR中的IDLE为1时,发生USART中止。
位3:TE(发送使能):该位使能发送器,由软件设置或铲除。为0时标明制止发送,为1时标明使能发送。补白在数据传输过程中,除了在智能卡形式下,假如TE位上有个0脉冲(即设置为“0”之后,再设置为“1”),会在当时数据字传输完结后,发送一个前导符(闲暇总线)。别的,在当TE被设置后,在真实的数据发送开端前,有一个比特时刻的推迟。
位2:RE(接纳使能):该位由软件设置或铲除。当设置为0时,制止接纳,当设置为1时,使能接纳并开端搜索RX引脚上的开端位。
位1:RWU(接纳唤醒):该位用来决议是否把USART设置为静默形式。该位由软件设置或铲除,当唤醒序列到来时,硬件也会将其清零。置为0时标明接纳器处于正常作业形式,置为1时,标明接纳器处于静默形式。补白,在把USART置于静默形式(设置RWU位)之前,USART要现已先承受了一个数据字节,否则在静默形式下,不能被闲暇总线检测唤醒。别的当装备为地址符号检测唤醒(wake位 = 1),在RXNE位被置位时,不能用软件修正RWU位。
位0:SBK(发送断开帧):运用该位来发送断开字符,该位能够由软件设置或铲除。操作过程应该是软件设置位,然后再断开帧的中止位时,由硬件将其复位。当该位被设置为0时,标明没有发送断开字符,当设置为1时,标明即将发送断开字符。
5、操控寄存器2(USART_CR2)
1】地址偏移:0x10,复位值:0x0000
2】位31-15:保存位,硬件强制为0;
位14:LINEN(LIN形式使能):该位由软件设置或铲除。设置为0标明制止LIN形式,设置为1标明使能LIN形式。在LIN形式下,能够用USART_CR1寄存器中的SBK位发送LIN断开符(低13位),以及检测LIN同步断开符。
位13-12:STOP(中止位):这两位用来设置中止位的位数。00标明一个中止位,01标明0.5个中止位,10标明2个中止位,11标明1.5个中止位。补白:USART4和USART5不能用0.5中止位和1.5中止位。
位11:CLKEN(时钟使能):用来使能CK引脚。为0时标明制止CK引脚,为1标明使能CK引脚。补白,在USART4和USART5上不存在这一位。
位10:CPOL(时钟极性):在同步形式下,能够用该位挑选SLCK引脚上时钟输出的极性。和CPHA位一同合作来发生需求的时钟/数据采样联系。为0时标明总线闲暇时CK引脚上坚持低电平。为1时标明总线闲暇时CK引脚上坚持高电平。USART4和USART5上不存在这一位。
位9:CPHA(时钟相位):在同步形式下,能够用该位挑选SLCK引脚上时钟输出的相位。和CPOL位一同合作来发生需求的时钟/数据的采样联系。为0时标明在时钟的第一个边缘进行数据捕获,为1时标明在时钟的第二个边缘进行数据捕获。补白在USART4和USART5上不存在这一位。
位8:LBCL(最终一位时钟脉冲):在同步形式下,运用该位来操控是否在CK引脚上输出最终最终那个数据字节(MSB)对应的时钟脉冲。为0时标明最终一位数据的时钟脉冲不从CK输出。为1时标明最终一位数据的时钟脉冲会从CK输出。补白:最终一个数据位便是第8或许第9个发送的位(依据USART_CR1寄存器中的M位所界说的8或9位数据帧格局),在USART4和USART5上不存在这一位。
位7:保存位,硬件强制为0。
位6:LBDIE(LIN断开符检测中止使能):断开符中止屏蔽(运用断开分隔符来检测断开符),为0时标明制止中止,为1时标明只需USART_SR寄存器中的LBD为1就发生中止。
位5:LBDL(LIN断开符检测长度):该位用来挑选是11位仍是10位断开符检测。为0时标明为10位断开符检测,为1时标明为11位的断开符检测。
位4:保存位,硬件强制为0。
位3-0:ADD[3:0]:本设备的USART节点地址。该位域给出本设备USART节点的地址。这是在多处理器通讯下的静默形式中运用的,运用地址符号来唤醒某个USART设备。
3】补白:在使能发送后不能再改写CPOL,CPHA,LBCL三个位。
6、操控寄存器3(USART_CR3)
1】地址偏移:0x14,复位值:0x0000
2】位31-11:保存位,硬件强制为0;
位10:CTSIE(CTS中止使能):为0时制止中止,为1时USART_SR寄存器中的CTS为1时发生中止。补白,在USART4和USART5上不存在这一位。
位9:CTSE(CTS使能):为0时制止CTS硬件流操控,为1时CTS形式使能。只需nCTS输入信号有用(拉成低电平)时才干发送数据。假如在数据传输过程中,nCTS信号变为无效,那么发送完这个数据后,传输就中止下来。假如当nCTS为无效时,往数据寄存器里边写数据,则要比及nCTS有用时才会发送这个数据。补白,在USART4和USART5上不存在这一位。
位8:RTSE(RTS使能):为0时标明制止RTS硬件流操控,为1时标明RTS中止使能,只需承受缓冲区内有空余空间时才恳求下一个数据。当时数据发送完结后,发送操作就需求暂停下来,假如能够承受数据了,将nRTS输出置为有用(拉至低电平)。补白,在USART4和USART5上不存在这一位。
位7:DMAT(DMA使能发送):该位由软件设置或铲除。为0时标明制止发送时的DMA形式,为1时标明为使能发送时的DMA形式。补白,在USART4和USART5上不存在这一位。
位6:DMAR(DMA使能接纳):该位由软件设置或铲除。为0时标明制止接纳时的DMA形式,为1时标明使能接纳时的DMA形式。补白在USART4和USART5上不存在这一位。
位5:SCEN(智能卡形式使能):该位用来设置智能卡形式。为0时标明制止智能卡形式,为1时标明使能智能卡形式。补白在USART4和USART5上不存在这一位。
位4:NACK(智能卡NACK使能):为0时标明校验犯错时,不发送NACK,为1时标明校验过错呈现时,发送NACK。补白,在USART4和USART5上不存在这一位。
位3:HDSEL(半双工挑选):挑选单线半双工形式,为0标明不挑选半双工形式,为1标明挑选半双工形式。
位2:IRLP(红外低功耗):用来挑选一般形式仍是低功耗红外形式。为0时标明为一般形式,为1时标明为低功耗形式。
位1:IREN(红外形式使能):该位由软件设置或清零。为0时标明不使能红外形式,为1时标明使能红外形式。
位0:EIE(过错中止使能):在多缓冲区通讯形式下,当有帧过错,过载或许噪声过错时(USART_SR状况寄存器中的FE=1,或许ORE=1,或许NE=1)发生中止。为0时标明制止中止,为1时标明只需USART_CR3中的DMAR=1,而且USART_SR中的FE=1,或许ORE=1,或许NE=1,则发生中止。
7、维护时刻和预分频寄存器(USART_GPTR)
1】地址偏移:0x18,复位值:0x0000
2】位31-16:保存位,硬件强制为0
位15-8:GT[7:0]:维护时刻值,该位规则了以波特时钟为单位的维护时刻,在智能卡形式下,需求这个功用。当维护时刻曩昔后,才会设置发送完结标志。
位7-0:PSC[7:0]:预分频值。
a、在红外(IRDA)低功耗形式下,PSC[7:0] = 红外低功耗波特率,对体系时钟分频以取得低功耗形式下的频率:源时钟被寄存器中的值(仅有8位有用)分频。00000000:保存-不要写入该值;00000001:对源时钟1分频;00000010:对源时钟2分频。
b、在红外(IRDA)正常形式下,PSC只能设置为00000001
c、在智能卡形式下,PSC[4:0]:预分频值,对体系时钟进行分频,给智能卡供给时钟。寄存器中给出的值(低5位有用)乘以2后,作为对源时钟的分频因子。00000:保存-不要写入该值;00001:对源时钟进行二分频;00010:对源时钟进行4分频;00011:对源时钟进行6分频。。。。补白,在智能卡形式下位[7:5]在智能卡形式下没有意义,UART4和UART5上不存在这一位。