STM32 USART整理说明(转)

摘要:
清除TC位通过以下软件操作完成:读取USART一次_ SR寄存器;写入USART一次_ DR寄存器。在此模式下,USART_ DR寄存器由内部总线和接收移位寄存器之间的缓冲区组成。从移位寄存器传输到USART_ DR寄存器的数据无效。NE位读取sequence_SR寄存器中的USART,USART_DR寄存器复位。

  该接口通过3个引脚连接到另外的外部设备上。
    任何USART双向通信都至少需要两个引脚:接收数据输入RX和发送数据输出TX。
    当发送器禁能时输出引脚恢复到I/O端口配置。当发送器使能时且无数据发送,TX引脚为高电平。

    字长可以通过设置USART_CR1寄存器中的M位来选择是8位还是9位。
    TX引脚在起始位期间为低,停止位期间为高。
    空闲符被认为是一个全“1”的帧,其后紧跟着包含数据的下一个帧的起始位(“1”的数目包含了停止位的数目)。
    间隙符被认为是一个帧周期都接收到“0”。在间隙帧之后,发送器插入1个或者2个的停止位(逻辑“1”)来应答起始位。


一、发送器

    发送器可以发送8或者9位的数据字,这取决于M位的状态。相关时钟脉冲在SCLK引脚输出。

1、字符发送

    USART发送期间,TX引脚先出现最低有效位。这种模式下,USART_DR寄存器包含了一个内部总线和发送移位寄存器之间的缓冲区TDR。每个字符之前都有一位逻辑低电平的起始位,以可设置数目的停止位结束。

    TE位使能之后将发送一个空闲帧。

2、可配置的停止位

    1个停止位:这是陌生人的停止位数目;
    2个停止位:常规USART,单线和调制解调器模式下支持;
    0.5个停止位:当处于智能卡模式下接收数据时使用;
    1.5个停止位:当处于智能卡模式下发送数据时使用。

    空闲帧的发送包含了停止位。

    间隙帧是10(11)个低位之后跟着配置的停止位

    配置流程:通过把USART_CR1寄存器中的UE位写1来使能USART->配置USART_CR1寄存器中的M位来定义字长->配置USART_CR2寄存器中的停止位数目->若采用多缓冲通信选择USART_CR3寄存器中的DMA使能位(DMAT),按照多缓冲通信中解释的配置DMA寄存器->设置USART_CR1寄存器中的TE位来发送一个空闲帧来作为第一次发送->通过USART_BRR寄存器选择期望的波特率->往USART_DR寄存器中写入要发送的数据,这也将清除TXE位。

3、单字节通信

    清除TXE位一般都是通过往数据寄存器中写入数据完成的。

    TXE是由硬件设置的,它表明:数据已经从TDR中转移到移位寄存器了,数据发送已经开始;TDR寄存器是空的;下一个数据可以写入USART_DR寄存器,而不会覆盖前面的数据。

    当发送在进行时,一个对USART_DR寄存器的写命令将数据保存到TDR寄存器中,并且当前传输完成之后,TDR寄存器中的数据将被复制到移位寄存器中。
    当没有进行发送时,往USART_DR寄存器中写入一个数据,数据将直接被放入移位寄存器,发送开始,TXE位将被立即置1。

    当一个帧发送完成时(结束位之后),TC位被置1。

    清除TC位是通过下面的软件操作完成的:(1)读一次USART_SR寄存器;(2)写一次USART_DR寄存器(TC位也可以通过对它写0清除,这个清除序列只建议在多缓存通信中使用)。

4、间隙字符

    设置SBK位将发送一个间隙字符。若SBK位被置1,在完成当前的发送之后将在TX线路上发送一个间隙字符。这一位在间隙字符发送完成时由硬件复位。    USART在最后一个间隙帧的末端插入一个逻辑1,从而保证下一个帧的起始位能被识别。

    软件在间隙符发送之前复位SBK,间隙符将不会被发送。

5、空闲符

    设置TE位将驱动USART在第一个数据帧之前发送一个空闲帧。


二、接收器

    接收器可以接收8位或9位的数据字,这取决于USART_CR1寄存器中的M位。

1、字符接收

     在一次USART接收期间,RX引脚最先接收到最低有效位。这种模式下,USART_DR寄存器由一个内部总线和接收移位寄存器之间的缓冲区(RDR)构成。
    配置流程:通过把USART_CR1寄存器中的UE位写1来使能USART->配置USART_CR1寄存器中的M位来定义字长->配置USART_CR2寄存器中的停止位数目->若发生多缓冲通信,选择USART_CR3寄存器中的DMA使能位(DMAT)->通过波特率寄存器USART_BRR来选择期望的波特率->置位USART_CR1寄存器中的RE,这将使能接收器开始寻找起始位。

当接收到一个字符时:

    RXNE位被置1,表明移位寄存器的内容被转移到RDR。
    如果RXNEIE位被置1,将产生一个中断。
    接收期间若发现帧错误,噪音或者溢出错误,错误标志将会被置1。
    多缓冲接收中,RXNE在每接收到一个字节都会被置1并通过DMA读取数据寄存器来清除。
    在单缓冲模式,清除RXNE位是由软件读取USART_DR寄存器万层。RXNE标志也可以通过对它写0清除。RXNE位必须在下一个字符接收完成前被清除,否则将产生溢出错误。

2、间隙符:

    当接收到间隙符时,USART把它当做帧错误处理。

3、空闲符:

    当接收到空闲帧时,将和接收到数据一样处理,此外如果IDLEIE位被置1的话将产生一个中断。

4、溢出错误

    当接收到一个字符,而RXNE位还没有被复位,这时候将出现错误。在RXNE位被清除之前数据不能从移位寄存器转移到RDR寄存器。
    出现溢出错误时,ORE位被置1,通过在读USART_SR寄存器之后读USART_DR寄存器,ORE位被复位。
    ORE位被置1时,表明至少1个数据已经丢失:若RXNE=1,上一个有效数据存放在接收寄存器RDR,并且可读;RXNE=0,上一个有效数据已被读出,RDR中无可读数据。

5、噪音错误

    在帧内发现噪音:NE在RXNE位的上升沿被置1。
    无效的数据从移位寄存器转移到USART_DR寄存器。
    若为单字节通信,将不产生中断;多缓冲通信下,若USART_CR3寄存器中的EIE位准备置1,将导致一个中断。
    NE位通过依次读取USART_SR寄存器和USART_DR寄存器复位。

6、帧错误

    由于没有同步上或大量噪音的原因,停止位没有在预期的时间上接和收识别出来。
    当发现帧错误时:FE位被硬件置1;无效的数据从移位寄存器转移到USART_DR寄存器;若为单字节通信,将不会产生中断,但这一位将和自身产生中断的RXNE位一起上升,多缓冲通信中,若USART_CR3寄存器中的EIE位被置1,将导致一个中断。

    NE位通过一次读取USART_SR寄存器和USART_DR寄存器复位。

7、接收期间配置停止位

    要接收的停止位的数目可以通过控制寄存器2中的控制为配置。普通模式下可以是1位或者2位。智能卡模式下可能是0.5位或1.5位。

三、分数波特率的产生

    接收器和发送器(RX和TX)都是设置城USARTDIV整数和小数寄存器中配置的值。

    TX/RX波特率=Fck/(16*USARTDIV)

例子:从BRR寄存器的值计算得到USARTDIV
如果DIV_Mantissa=27D,DIV_Fraction=12D(BRR=1BCH),那么
Mantissa(USARTDIV)=27D
Fraciton(USARTDIV)=12/16=0.75D
因此,USARTDIV=27.75D

    在写入USART_BRR后,波特率计数器会被波特率寄存器中的新值更新,因此在处理期间不应改变波特率寄存器的值,只有USART1是由PCK2(最大位72MHZ)提供时钟,其他的都由PCLK1提供时钟(最大为36MHZ)。

四、多处理器通信

   利用USART可以进行多处理器通信(只需把多个USART连接城一个网络)。
   未编址设备可以通过静默功能的方式置为静默模式。
   静默模式下:所有接收状态位都不会被设置。
   所有的接收中断都被禁止。
   USART_CR1寄存器中的RWU位被置1,RWU可以硬件自动控制或者在某些条件下有软件写。
   USART可以通过两种方式进入和退出静默模式:如果WAKE位被复位,采用空闲线路检测模式。
   如果WAKE位被置位,采用地址标记检测模式。

1、空闲线路检测模式(WAKE=0)

   当RWU位被写1时,USART进入静默模式。
   当发现空闲帧时,USART退出静默模式,RWU位也将被硬件清除,但是USART_SR寄存器中的IDLE位不会被置1.RWU也可以被软件清0。

2、地址标记检测(WAKE=1)

    此模式下,MSB为1的字节被认为是地址,否则被认为是数据。
    当接收到一个和预先设置在USART_CR2寄存器中ADD位中的地址不匹配的地址字符,USART进入静默模式。
    当接收到一个和设置的地址匹配的地址字符,USART退出静默模式。RWU被清除,后面的字节也将正常接收,RXNE位会因为接收到地址字符被置1.
    当接收端缓冲区没有数据时(USART_SR寄存器中的RXNE=0),RWU位可以被写0或者1,否则写操作会被忽略。
    在选择静默模式之前(设置RWU位)。USART必须先接收一个数据字节,否则它不能运行在通过空闲线路检测唤醒的静默模式。
    在地址标志检测唤醒配置中(WAKE=1),RWU位在RXNE位被置1时不能通过软件修改

五、奇偶控制

    可以通过设置USART_CR1寄存器中的PCE位来使能奇偶控制。
    发送模式:若USART_CR1的PCE位被置位,写进数据寄存器的数据MSB位被校验位替换后发送出去。


七、LIN模式

    此模式通过USART_CR2寄存器的LINEN位选择。LIN模式下,CLKEN位,STOP[1:0]位,SCEN,HDSEL,IREN必须保持清除状态。

1、LIN发送

    与正常USART发送存在如下区别:清除M位来设置8位字长度;设置LINEN位进入LIN模式,此情况下,设置SBK位来发送13个“0”作为间隙符,然后发送一个“1”来开启其实检测。

2、LIN接收

    当LIN模式被使能时,间隙检测电路被激活。检测和正常USART接收器完全独立。间隙不管是在空闲时或者接收帧期间发生都能被检测到。
 
    检测起始位的方法和寻找间隙符或者数据是一样的。发现起始位后,电路采样下面的位。若10(LBDL=0)或者11位(LBDL=1)连续的位都是0,且金钩一个分隔符,USART_SR寄存器的LBD标志被置1。

   如果第10或者11次采样之前采样到1,间隙检测电路取消当前的检测而重新查找一个起始位。


   LIN模式被使能,一旦发生了帧错误,接收器不会停止直到间隙字没有完成时接收到一个“1”或检测到间隙后接收到一个分隔符。

免责声明:文章转载自《STM32 USART整理说明(转)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Chrome强行置顶显示在win10最顶层php CI框架目录结构及运行机制下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

[SPI].SPI协议详解

转自:http://www.sohu.com/a/211324861_468626 1、 SPI简介 SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器...

TI AM335X 网卡驱动解析

1.CPSW驱动及设备的初始化; (1)首先驱动注册cpsw_driver ,会自动进入cpsw_probe执行; 1 static struct platform_driver cpsw_driver = { 2 .driver = { 3 .name = "cpsw", 4 .owner = T...

STM32 USB HID BarCodeReader不兼容问题的解决

STM32USB HID class的一部分 BarCodeScanner(条码枪)不兼容的解决 硬件构成 STM32F479-EVAL 评价板型号为FFTAA10AP条码枪 现象 最近用CubeMX生成的USB库做条形码枪的USB驱动,用的是HID协议。有的条形码枪,用标准的USB库一次就能成功。但是有的型号的条码枪貌似和标准USB库流程有所出入,执行后...

usb2.0高速视频采集之68013A寄存器配置说明

  任何的固件编程离不开与与原理图参考,图纸中所采用的是USB的Slave_fifo传输方式,具体配置与图纸对应即可。 •USB_IFCLK:同步Slave_FIFO模式,输入频率范围5M-48M,在FPGA内部将此信号配置为CMOS摄头cmos_pclk,传感器像素时钟的输出端,作为数据采集时钟和 68013与FPGA通信的同步时钟。 assign US...

学习《深入理解计算机系统》第四章摘要

                                                                                           第4章 处理器体系结构 4.1 Y86指令集体系结构        1. Y86中有8个程序寄存器:%eax、%ecx、%edx、%ebx、%esi、%edi、%esp和%eb...

一、OpenTCS4.12 创建一个新的通信驱动

很多人研究这个平台,都会卡在第一步,如何创建一个新的通信驱动, 官方文档也没怎么写清楚 今天写这个博客,是为了帮助大家创建一个新的驱动(具体的通信,我这儿就不讲解) 一、首先在官网下载4.12的源码http://www.opentcs.org/en/download.html 二、安装IDE 我这儿使用的是NetBeans8.2(不会装的就别学JAVA了)...