摘要:本章主要介绍STM32 的USART, 及其功能框图

1. USART简介

USART ((Universal Synchronous Asynchronous Receiver and Transmitter, 通用同步异步收发器), 是一 个串行通信设备,可以灵活地与外部设备进行全双工数据交换。有别于 USART 还有一个 UART(Universal Asynchronous Receiver and Transmitter),它是在 USART 基础上裁剪掉了同 步通信功能,只有异步通信。简单区分同步和异步就是看通信时需不需要对外提供时钟输 出,我们平时用的串口通信基本都是 UART。

USART 支持使用 DMA,可实现高速数据通信

2. USART 功能框图

2.1 引脚

TX:发送数据输出引脚。

RX:接收数据输入引脚。

SW_RX:数据接收引脚,只用于单线和智能卡模式,属于内部引脚,没有具体外部引 脚。

nRTS:请求以发送(Request To Send),n 表示低电平有效。如果使能 RTS 流控制,当 USART 接收器准备好接收新数据时就会将 nRTS 变成低电平;当接收寄存器已满时, nRTS 将被设置为高电平。该引脚只适用于硬件流控制。

nCTS:清除以发送(Clear To Send),n 表示低电平有效。如果使能 CTS 流控制,发送 器在发送下一帧数据之前会检测 nCTS 引脚,如果为低电平,表示可以发送数据,如果为 高电平则在发送完当前数据帧之后停止发送。该引脚只适用于硬件流控制。

SCLK:发送器时钟输出引脚。这个引脚仅适用于同步模式。

2.2 数据寄存器

USART 数据寄存器(USART_DR)只有低 9 位有效,并且第 9 位数据是否有效要取决于 USART 控制寄存器 1(USART_CR1)的 M 位设置,当 M 位为 0 时表示 8 位数据字长,当 M 位为 1 表示 9 位数据字长,我们一般使用 8 位数据字长。 USART_DR 包含了已发送的数据或者接收到的数据。USART_DR 实际是包含了两个 寄存器,一个专门用于发送的可写 TDR,一个专门用于接收的可读 RDR。当进行发送操 作时,往 USART_DR 写入数据会自动存储在 TDR 内;当进行读取操作时,向 USART_DR 读取数据会自动提取 RDR 数据。 TDR 和 RDR 都是介于系统总线和移位寄存器之间。串行通信是一个位一个位传输的, 发送时把 TDR 内容转移到发送移位寄存器,然后把移位寄存器数据每一位发送出去,接收 时把接收到的每一位顺序保存在接收移位寄存器内然后才转移到 RDR。 USART 支持 DMA 传输,可以实现高速数据传输,具体 DMA 使用将在 DMA 章节讲 解。

2.3 控制器

USART 有专门控制发送的发送器、控制接收的接收器,还有唤醒单元、中断控制等等。 使用 USART 之前需要向 USART_CR1 寄存器的 UE 位置 1 使能 USART,UE 位用来开启 供给给串口的时钟。发送或者接收数据字长可选 8 位或 9 位,由 USART_CR1 的 M 位控制。

2.3.1 发送器

当 USART_CR1 寄存器的发送使能位 TE 置 1 时,启动数据发送,发送移位寄存器的 数据会在 TX 引脚输出,低位在前,高位在后。如果是同步模式 SCLK 也输出时钟信号。

一个字符帧发送需要三个部分:起始位+数据帧+停止位。起始位是一个位周期的低电 平,位周期就是每一位占用的时间;数据帧就是我们要发送的 8 位或 9 位数据,数据是从 最低位开始传输的;停止位是一定时间周期的高电平。 停止位时间长短是可以通过 USART 控制寄存器 2(USART_CR2)的 STOP[1:0]位控制, 可选 0.5 个、1 个、1.5 个和 2 个停止位。默认使用 1 个停止位。2 个停止位适用于正常 USART 模式、单线模式和调制解调器模式。0.5 个和 1.5 个停止位用于智能卡模式。 当选择 8 位字长,使用 1 个停止位时,具体发送字符时序图见图 21-8。

当发送使能位 TE 置 1 之后,发送器开始会先发送一个空闲帧(一个数据帧长度的高电 平),接下来就可以往 USART_DR 寄存器写入要发送的数据。在写入最后一个数据后,需 要等待 USART 状态寄存器(USART_SR)的 TC 位为 1,表示数据传输完成,如果 USART_CR1 寄存器的 TCIE 位置 1,将产生中断。 在发送数据时,编程的时候有几个比较重要的标志位我们来总结下。

名称 描述

TE 发送使能

TXE 发送寄存器为空,发送单个字节的时候使用

TC 发送完成,发送多个字节数据的时候使用

TXIE 发送完成中断使能

2.3.2 接收器

如果将 USART_CR1 寄存器的 RE 位置 1,使能 USART 接收,使得接收器在 RX 线开 始搜索起始位。在确定到起始位后就根据 RX 线电平状态把数据存放在接收移位寄存器内。 接收完成后就把接收移位寄存器数据移到 RDR 内,并把 USART_SR 寄存器的 RXNE 位置 1,同时如果 USART_CR2 寄存器的 RXNEIE 置 1 的话可以产生中断。 在接收数据时,编程的时候有几个比较重要的标志位我们来总结下。

名称 描述

RE 接收使能

RXNE 读数据寄存器非空

RXNEIE 发送完成中断使能

2.4 小数波特率生成

波特率指数据信号对载波的调制速率,它用单位时间内载波调制状态改变次数来表示, 单位为波特。比特率指单位时间内传输的比特数,单位 bit/s(bps)。对于 USART 波特率与 比特率相等,以后不区分这两个概念。波特率越大,传输速率越快。 USART 的发送器和接收器使用相同的波特率。计算公式如下:

其中,fCK 为 USART 时钟, USARTDIV 是一个存放在波特率寄存器(USART_BRR) 的 一个 无符 号定 点数。 其中 DIV_Mantissa[11:0] 位 定义 USARTDIV 的 整数 部分 , DIV_Fraction[3:0]位定义 USARTDIV 的小数部分。

波特率的常用值有 2400、9600、19200、115200。下面以实例讲解如何设定寄存器值 得到波特率的值。 我们知道 USART1 使用 APB2 总线时钟,最高可达 72MHz,其他 USART 的最高频率 为 36MHz。我们选取 USART1 作为实例讲解,即 fPLCK=72MHz。为得到 115200bps 的波特 率,此时:

解 得 USARTDIV=39.0625 , 可 算 得 DIV_Fraction=0.0625*16=1=0x01 , DIV_Mantissa=39=0x27,即应该设置 USART_BRR 的值为 0x271。

2.5 校验控制

STM32F103 系列控制器 USART 支持奇偶校验。当使用校验位时,串口传输的长度将 是 8 位的数据帧加上 1 位的校验位总共 9 位,此时 USART_CR1 寄存器的 M 位需要设置为 1,即 9 数据位。将 USART_CR1 寄存器的 PCE 位置 1 就可以启动奇偶校验控制,奇偶校 验由硬件自动完成。启动了奇偶校验控制之后,在发送数据帧时会自动添加校验位,接收 数据时自动验证校验位。接收数据时如果出现奇偶校验位验证失败,会见 USART_SR 寄存 器的 PE 位置 1,并可以产生奇偶校验中断。

使能了奇偶校验控制后,每个字符帧的格式将变成:起始位+数据帧+校验位+停止位。

2.6 中断控制

USART 有多个中断请求事件,具体见表 21-4。

STM32 - USART简介相关推荐

  1. STM32:USART串口外设(内含:1.USART简介+2.USART基本结构+3.数据帧+4.起始位侦测+5.数据采样+6.波特率发生器)

    1.USART简介 USART是同步收发器,UART是异步收发器(主要). 停止位长度:可参考串口时序的终止端与起始端的长度. 同步模式:就是有CLK模式. 智能卡(刷卡),IrDA(红外发光管+红外 ...

  2. STM32 IO 简介

    STM32 IO 简介 1.IO介绍 2.仿真与下载 1.IO介绍 STM32 的 IO 口可以由软件配置成如下 8 种模式: 1. 输入浮空 2. 输入上拉 3. 输入下拉 4. 模拟输入 5. 开 ...

  3. 1. stm32 mcu简介

    1. stm32 mcu简介 1.1 stm32 mcu结构 1.2 STM32 MCU存储器映像 1.3 STM32 MCU系统时钟树 1.4 Cortex-M3简介 1.1 stm32 mcu结构 ...

  4. stm32 USART接收总线空闲中断--USART_IT_IDLE

    stm32 USART接收总线空闲中断--USART_IT_IDLE 版权声明:转载请注明作者和链接 https://blog.csdn.net/Hola_ya/article/details/815 ...

  5. 单片机搭建环境烧录方法_万物互联-stm32单片机简介、烧录、编程及其项目环境搭建...

    万物互联-stm32单片机简介.烧录.编程 前言:stm32单片机这里给出简单介绍,给不了解的朋友普及下硬件端的基本知识,叙述的较为简单,想深入研究的朋友可以去一些官方网站.论坛.博客汲取知识.最下端 ...

  6. stm32 usart的BRR寄存器的配置,程序是CMSIS中的,分析它是怎么实现的?(自己设置好波特率,库文件会根据波特率计算BRR的值,和以前STM8不一样,需要自己根据波特率计算BRR值再设置)

    stm32 usart的BRR寄存器的配置 stm32 专栏收录该内容 23 篇文章0 订阅 订阅专栏 程序是CMSIS中的,分析它是怎么实现的? 波特率由整数和分数两部分组成. RCC_GetClo ...

  7. ChibiOS系列:五、将STM32 USART与ChibiOS串行驱动程序配合使用

    本文翻译自:http://www.playembedded.org/blog/stm32-usart-chibios-serial/ 将STM32 USART与ChibiOS串行驱动程序配合使用 发表 ...

  8. STM32—USART串口发送+接收

    STM32-USART串口发送+接收 本文来自于<STM32--江科大>的笔记整理. 文章目录 STM32-USART串口发送+接收 10.3 串口发送 串口调试助手 10.3.1 数据模 ...

  9. STM32 USART使用奇偶校验位

    STM32 USART 无校验位时,数据位常用8位 当使用就校验位时,数据位应设置为9位. 奇偶校验位也包含在数据位中. 详见参考手册:

最新文章

  1. java中友元类_友元类成员的依赖关系|循环依赖
  2. bat no moudle named xxx
  3. 新网站如何在最短的时间内提升排名呢?
  4. 网站的次导航是什么?对网站优化有什么好处?
  5. tftp的c语言实现,GitHub - ideawu/tftpx: TFTP server and client implementation in C
  6. Android将数据库数据导出成excel格式的文本(CSV)
  7. mongodb spring 超时时间_拥抱NoSQL--谈Spring Data MongoDB的简单使用
  8. 5888. 网络空闲的时刻
  9. 最简单的基于FFmpeg的移动端样例:IOS 视频转码器
  10. Oracle运行set autotrace on报错SP2-0618、SP2-0611
  11. 编辑器eslint格式_ESlint 代码格式大坑vscode vetur,eslint 冲突
  12. idea安装2019
  13. android 7.0 截图,Android,_7.0系统拍照后,使用系统截图功能,截图保存时崩溃如何解决,Android - phpStudy...
  14. JAVA语言程序设计
  15. vb 连接 mysql数据库代码_vb连接access数据库方法和代码
  16. 你遇到过哪些质量很高的 Java 面试?
  17. 网易云音乐修改名字怎么老是服务器错误,网易云音乐为什么改了名字?网抑云是怎么回事...
  18. 记录毕设做小程序的坑(微信小程序体验版wx.request无法获取用户的openid)
  19. 大前端CPU优化技术--NEON自动向量化
  20. 在Matlab中绘制系统的根轨迹图

热门文章

  1. 小白应该怎么学java?
  2. 【gulimall】 p90开始-问题汇总
  3. 项目中qq邮件激活账号如何实现
  4. 2019年最佳WordPress会员插件
  5. 【微软2023.2.27 苏州实习一面笔试题】 罗马数字转整数
  6. 如何烙饼又软又好吃 家常烙饼的做法讲解
  7. 记一次API 接口定义 添加 @ApiOperation 注解触发中间件 bug 问题分析
  8. java标识符命名规范 java关键字 标识符
  9. css自动换行(css自动换行属性)
  10. HDU2665 Kth number 可持久化线段树