STM32串口通信——USART

一、介绍

        USART是英文Universal Synchronous Asynchronous Receiver and Transmitter的缩写,意思为通用同步异步收发器。USART是一个串行通信协议,可以灵活地与外部设备进行全双工数据交换。在单片机中见到比较相似的是SART,英文全名是Universal Asynchronous Receiver and Transmitter,它是在 USART 基础上裁剪掉了同步通信功能,只有异步通信,在这里就不详细说了,这里主要说USART,感兴趣的可以查阅相关资料。

        USART 满足外部设备对工业标准 NRZ 异步串行数据格式的要求,并且使用了小数波特率发生 器,可以提供多种波特率,使得它的应用更加广泛。USART 支持同步单向通信和半双工单线通 信;还支持局域互连网络 LIN、智能卡 (SmartCard) 协议与 lrDA(红外线数据协会) SIR ENDEC 规 范。同时USART 支持使用 DMA,可实现高速数据通信,DMA的介绍请查阅相关资料。

二、功能框图以及框图解说

1、外部引脚说明

        TX:发送数据输出引脚。

        RX:接收数据输入引脚。

        SW_RX:数据接收引脚,只用于单线和智能卡模式,属于内部引脚,没有具体外部引脚。
        nRTS:请求以发送 (Request To Send) n 表示低电平有效。如果使能 RTS 流控制,当 USART 接 收器准备好接收新数据时就会将 nRTS 变成低电平;当接收寄存器已满时, nRTS 将被设置为高 电平。该引脚只适用于硬件流控制。
        nCTS:清除以发送 (Clear To Send) n 表示低电平有效。如果使能 CTS 流控制,发送器在发送下 一帧数据之前会检测 nCTS 引脚,如果为低电平,表示可以发送数据,如果为高电平则在发送完 当前数据帧之后停止发送。该引脚只适用于硬件流控制。
        SCLK:发送器时钟输出引脚。这个引脚仅适用于同步模式。
2、数据的寄存器说明(USART_DR)
       
        
        它是由两个寄存器组成的,一个给发送用(TDR) ,一个给接收 用(RDR) ,该寄存器兼具读和写的功能。 TDR 寄存器提供了内部总线和输出移位寄存器之间的 并行接口( 参见功能框图 ) RDR 寄存器提供了输入移位寄存器和内部总线之间的并行接口。
3、控制器
        
        USART 有专门控制发送的发送器、控制接收的接收器,还有唤醒单元、中断控制等等。使用
USART 之前需要向 USART_CR1 寄存器的 UE 位置 1 使能 USART UE 位用来开启供给给串口
的时钟。 发送或者接收数据字长可选 8 位或 9 位,由 USART_CR1 M 位控制。
4、发送器
        
        当 USART_CR1 寄存器的发送使能位 TE 1 时,启动数据发送,发送移位寄存器的数据会在 TX 引脚输出,低位在前,高位在后。如果是同步模式 SCLK 也输出时钟信号。一个字符帧发送需要三个部分:起始位 + 数据帧 + 结束位。起始位:是一个低电平,结束位:USART 支持多种停止位的配置: 0.5 1 1.5 2 个停止位,通过 USART_CR2寄存器 的 STOP[1:0] 位控制,可选 0.5个、1 个、1.5 个和 2 个停止位。看图理解停止位的设置:
        默认使用 1 个停止位。2 个停止位适用于正常 USART 模式、单线模式和调制解调器模式。0.5 个和 1.5 个停止位用于智能卡模式。
        数据帧,它有不同的字长,详细请看图:
        发送器的其他重要标志
5、接收器
        
        将 USART_CR1 寄存器的 RE 位置 1 ,使能 USART 接收,使得接收器在 RX 线开始搜索
起始位。在确定到起始位后就根据 RX 线电平状态把数据存放在接收移位寄存器内。接收完成
后就把接收移位寄存器数据移到 RDR 内,并把 USART_SR 寄存器的 RXNE 位置 1 ,同时如果
USART_CR2 寄存器的 RXNEIE 1 的话可以产生中断。接收器的重要标志:
6、USART引脚在STMF103VET6上的分布
7、 USART 的发送器和接收器使用相同的波特率。计算公式如下:
在公式中,f PLCK 为表示 USART 时钟, USARTDIV 是一个存放在波特率寄存器 (USART_BRR) 的一个无 符号定点数。其中 DIV_Mantissa[11:0] 位定义 USARTDIV 的整数部分 DIV_Fraction[3:0] 位定义USARTDIV 的小数部分。
三、校验控制
        
        设置USART_CR1 寄存器上的 PCE 位,可以使能奇偶控制, 根据 M 位定义的帧长度,可能的 USART 帧格式列在下表中:
        偶校验:校验位使得一帧中的 7 8 LSB 数据以及校验位中 ’1’ 的个数为偶数。
        奇校验:此校验位使得一帧中的 7 8 LSB 数据以及校验位中 ’1’ 的个数为奇数。
四、USART的中断请求请见表格
五、USART初始化结构体
typedef struct {
uint32_t USART_BaudRate; // 波特率
uint16_t USART_WordLength; // 字长
uint16_t USART_StopBits; // 停止位
uint16_t USART_Parity; // 校验位
uint16_t USART_Mode; // USART 模式
uint16_t USART_HardwareFlowControl; // 硬件流控制
} USART_InitTypeDef;
       (1) USART_BaudRate:波特率设置。一般设置为 2400 9600 19200 115200 。标准库函数会根据 设定值计算得到 USARTDIV 值,从而设置 USART_BRR 寄存器值。
       (2) USART_WordLength:设置数据帧的长度8或9 。它由  USART_CR1 寄存器的 M 位的值来决定。
       (3) USART_StopBits:停止位设置,可选 0.5 个、 1 个、 1.5 个和 2 个停止。它由 USART_CR2 寄存器的 STOP[1:0] 位的值来决定。
        (4) USART_Parity:奇偶校验控制选择,可选 USART_Parity_No( 无校验 ) USART_Parity_Even( 偶 校验) 以及 USART_Parity_Odd( 奇校验 ) ,它设定 USART_CR1 寄存器的 PCE 位和 PS 位的值。
       ( 5) USART_Mode: USART 模式选择,有 USART_Mode_Rx USART_Mode_Tx ,允许使用逻辑或 运算选择两个,它设定 USART_CR1 寄存器的 RE 位和 TE 位。
        (6) USART_HardwareFlowControl:硬件流控制选择,只有在硬件流控制模式才有效,可选有使能 RTS、使能 CTS 、同时使能 RTS CTS 、不使能硬件流。 当使用同步模式时需要配置 SCLK 引脚输出脉冲的属性,标准库使用一个时钟初始化结构体 USART_ClockInitTypeDef 来设置,该结构体内容也只有在同步模式才需要设置。
六、USART时钟初始化结构体
typedef struct {
uint16_t USART_Clock; // 时钟使能控制
uint16_t USART_CPOL; // 时钟极性
uint16_t USART_CPHA; // 时钟相位
uint16_t USART_LastBit; // 最尾位时钟脉冲
} USART_ClockInitTypeDef;

  • 31
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值