STM32 —— STM32 的串口通信

article/2025/10/14 11:01:53

STM32 —— STM32 的串口通信

STM32的串口通信接口有两种,分别是:UART(通用异步收发器)、USART(通用同步异步收发器)。而对于大容量 STM32F10x 系列芯片,分别有 3 个 USART 和 2 个 UART

串口通信过程:

image

目前还处于入门阶段,所以这里只介绍 USART 串口协议和通信方式

USART 和 UART

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

USART

详细内容可以看《STM32中文数据手册V10》的第 25 章

介绍

通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准 NRZ 异步串行数据格式的外部设备之间进行全双工数据交换。USART 利用分数波特率发生器提供宽范围的波特率选择。它支持同步单向通信和半双工单线通信,也支持 LIN(局部互连网),智能卡协议和 IrDA(红外数据组织) SIR ENDEC 规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。使用多缓冲器配置的 DMA 方式,可以实现高速数据通信

主要特性

  • 全双工异步通信;

  • 分数波特率发生器系统,提供精确的波特率。发送和接受共用的可编程波特率,最高可达4.5Mbits/s;

  • 可编程的数据字长度(8位或者9位);

  • 可配置的停止位(支持1或者2位停止位);

  • 可配置的使用DMA多缓冲器通信;

  • 单独的发送器和接收器使能位;

  • 检测标志:① 接受缓冲器 ②发送缓冲器空 ③传输结束标志;

  • 多个带标志的中断源,触发中断;

  • 其他:校验控制,四个错误检测标志。

USART 参数设置

串口通讯的数据包由发送设备通过自身的 TXD 接口传输到接收设备的 RXD 接口,通讯双方的数据包格式要规约一致才能正常收发数据

STM32中串口异步通信需要定义的参数:起始位、数据位(8位或者9位)、奇偶校验位(第9位)、停止位(1,15,2位)、波特率设置

UART串口通信的数据包以帧为单位,常用的帧结构为:1 位起始位+ 8 位数据位+ 1 位奇偶校验位(可选)+ 1 位停止位。如下图所示:

USART 功能详解

功能框图详解

image

框图的上部分,数据从 RX 进入到接收移位寄存器,后进入到接收数据寄存器,最终供 CPU 或者 DMA 来进行读取;数据从 CPU 或者 DMA 传递过来,进入发送数据寄存器,后进入发送移位寄存器,最终通过 TX 发送出去

在 USART 的发送过程和接收过程都需要通过波特率进行控制,那么波特率是怎么控制的呢?

在接收移位寄存器、发送移位寄存器都还有一个进入的箭头,分别连接到接收器控制、发送器控制,而这两者连接的又是接收器时钟、发送器时钟。也就是说,异步通信尽管没有时钟同步信号,但是在串口内部,是提供了时钟信号来进行控制的

接收器时钟和发送器时钟又被连接到同一个控制单元,也就是说它们共用一个波特率发生器。同时也可以看到接收器时钟(发生器时钟)的计算方法、USRRTDIV的计算方法

功能引脚

  1. TX:输出引脚,用于发送数据

  2. RX:输入引脚,用于接收数据

  3. SW_RX:输入引脚,用于单线和智能卡模式,属于内部引脚,没有具体外部引脚引出

  4. RDA_OUT:输出引脚,用于发送红外数据

  5. RDA_IN:输入引脚,用于接收红外数据

  6. nRTS:请求发送(Request To Send),n 表低电平有效。若使能 RTS 硬件流控制,当 USART 接收器准备好接收数据时,nRTS 有效,即它为低电平;当接受寄存器以满时,nRTS 被设置为高电平

  7. nCTS:请求以发送(Clean To Send),n 表低电平有效,若使能 CTS 硬件流控制,发送器在发送下一帧数据前会检测 nCTS 引脚状态,若为低电平表可以发送数据,若为高电平,则在发送完当前数据帧之后停止发送

  8. SCLK:发送器时钟输出引脚,仅适用于同步模式

数据寄存器

USART 数据寄存器(USART_DR)只有低 9 位有效

image

第 9 位是否有效,要取决于控制寄存器1(USART_CR1)中的第 12 位 M ,当 M 为 0 时,数据长为 8 位,当 M = 1 时,数据长为 9 位,我们一般使用的时 8 位数据字长

image

实际上 USART_DR 包含了两个寄存器,一个给发送用(TDR),一个给接收用(RDR),该寄存器兼具读和写的功能

TDR 寄存器提供了内部总线和输出移位寄存器之间的并行接口。RDR 寄存器提供了输入移位寄存器和内部总线之间的并行接口

进行发送数据操作时,往 USART_DR 写入数据会自动存储在 TDR 内,当进行读取数据操作时,向 USART_DR 读取数据会自动提取 RDR 数据。串行通信时一位一位传输的,所以 TDR 和 RDR 寄存器都是介于系统总线和移位寄存器间的:发送数据时把 TDR 内容转移到发送移位寄存器上,接收数据时则是把接收到的每一位顺序保存在接收移位寄存器内进而转移到 RDR

控制器

STM32 的 USART 由专门用于控制发送、接收、唤醒单元和中断等的寄存器,如:

  1. USART_CR1 寄存器的 UE 位用于开启/关闭给串口的时钟源的,使用 USART 之前向该位写 1 用于使能 USART

  2. USART_CR1 寄存器的 M 位用于控制发送/接收数据字长可选 8 位/ 9 位

  3. USART_CR1 寄存器的 TE 位用于启停数据发送,向该位写 1 时发送移位寄存器上的数据会从 TX 引脚输出,低位在前,高位在后。如果设置 USART 为同步模式,SCLK 引脚将会输出时钟信号。

  4. USART_CR1 寄存器的 RE 位用于开启/关闭 USART 的接收,若为 1 ,接收器在 RX 线开始接收数据帧的起始位,确定到起始位后就根据 RX 线电平状态把数据存放在接收移位寄存器内,接收完成后就要接收移位寄存器移到 RDR 内,并将 USART_SR 寄存器的 RXNE 位置 1 (若 USART_CR2 寄存器的 RXNEIE 置 1 的话此时可以产生中断)

一般我们比较常用的、且比较重要的寄存器有:

发送数据时:

TE:发送使能
TXE:发送寄存器为空
TC: 发送完成
TXIE:发送完成中断使能

接收数据时:

RE:接收使能
RXNE:读数据寄存器非空
RXNEIE:发送完成中断使能

波特率设置

USART 的发送器和接收器使用相同的波特率,计算公式为:Tx/Rx 波特率 = USART 的时钟频率 / (16 * USARTDIV)

USARTDIV 是一个存放波特率寄存器(USART_BRR)的无符号浮点数

image

以 USART1 为例,它是挂接在 APB2 总线上的:

image

即 USART1 的时钟源频率为 72MHz,那么如果要得到 115200 的波特率,即:
115200 = 72000000 / (16 * USARTDIV),USARTDIV = 39.0625,
同理计算可得,DIV_Fraction = 0.0625 * 16 = 1,DIV_Mantissa = 39,USART_BRR 的值设置为 0x271

校验控制

STM32F103 系列单片机的 USART 支持奇偶校验,USART_CR1 寄存器的 PCE 位置 1 就可以启动奇偶校验,奇偶检验由硬件自动完成。使能奇偶校验控制后,每个字符帧的格式变为:

起始位 + 数据帧 + 校验位 + 停止位

注意,当使用校验位时,USART_CR1 寄存器的M位需要设置为 1 ,即 9 位模式,因为串口传输的长度为 8 位数据帧加上 1 位校验位共 9 位。启动奇偶校验控制后,在发送数据帧时会自动添加校验位,接收数据帧时自动验证校验位。接收数据时若出现奇偶校验位验证失败,USART_SR 寄存器的 PE 位会被置 1 并可以产生奇偶校验中断

中断控制

USART有多个中断请求事件,常用中断请求有:

中断事件事件标志使能位
发送数据寄存器为空TXETXEIE
CTS标志CTSCTSIE
发送完成TCTCIE
准备好读取接收到的数据RXNERXNEIE
奇偶校验错误PEPEIE

参考资料

  1. STM32串口USART通讯

  2. 【STM32】串口通信基本原理(超基础、详细版)

  3. 【STM32】串口相关配置寄存器、库函数(UART一般步骤)


http://chatgpt.dhexx.cn/article/NXqU3dhk.shtml

相关文章

STM32——串口通信

首先声明,本文是在查阅资料之后进行的一些内容总结,仅用于个人学习记录。 一、串口通信基本原理 按照数据传送方向分类 1、单工:数据传输只支持数据在一个方向上传输 2、半双工:允许数据在两个方向上传输。但是,在…

STM32 - 串口(USART)通信详解

STM32 - 串口(USART)通信 文章目录 STM32 - 串口(USART)通信1、STM32 串口简介2、串口的工作方式3、串口通信协议3.1: 物理层3.1.1: TTL、RS-232 标准3.1.2:USB 转串口(划重点&#…

STM32-串口通信详解总结

1. 串口通信方式 UART:universal asynchronous receiver and transmitter 通用异步收/发器,即串行异步全双工收发器。 USART: universal synchronous asynchronous receiver and transmitter 通用同步/异步收/发器,即串行异步/同步全双工收发…

(十三)STM32——串口通信(UART)

目录 学习目标 内容 通信方法 并行通信 串行通信 通信方向 通信方式 UART 特点 串口参数 通信流程 寄存器 USART_SR USART_DR USART_BRR 过程 代码 运行结果 运行结果 遇到的问题 总结 学习目标 本节我们要学习的的是STM32的通信部分,主要介绍…

STM32—串口通讯详解

串口通讯目录 物理层协议层USART简介开发板与上位机的连接代码讲解:一.初始化结构体二.NVIC配置中断优先级三.USART配置函数讲解四.传输数据的函数:1.发送一个字节2.发送字符串3.重定向printf函数发送字符串4.重定向getchar函数接收字符5.通过中断接收 结…

stm32实现串口通信和LED灯点亮

stm32串口通信 串口协议和RS—232标准RS232电平与TTL电平的区别USB/TTL转RS232 CH340串口安装安装stm32cubemx并编写程序实现led灯的周期闪烁 用stm32完成USART串口通信接下来进行波形观察总结 两个工程完整代码 串口协议和RS—232标准 串口通信协议:是指规定了数据…

iconCls和el-icon属性对应的图标大全(带图)

千言万语,不如直接上图效果好 element UI el-icon 直接看官网都有,很全 https://element.eleme.io/#/zh-CN/component/icon

ext 中的iconCls配置以及使用以及路径问题

使用过Ext(http://www.extjs.com)的同志都应该知道,每一个组件(Component)在初始化的时候,都会有一个配置参数(Config){在Ext2中,基本上所有的组件的构造函数只接受一个参…

EXT iconCls说明

今天学习ext 看examples中的事例,其中有一个地方是这样写的: new ButtonPanel( Icon Only, [{ iconCls: add16 },{ iconCls: add24, scale: medium },{ …

cls extjs5_73. 解决ExtJS TreePanel 的 iconCls设置问题

转自:https://blog.csdn.net/hanchuang213/article/details/62881568 很久没有写代码了,最近在做一个在线帮助网站,于是又捡起了 ExtJS,我用 TreePanel 做为左边栏的导航树,我希望能够根据节点指向的内容来定义节点的图…

常规功能和模块自定义系统 (cfcmms)—025开发日志(创建iconCls的field)

常规功能和模块自定义系统 (cfcmms)—025开发日志(创建iconCls的field) 这一节是临时插入的工作日志。 在本系统中可以自定义某些图标,图标的样式都是手工录入的,为了能直观的选择iconCls中的图标,开发了此控件。extjs中内置了font-awesome字…

UniGui中使用IconCls

在使用UniGui的时候,我时候我们需要使用系统自己的图标,通常会如下图一样的使用方式: 选择ICON对齐方式及系统定义好的ICON对应值。但实际上UniGui中可以使用的图标远远大于他已定义的这十几个(或者应该说是EXJS原本就多&#xff…

UniGui iconCls字符图标的引用

游览unigui官方论坛,发现了iconCls字符图标的引用功能,测试了一下,很好用。 引用格式:iconCls: {fontCls} {iconPrefix}-{iconName} 例子:iconCls: x-fa fa-home

Easyui-iconCls 的队应图标

(iconCls : ‘icon-cancel’,)(iconCls : ‘icon-add,)(iconCls : ‘icon-edit,) (iconCls : ‘icon-remove,)(iconCls : ‘icon-save,)(iconCls : ‘icon-cut,) (iconCls : ‘icon-ok,)(iconCls : ‘icon-no,)(iconCls : ‘icon-reload,) (iconCls : ‘icon-search,)(iconC…

easyui iconCls属性值

easyui iconCls属性值 icon-add icon-print icon-mini-add icon-cvs icon-play icon-refresh icon-edit icon-help icon-mini-edit icon-pencil icon-remove icon-undo icon-mini-refresh icon-save icon-redo icon-cut icon-back icon-ok icon-sum icon-no icon-tip ico…

拓展07-EasyUI自定义iconCls菜单图标icon

1、效果图 左侧菜单树,和选项卡tabs显示自定义图标。 先推荐一个icon图标下载的网站:https://www.easyicon.net/ 2、iconCls属性 3、准备图标icon 可以从上面推荐的网址下载,基本上各种类型都有 将下载好的图标放入easyui图标文件夹内web…

EXTJs 中icon 与iconCls的区别及用法!

1、这俩个都是引入小图片 区别在于: (1)、icon :"直接写图片在项目上的路径" (2)、iconCls:"css样式名称" icon 显示时为下面的添加: iconCls 显示为下面的添加: 大家都看到区别了吧! 2、iconCls代码&…

分类算法之二——特征提取与特征选择

典型应用——文本分类 1)文本信息的表示,从原始的文本转化为结构化的可处理信息; 2)目前常采用向量空间模型来描述文本向量,通常文本向量维度较高,使得分类效率低下; 3)必须对特…