USART串口的一般应用文档格式.docx

上传人:b****6 文档编号:20166812 上传时间:2023-01-17 格式:DOCX 页数:49 大小:283.14KB
下载 相关 举报
USART串口的一般应用文档格式.docx_第1页
第1页 / 共49页
USART串口的一般应用文档格式.docx_第2页
第2页 / 共49页
USART串口的一般应用文档格式.docx_第3页
第3页 / 共49页
USART串口的一般应用文档格式.docx_第4页
第4页 / 共49页
USART串口的一般应用文档格式.docx_第5页
第5页 / 共49页
点击查看更多>>
下载资源
资源描述

USART串口的一般应用文档格式.docx

《USART串口的一般应用文档格式.docx》由会员分享,可在线阅读,更多相关《USART串口的一般应用文档格式.docx(49页珍藏版)》请在冰豆网上搜索。

USART串口的一般应用文档格式.docx

接口通过三个引脚与其他设备连接在一起。

任何USART双向通信至少需要两个脚:

接收数据输入(RX)和发送数据输出(TX)。

RX:

接收数据串行输。

通过过采样技术来区别数据和噪音,从而恢复数据。

TX:

发送数据输出。

当发送器被禁止时,输出引脚恢复到它的I/O端口配置。

当发送器被激活,并且不发送数据时,TX引脚处于高电平。

在单线和智能卡模式里,此I/O口被同时用于数据的发送和接收。

1.在异步模式中:

1》总线在发送或接收前应处于空闲状态

2》一个起始位

3》一个数据字(8或9位),最低有效位在前

4》0.5,1.5,2个的停止位,由此表明数据帧的结束

5》使用分数波特率发生器——12位整数和4位小数的表示方法

6》一个状态寄存器(USART_SR)

7》数据寄存器(USART_DR)

8》一个波特率寄存器(USART_BRR),12位的整数和4位小数

9》一个智能卡模式下的保护时间寄存器(USART_GTPR)

2.在同步模式中

需要用到SCLK引脚:

发送器时钟输出。

此引脚输出用于同步传输的时钟,(在Start位和Stop位上没有时钟脉冲,软件可选地,可以在最后一个数据位送出一个时钟脉冲)。

数据可以在RX上同步被接收。

这可以用来控制带有移位寄存器的外部设备(例如LCD驱动器)。

时钟相位和极性都是软件可编程的。

在智能卡模式里,SCLK可以为智能卡提供时钟。

3.在IrDA模式里需要下列引脚:

1》IrDA_RDI:

IrDA模式下的数据输入。

2》IrDA_TDO:

IrDA模式下的数据输出。

4.硬件流控模式中需要下列引脚在:

1》nCTS:

清除发送,若是高电平,在当前数据传输结束时阻断下一次的数据发送。

2》nRTS:

发送请求,若是低电平,表明USART准备好接收数据

4.1.3发送器

发送器根据M位的状态发送8位或9位的数据字。

当发送使能位(TE)被设置时,使能USART同步串口,这时发送移位寄存器中的数据在TX脚上输出,相应的时钟脉冲在SCLK脚上输出。

字符发送在TX引脚上首先移出数据的最低有效位。

每个字符之前都有一个低电平的起始位;

之后跟着的停止位,其数目可配置。

注意:

1.在数据传输期间不能复位TE位,否则将破坏TX脚上的数据,因为波特率计数器停止计数。

正在传输的当前数据将丢失。

2.TE位被激活后将发送一个空闲帧。

4.1.3.1可配置的停止位

随每个字符发送的停止位的位数可以通过控制寄存器2的位13、12进行编程。

1.1个停止位:

停止位位数的默认值。

2.2个停止位:

可用于常规USART模式、单线模式以及调制解调器模式。

3.0.5个停止位:

在智能卡模式下接收数据时使用。

4.1.5个停止位:

在智能卡模式下发送数据时使用。

空闲帧包括了停止位。

断开帧是10位低电平,后跟停止位(当m=0时);

或者11位低电平,后跟停止位(m=1时)。

不可能传输更长的断开帧(长度大于10或者11位)。

配置步骤:

1.通过在USART_CR1寄存器上置位UE位来激活USART

2.编程USART_CR1的M位来定义字长。

3.在USART_CR2中编程停止位的位数。

4.如果采用多缓冲器通信,配置USART_CR3中的DMA使能位(DMAT)。

按多缓冲器通信中的描述配置DMA寄存器。

5.设置USART_CR1中的TE位,发送一个空闲帧作为第一次数据发送。

6.利用USART_BRR寄存器选择要求的波特率。

7.把要发送的数据写进USART_DR寄存器(此动作清除TXE位)。

在只有一个缓冲器的情况下,对每个待发送的数据重复步骤7。

4.1.3.2单字节通信

清零TXE位总是通过对数据寄存器的写操作来完成的。

TXE位由硬件来设置,它表明:

1.数据已经从TDR移送到移位寄存器,数据发送已经开始

2.TDR寄存器被清空

3.下一个数据可以被写进USART_DR寄存器而不会覆盖先前的数据

如果TXEIE位被设置,此标志将产生一个中断。

如果此时USART正在发送数据,对USART_DR寄存器的写操作把数据存进TDR寄存器,并在当前传输结束时把该数据复制进移位寄存器。

如果此时USART没有在发送数据,处于空闲状态,对USART_DR寄存器的写操作直接把数据放进移位寄存器,数据传输开始,TXE位立即被置起。

当一帧发送完成时(停止位发送后),TC位被置起,并且如果USART_CR1寄存器中的TCIE位被置起时,中断产生。

先读一下USART_SR寄存器,再写一下USART_DR寄存器,可以完成对TC位的清零。

TC位也可以通过对它软件写’0’来清除。

此清零方式只在多缓冲器通信模式下推荐使用。

4.1.3.3断开符号

设置SBK可发送一个断开符号。

断开帧长度取决M位(见0)。

如果设置SBK=1,在完成当前数据发送后,将在TX线上发送一个断开符号。

断开字符发送完成时(在断开符号的停止位时)SBK被硬件复位。

USART在最后一个断开帧的结束处插入一逻辑’1’,以保证能识别下一帧的起始位。

如果在开始发送断开帧之前,软件又复位了SBK位,断开符号将不被发送。

如果要发送两个连续的断开帧,SBK位应该在前一个断开符号的停止位之后置起。

4.1.3.4空闲符号

置位TE将使得USART在第一个数据帧前发送一空闲帧

4.1.4接收器

4.1.4.1接收配置

在USART接收期间,数据的最低有效位首先从RX脚移进。

在此模式里,USART_DR寄存器包含的缓冲器位于内部总线和接收移位寄存器之间。

数据接收配置步骤:

1.将USART_CR1寄存器的UE置1来激活USART。

2.编程USART_CR1的M位定义字长

3.在USART_CR2中编写停止位的个数

4.如果需多缓冲器通信,选择USART_CR3中的DMA使能位(DMAR)。

按多缓冲器通信所要求的配置DMA寄存器。

5.利用波特率寄存器USART_BRR选择希望的波特率。

6.设置USART_CR1的RE位。

激活接收器,使它开始寻找起始位。

4.1.4.2当一字符被接收到时,

1.RXNE位被置位。

它表明移位寄存器的内容被转移到RDR。

换句话说,数据已经被接收并且可以被读出(包括与之有关的错误标志)。

2.如果RXNEIE位被设置,产生中断。

3.在接收期间如果检测到帧错误,噪音或溢出错误,错误标志将被置起,

4.在多缓冲器通信时,RXNE在每个字节接收后被置起,并由DMA对数据寄存器的读操作而清零。

5.在单缓冲器模式里,由软件读USART_DR寄存器完成对RXNE位清除。

RXNE标志也可以通过对它写0来清除。

RXNE位必须在下一字符接收结束前被清零,以避免溢出错误。

在接收数据时,RE位不应该被复位。

如果RE位在接收时被清零,当前字节的接收被丢失。

4.1.5分数波特率的产生

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

Tx/Rx波特率=fPCLKx/(16*USARTDIV))

这里的fPCLKx(x=1、2)是给外设的时钟(PCLK1用于USART2、3、4、5,PCLK2用于USART1)

USARTDIV是一个无符号的定点数。

这12位的值设置在USART_BRR寄存器。

如何从USART_BRR寄存器值得到USARTDIV

例1:

要求USARTDIV=25.62d,就有:

DIV_Fraction=16*0.62d=9.92d,近似等于10d=0x0A

DIV_Mantissa=mantissa(25.620d)=25d=0x19

于是,USART_BRR=0x19A

例2:

要求USARTDIV=50.99d

就有:

DIV_Fraction=16*0.99d=15.84d=>

近似等于16d=0x10

DIV_Mantissa=mantissa(50.990d)=50d=0x32

更新波特率寄存器USART_BRR后,波特率计数器中的值也立刻随之更新。

所以在通信进行时不应改变USART_BRR中的值。

表4-1-1设置波特率的误差表

波特率

fPCLK=36MHz

fPCLK=72MHz

序号

Kbps

实际

置于波特率

寄存器中的值

误差%

1

2.4

2.400

937.5

0%

1875

2

9.6

9.600

234.375

468.75

3

19.2

117.1875

4

57.6

39.0625

78.125

5

115.2

115.384

19.5

0.15%

6

230.4

230.769

9.75

0.16%

7

460.8

461.538

4.875

8

921.6

923.076

2.4375

9

2250

10

4500

不可能

注:

1.CPU的时钟频率越低某一特定波特率的误差也越低

2.只有USART1使用PCLK2(最高72MHz)。

其它USART使用PCLK1(最高36MHz)。

4.1.6多处理器通信

通过USART可以实现多处理器通信(将几个USART连在一个网络里)。

例如某个USART设备可以是主,它的TX输出和其他USART从设备的RX输入相连接;

USART从设备各自的TX输出逻辑地与在一起,并且和主设备的RX输入相连接。

在多处理器配置中,通常希望只有被寻址的接收者才被激活,来接收随后的数据,这样就可以减少由未被寻址的接收器的参与带来的多余的USART服务开销。

未被寻址的设备可启用其静默功能置于静默模式。

在静默模式里:

1.任何接收状态位都不会被设置。

2.所有接收中断被禁止。

3.USART_CR1寄存器中的RWU位被置1。

RWU可以被硬件自动控制或在某个条件下由软件写入。

根据USART_CR1寄存器中的WAKE位状态,USART可以用二种方法进入或退出静默模式。

4.如果WAKE位被复位:

进行空闲总线检测。

5.如果WAKE位被设置:

进行地址标记检测。

空闲总线检测(WAKE=0)

当RWU位被写1时,USART进入静默模式。

当检测到一空闲帧时,它被唤醒。

然后RWU被硬件清零,但是USART_SR寄存器中的IDLE位并不置起。

RWU还可以被软件写0。

地址标记(addressmark)检测(WAKE=1)。

在这个模式里,如果MSB是1,该字节被认为是地址,否则被认为是数据。

在一个地址字节中,目标接收器的地址被放在4个LSB中。

这个4位地址被接收器同它自己地址做比较,接收器的地址被编程在USART_CR2寄存器的ADD。

如果接收到的字节与它的编程地址不匹配时,USART进入静默模式。

该字节的接收既不会置起RXNE标志也不会产生中断或发出DMA请求,因为USART已经在静默模式。

当接收到的字节与接收器内编程地址匹配时,USART退出静默模式。

然后RWU位被清零,随后的字节被正常接收。

匹配的地址字节将置位RXNE位,因为RWU位已被清零。

当接收缓冲器不包含数据时(USART_SR的RXNE=0),RWU位可以被写0或1。

否则,该次写操作被忽略。

4.1.7LIN(局域互联网)模式

LIN模式是通过设置USART_CR2寄存器的LINEN位选择。

在LIN模式下,下列位必须保持为0:

1.USART_CR2寄存器的CLKEN位

2.USART_CR3寄存器的STOP[1:

0],SCEN,HDSEL和IREN

4.1.7.1LIN发送

LIN主发送和一般的串口发送基本相同,但和正常USART发送有以下区别:

1.清零M位以配置8位字长

2.置位LINEN位以进入LIN模式。

这时,置位SBK将发送13位’0’作为断开符号。

然后发一位’1’,以允许对下一个开始位的检测。

4.1.7.2LIN接收

当LIN模式被使能时,断开符号检测电路被激活。

该检测完全独立于USART接收器。

断开符号只要一出现就能检测到,不管是在总线空闲时还是在发送某数据帧其间,数据帧还未完成,又插入了断开符号的发送。

当接收器被激活时(USART_CR1的RE=1),电路监测RX上的起始信号。

监测起始位的方法同检测断开符号或数据是一样的。

当起始位被检测到后,电路对每个接下来的位,在每个位的第8,9,10个过采样时钟点上进行采样。

如果10个(当USART_CR2的LBDL=0)或11个(当USART_CR2的LBDL=1)连续位都是’0’,并且又跟着一个定界符,USART_SR的LBD标志被设置。

如果LBDIE位=1,中断产生。

在确认断开符号前,要检查定界符,因为它意味RX线已经回到高电平。

如果在第10或11个采样点之前采样到了’1’,检测电路取消当前检测并重新寻找起始位。

如果LIN模式被禁止,接收器继续如正常USART那样工作,不需要考虑检测断开符号。

如果LIN模式没有被激活(LINEN=0),接收器仍然正常工作于USART模式,不会进行断开检测。

如果LIN模式被激活(LINEN=1),只要一发生帧错误(也就是停止位检测到’0’,这种情况出现在断开帧),接收器就停止,直到断开符号检测电路接收到一个’1’(这种情况发生于断开符号没有完整的发出来),或一个定界符(这种情况发生于已经检测到一个完整的断开符号)。

4.1.8USART同步模式

USART允许用户以主模式方式控制双向同步串行通信。

SCLK脚是USART发送器时钟的输出。

在起始位和停止位期间,SCLK脚上没有时钟脉冲。

根据USART_CR2寄存器中LBCL位的状态,决定在最后一个有效数据位期间产生或不产生时钟脉冲。

USART_CR2寄存器的CPOL位允许用户选择时钟极性,USART_CR2寄存器上的CPHA位允许用户选择外部时钟的相位(见图4-1-1、图4-1-2和图4-1-3)。

在总线空闲期间,实际数据到来之前以及发送断开符号的时候,外部SCLK时钟不被激活。

同步模式时,USART发送器和异步模式里工作一模一样。

但是因为SCLK是与TX同步的(根据CPOL和CPHA),所以TX上的数据是随SCLK同步发出的。

同步模式的USART接收器工作方式与异步模式不同。

如果RE=1,数据在SCLK上采样(根据CPOL和CPHA决定在上升沿还是下降沿),不需要任何的过采样。

但必须考虑建立时间和持续时间(取决于波特率,1/16位时间)。

1.SCLK脚同TX脚一起联合工作。

因而,只有在发送器被激活(TE=1),且数据被发送时(USART_DR寄存器被写入)才提供时钟。

这意味着在没有发送数据时是不可能接收一个同步数据的。

2.LBCL,CPOL和CPHA位的正确配置,应该在发送器和接收器都被禁止时;

当发送器或接收器被激活时,这些位不能被改变

3.建议在同一条指令中设置TE和RE,以减少接收器的建立时间和保持时间。

4.USART只支持主模式:

它不能用来自其他设备的输入时钟接收或发送数据(SCLK永远是输出)。

图4-1-1USART同步传输的例

图4-1-2USART数据时钟时序示例(M=0)

图4-1-3USART数据时钟时序示例(M=1)

4.1.9单线半双工通信

USART可以配置成遵循单线半双工协议。

使用控制位“HALFDUPLEXSEL”选择半双工和全双工通信。

当HDSEL写’1’时

1.RX不再被使用

2.当没有数据传输时,TX总是被释放。

因此,它在空闲状态的或接收状态时表现为一个标准I/O口。

这就意味该I/O在不被USART驱动时,必须配置成悬空输入(或开漏的输出高)。

除此以外,通信与正常USART模式类似。

由软件来管理线上的冲突(例如通过使用一个中央仲裁器)。

特别的是,发送从不会被硬件所阻碍。

当TE位被设置时,只要数据一写到数据寄存器上,发送就继续。

4.1.10智能卡

设置USART_CR3寄存器的SCEN位选择智能卡模式。

在智能卡模式下,下列位必须保持清零:

1.USART_CR2寄存器的LINEN位

2.USART_CR3寄存器的HDSEL位和IREN位

此外,CLKEN位可以被设置,以提供时钟给智能卡。

智能卡接口设计成ISO7816-3标准所定义的那样支持异步协议的智能卡。

USART应该被设置为:

8位数据位加校验位:

此时USART_CR1寄存器M=1,PCE=1,并且下列条件满足其一:

1>

接收时0.5个停止位:

即USART_CR2寄存器的STOP=01

2>

发送时1.5个停止位:

即USART_CR2寄存器的STOP=11

图4-1-4给出的例子说明了数据线上,在有校验错误和没校验错误两种情况下的信号。

图4-1-4ISO7816-3异步协议

当与智能卡相连接时,USART的TX驱动一根智能卡也驱动的双向线。

为了做到这点,SW_RX必须和TX连接到相同的I/O口。

在发送开始位和数据字节期间,发送器的输出使能位TX_EN被置起,在发送停止位期间被释放(弱上拉),因此在发现校验错误的情况下接收器可以将数据线拉低。

如果TX_EN不被使用,在停止位期间TX被拉到高电平:

这样的话,只要TX配置成开漏,接收器也可以驱动这根线。

智能卡是一个单线半双工通信协议

1.从发送移位寄存器把数据发送出去,要被延时最小1/2波特时钟。

在正常操作时,一个满的发送移位寄存器将在下一个波特时钟沿开始向外移出数据。

在智能卡模式里,此发送被延迟1/2波特时钟。

2.如果在接收数据帧期间,检测到一校验错误,该帧接收完成后(也就是在0.5停止位结束时),发送线被拉低一个波特时钟周期。

这是告诉智能卡发送到USART的数据没有被正确接收到。

此NACK信号(拉低发送线一个波特时钟周期)在发送端将产生一个帧错误(发送端被配置成1.5个停止位)。

应用程序可以根据协议处理重新发送的数据。

如果NACK控制位被设置,发生校验错误时接收器会给出一个NACK信号;

否则就不会发送NACK。

3.TC标志的置起可以通过编程保护时间寄存器得以延时。

在正常操作时,当发送移位寄存器变空并且没有新的发送请求出现时,TC被置起。

在智能卡模式里,空的发送移位寄存器将触发保护时间计数器开始向上计数,直到保护时间寄存器中的值。

TC在这段时间被强制拉低。

当保护时间计数器达到保护时间寄存器中的值时,TC被置高。

4.TC标志的撤销不受智能卡模式的影响。

5.如果发送器检测到一个帧错误(收到接收器的NACK信号),发送器的接收功能模块不会把NACK当作起始位检测。

根据ISO协议,接收到的NACK的持续时间可以是1或2波特时钟周期。

6.在接收器这边,如果一个校验错误被检测到,并且NACK被发送,接收器不会把NACK检测成起始位。

1.断开符号在智能卡模式里没有意义。

一个带帧错误的00h数据将被当成数据而不是断开符号。

2.当来回切换TE位时,没有IDLE帧被发送。

ISO协议没有定义IDLE帧。

在这个例子里,USART正在发送数据,并且被配置成1.5个停止位。

为了检查数据的完整性和NACK信号,USART的接收功能块被激活。

USART可以通过SCLK输出为智能卡提供时钟。

在智能卡模式里,SCLK不和通信直接关联,而是先通过一个5位预分频器简单地用内部的外设输入时钟来驱动智能卡的时钟。

分频率在预分频寄存器USART_GTPR中配置。

SCLK频率可以从fCK/2到fCK/62,这里的fCK是外设输入时钟。

4.1.11IrDASIRENDEC功能块

IrDASIR物理层规定使用反相归零调制方案(RZI),该方案用一个红外光脉冲代表逻辑’0’(见图4-5)。

SIR发送编码器对从USART输出的NRZ(非归零)比特流进行调制。

输出脉冲流被传送到一个外部输出驱动器和红外LED。

USART为SIRENDEC最高只支持到115.2Kbps速率。

在正常模式里,脉冲宽度规定为一个位周期的3/16。

SIR接收解码器对来自红外接收器

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1