欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    第四章 usart串口的一般应用.doc

    • 资源ID:2387873       资源大小:620.50KB        全文页数:32页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第四章 usart串口的一般应用.doc

    第四章 USART串口的一般应用4.1 USART介绍 通用同步异步收发器(USART),提供了一种灵活的方法,与使用工业标准的异步串行外部设备之间进行全双工数据交换。USART利用分数波特率发生器提供宽范围的波特率选择。它支持同步单向通信和半双工单线通信,也支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。使用多缓冲器配置的DMA方式,可以实现高速数据通信。 总之,STM32F10x系列芯片所提供的USART串口功能时分强大,基本上所知的串口功能,其都能通过硬件来实现。4.1.1 USART主要特性 1全双工异步通信 ;2NRZ标准格式 ;3分数波特率发生器系统,发送和接收共用的可编程波特率,最高达4.5Mbits/s4可编程数据字长度(8位或9位)5可配置的停止位-支持1或2个停止位6LIN主发送同步断开符的能力以及LIN从检测断开符的能力,当USART硬件配置成LIN时,生成13位断开符;检测10/11位断开符7发送方为同步传输提供时钟8IRDA SIR 编码器解码器,在正常模式下支持3/16位的持续时间9智能卡模拟功能,智能卡接口支持ISO7816-3标准里定义的异步智能卡协议,智能卡用到的0.5和1.5个停止位10单线半双工通信11可配置的使用DMA的多缓冲器通信 在SRAM里利用集中式DMA缓冲接收/发送字节 12单独的发送器和接收器使能位13检测标志,接收缓冲器满,发送缓冲器空 ,传输结束标志14校验控制,发送校验位,对接收数据进行校验15四个错误检测标志。溢出错误;噪音错误;帧错误;校验错误;1610个带标志的中断源。CTS改变、LIN断开符检测、发送数据寄存器空、发送完成、接收数据寄存器满、检测到总线为空闲、溢出错误、帧错误、噪音错误和校验错误 ;17多处理器通信 - 如果地址不匹配,则进入静默模式18从静默模式中唤醒(通过空闲总线检测或地址标志检测)19两种唤醒接收器的方式:地址位(MSB,第9位),总线空闲4.1.2 USART功能概述 接口通过三个引脚与其他设备连接在一起。任何USART双向通信至少需要两个脚:接收数据输入(RX)和发送数据输出(TX)。 RX:接收数据串行输。通过过采样技术来区别数据和噪音,从而恢复数据。 TX:发送数据输出。当发送器被禁止时,输出引脚恢复到它的I/O端口配置。当发送器被激活,并且不发送数据时,TX引脚处于高电平。在单线和智能卡模式里,此I/O口被同时用于数据的发送和接收。 1. 在异步模式中:1总线在发送或接收前应处于空闲状态2一个起始位 3一个数据字(8或9位),最低有效位在前40.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模式里需要下列引脚: 1IrDA_RDI: IrDA模式下的数据输入。 2IrDA_TDO: IrDA模式下的数据输出。 4. 硬件流控模式中需要下列引脚在: 1nCTS: 清除发送,若是高电平,在当前数据传输结束时阻断下一次的数据发送。 2nRTS: 发送请求,若是低电平,表明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移送到移位寄存器,数据发送已经开始 2TDR寄存器被清空 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% 2.4 1875 0% 2 9.6 9.600 234.375 0% 9.6 468.75 0% 3 19.2 19.2 117.1875 0% 19.2 234.375 0% 4 57.6 57.6 39.0625 0% 57.6 78.125 0% 5 115.2 115.384 19.5 0.15% 115.2 39.0625 0% 6 230.4 230.769 9.75 0.16% 230.769 19.5 0.16% 7 460.8 461.538 4.875 0.16% 461.538 9.75 0.16% 8 921.6 923.076 2.4375 0.16% 923.076 4.875 0.16% 9 2250 2250 1 0% 2250 2 0% 10 4500 不可能 不可能 不可能 4500 1 0% 注: 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。地址标记(address mark)检测(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.7 LIN(局域互联网)模式 LIN模式是通过设置USART_CR2寄存器的LINEN位选择。在LIN模式下,下列位必须保持为0: 1. USART_CR2寄存器的CLKEN位 2. USART_CR3寄存器的STOP1:0,SCEN,HDSEL和IREN 4.1.7.1 LIN发送 LIN主发送和一般的串口发送基本相同,但和正常USART发送有以下区别: 1. 清零M位以配置8位字长 2. 置位LINEN位以进入LIN模式。这时,置位SBK将发送13位0作为断开符号。然后发一位1,以允许对下一个开始位的检测。 4.1.7.2 LIN接收 当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.8 USART 同步模式 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位时间)。 注意: 1SCLK脚同TX脚一起联合工作。因而,只有在发送器被激活(TE1),且数据被发送时(USART_DR寄存器被写入)才提供时钟。这意味着在没有发送数据时是不可能接收一个同步数据的。 2LBCL,CPOL和CPHA位的正确配置,应该在发送器和接收器都被禁止时;当发送器或接收器被激活时,这些位不能被改变 3建议在同一条指令中设置TE和RE,以减少接收器的建立时间和保持时间。 4USART只支持主模式:它不能用来自其他设备的输入时钟接收或发送数据(SCLK永远是输出)。 图4-1-1 USART同步传输的例图4-1-2 USART数据时钟时序示例(M=0) 图4-1-3 USART数据时钟时序示例(M=1)4.1.9 单线半双工通信 USART可以配置成遵循单线半双工协议。使用控制位“HALF DUPLEX SEL”选择半双工和全双工通信。当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-4 ISO7816-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.11 IrDA SIR ENDEC 功能块 IrDA SIR物理层规定使用反相归零调制方案(RZI),该方案用一个红外光脉冲代表逻辑0(见图4-5)。SIR发送编码器对从USART输出的NRZ(非归零)比特流进行调制。输出脉冲流被传送到一个外部输出驱动器和红外LED。USART为SIR ENDEC最高只支持到115.2Kbps速率。在正常模式里,脉冲宽度规定为一个位周期的3/16。 SIR接收解码器对来自红外接收器的归零位比特流进行解调,并将接收到的NRZ串行比特流输出到USART。在空闲状态里,解码器输入通常是高(标记状态marking state)。发送编码器输出的极性和解码器的输入相反。当解码器输入低时,检测到一个起始位。 IrDA是一个半双工通信协议。如果发送器忙(也就是USART正在送数据给IrDA编码器),IrDA接收线上的任何数据将被IrDA解码器忽视。如果接收器忙(也就是USART正在接收从IrDA解码器来的解码数据),从USART到IrDA的TX上的数据将不会被IrDA编码。当接收数据时,应该避免发送,因为将被发送的数据可能被破坏。 SIR发送逻辑把0作为高电平发送,把1作为低电平发送。脉冲的宽度规定为正常模式时位周期的3/16(见图4-1-6)。 SIR接收逻辑把高电平状态解释为1,把低脉冲解释为0。发送编码器输出与解码器输入有着相反的极性。当空闲时,SIR输出处于低状态。SIR解码器把IrDA兼容的接收信号转变成给USART的比特流。 IrDA规范要求脉冲要宽于1.41us。脉冲宽度是可编程的。接收器端的尖峰脉冲检测逻辑滤除宽度小于2个PSC周期的脉冲(PSC是在IrDA低功耗波特率寄存器USART_GTPR中编程的预分频值)。宽度小于1个PSC周期的脉冲一定被滤除掉,但是那些宽度大于1个而小于2个PSC周期的脉冲可能被接收或滤除,那些宽度大于2个周期的将被视为一个有效的脉冲。当PSC=0时,IrDA编码器/解码器不工作。 接收器可以与一低功耗发送器通信。在IrDA模式里,USART_CR2寄存器上的STOP位必须配置成1个停止位。 IrDA低功耗模式 发送器 :在低功耗模式,脉冲宽度不再持续3/16个位周期。取而代之,脉冲的宽度是低功耗波特率的3倍,它最小可以是1.42MHz。通常这个值是1.8432MHz(1.42 MHz < PSC < 2.12 MHz)。一个低功耗模式可编程分频器把系统时钟进行分频以达到这个值。 接收器 :低功耗模式的接收类似于正常模式的接收。为了滤除尖峰干扰脉冲,USART应该滤除宽度短于1个PSC的脉冲。只有持续时间大于2个周期的IrDA低功耗波特率时钟(USART_GTPR中的PSC)的低电平信号才被接受为有效的信号。 注意: 1. 宽度小于2个大于1个PSC周期的脉冲可能会也可能不会被滤除。 2. 接收器的建立时间应该由软件管理。IrDA物理层技术规范规定了在发送和接收之间最小要有10ms的延时(IrDA是一个半双工协议)。 图4-1-5 IrDA SIR ENDEC 框图 图4-1-6 IrDA数据调制(3/16) 普通模式4.1.12 USART中断请求 表4-1-2 USART中断请求 中断事件 事件标志 使能位 发送数据寄存器空 TXE TXEIE CTS标志 CTS CTSIE 发送完成 TC TCIE 接收数据就绪可读 TXNE TXNEIE 检测到数据溢出 ORE 检测到空闲线路 IDLE IDLEIE 奇偶检验错 PE PEIE 断开标志 LBD LBDIE 噪声标志,多缓冲通信中的溢出错误和帧错误 NE或ORT或FE EIE USART的各种中断事件被连接到同一个中断向量,有以下各种中断事件: 发送期间:发送完成中断、清除发送中断、发送数据寄存器空中断。 接收期间:空闲总线检测中断、溢出错误中断、接收数据寄存器非空中断、校验错误中断、LIN断开符号检测中断、噪音中断(仅在多缓冲器通信)和帧错误中断(仅在多缓冲器通信)。 如果对应的使能控制位被设置,这些事件就会产生各自的中断。 4.1.13 USART模式配置 表4-1-3 USART模式设置(1) USART模式 USART1 USART2 USART3 UART4 UART5 异步模式 X X X X X 硬件流控制 X X X NA NA 多缓存通讯(DMA) X X X X X 多处理器通讯 X X X X X 同步 X X X NA NA 智能卡 X X X NA NA 半双工(单线模式) X X X X X IrDA X X X X X LIN X X X X X (1)X = 支持,NA = 不支持该应用 4.2 USART串口库函数介绍在这一节中,将介绍USART串口的库函数,只是介绍一些常用函数的用法以及参数定义。本书中所有涉及到的库函数都是2.0.3版本的函数库。USART_Init函数,初始化所使用的串口外设;USART_Cmd函数,使能或者失能USART外设;USART_ITConfig函数,使能或者失能指定的USART中断;USART_SendData函数,通过外设USARTx发送单个数据;USART_ReceiveData函数,返回USARTx最近接收到的数据;USART_GetFlagStatus函数,检查指定的USART标志位设置与否;USART_ClearFlag函数,清除USARTx的待处理标志位;GetITStatus函数,检查指定的USART中断发生与否4.2.1 函数 USART_Init 此函数的功能是初始化异步串口:选定使用的串口、设定串口的速率、数据位数、校验方式、停止位、流量控制方式等等,是串口最重要的库函数。表4-2-1描述了USART_Init函数。表4-2-1 USART_Init函数函数名USART_Init 函数原形voidUSART_Init(USART_TypeDef*USARTx,USART_InitTypeDef* USART_InitStruct)功能描述根据 USART_InitStruct 中指定的参数初始化外设 USARTx 寄存器输入参数1USARTx:x可以是 1,2或者 3,来选择 USART 外设输入参数2USART_InitStruct:指向结构 USART_InitTypeDef的指针,包含了外设 USART信息输出参数无返回值无先决条件无被调用函数USART_InitTypeDef 结构定义于文件“stm32f10x_usart.h”中,具体内容如下: typedef struct u32 USART_BaudRate; u16 USART_WordLength; u16 USART_StopBits; u16 USART_Parity; u16 USART_HardwareFlowControl; u16 USART_Mode; USART_InitTypeDef; 1USART_BaudRate 该成员设置了 USART 传输的波特率,波特率可以由以下公式计算: IntegerDivider = (APBClock) / (16 * (USART_InitStruct->USART_BaudRate) FractionalDivider = (IntegerDivider - (u32) IntegerDivider) * 16) + 0.5该成员值,不一定要是9600、14400、19200、38400、57600等值,可以是任意值。2USART_WordLength USART_WordLength 提示了在一个帧中传输或者接收到的数据位数。表4-2-2给出了该参数可取的值。 表 4-2-2 USART_WordLength成员的值USART_WordLength成员的值描述USART_WordLength_8b 8 位数据USART_WordLength_9b 9 位数据3USART_StopBits USART_StopBits定义了发送的停止位数目。表4-2-3给出了该参数可取的值。 表 4-2-3 USART_StopBits成员的值 USART_StopBits成员的值描述USART_StopBits_1在帧结尾传输 1 个停止位USART_StopBits_0.5在帧结尾传输 0.5 个停止位USART_StopBits_2在帧结尾传输 2 个停止位USART_StopBits_1.5在帧结尾传输 1.5 个停止位 4USART_Parity USART_Parity定义了奇偶校验模式。表4-2-4给出了该参数可取的值。 表4-2-4 USART_Parity成员可取的值USART_Parity成员可取的值描述USART_Parity_No无校验USART_Parity_Even偶校验模式USART_Parity_Odd奇校验模式 注意:奇偶校验一旦使能,在发送数据的 MSB 位插入经计算的奇偶位(字长 9 位时的第 9 位,字长 8 位时的第 8 位) 。 5USART_HardwareFlowControl USART_HardwareFlowControl 指定了硬件流控制模式使能还是失能。表4-2-5给出了该参数可取的值。 表 4-2-5 USART_HardwareFlowControl成员可取的值USART_HardwareFlowControl成员可取的值描述USART_HardwareFlowControl_None没有流量控制USART_HardwareFlowControl_RTS发送请求 RTS使能USART_HardwareFlowControl_CTS清除发送 CTS使能USART_HardwareFlowControl_RTS_CTSRTS和 CTS使能 6USART_Mode USART_Mode 指定了使能或者失能发送和接收模式。表4-2-6给出了该参数可取的值。 表 4-2-6 USART_Mode成员可取的值USART_Mode成员可取的值描述USART_Mode_Tx 发送使能USART_Mode_Rx 接收使能例:异步串口1,速率19200,8位数据,一个停止位,无校验,无流量控制,接收发送使能。USART_InitTypeDef USART_InitStructure; /定义结构体USART_InitStructure.USART_BaudRate = 9600; /设定通讯速率USART_InitStructure.USART_WordLength = USART_WordLength_8b; /8位数据USART_InitStructure.USART_StopBits = USART_StopBits_1; /一个停止位USART_InitStructure.USART_Parity = USART_Parity_No; /无校验位

    注意事项

    本文(第四章 usart串口的一般应用.doc)为本站会员(文库蛋蛋多)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开