STM32-串口通信详解

article/2025/10/16 16:02:31

目录

前言

一、通信接口背景知识

1. 并行通信和串行通信

2. 串行通信的分类

 二、STM32的串口通信基础

1. 串口通信接口

2. 串口通信框图

3. 串口通信相关寄存器

4. 波特率计算方法

三、库函数配置

1. 串口配置一般步骤

总结


前言

众所周知,串口通信是MCU最基本的通信方式,对于STM32来说也是如此。本文重点讲述STM32单片机的串口通信,主要包括的内容是:通信基础知识、串口通信原理、USART有关寄存器和自定义编写串口通信函数。


一、通信接口背景知识

1. 并行通信和串行通信

所谓通信,其实说白了就是处理器与外部设备之间的交流,就像电脑连接键盘、鼠标或打印机之类。计算机领域的通信一般有两种方式,即并行通信和串行通信。这两种方式的优缺点对比如下:

  • 并行通信

   -传输原理:数据各个位同时传输。

   -优点:速度快

   -缺点:占用引脚资源多

  • 串行通信

   -传输原理:数据按位顺序传输。

   -优点:占用引脚资源少

   -缺点:速度相对较慢

2. 串行通信的分类

由于本文所讲的串口通信属于串行通信,所以就不对并行通信做过多的讲解了,下面是串行通信的分类,按照数据的传送方向可以分为:

  • 单工:数据传输只支持数据在一个方向上传输
  • 半双工:允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;
  • 全双工:允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力。

为了清晰的表述这三种传输方向上的区别,我们看下图:
 

(a)单工通信        (b)半双工通信        (c)全双工通信

另一种分类方式是根据通信是否有时钟信号来划分的,分为同步通信和异步通信。

同步通信指的是带有时钟同步信号,比如:SPI通信、IIC通信;

异步通信指的是不带时钟同步信号比如:UART(通用异步收发器),单总线。

我们以下面的表格来详细对比串行通信接口

 二、STM32的串口通信基础

1. 串口通信接口

STM32共有两种串口通信接口,分别是:UART通用异步收发器,USART:通用同步异步收发器

对于大容量的STM32F10x系列芯片,包含3各USART和2个UART。UART异步通信的引脚连接方法如下:

 这里需要注意的是:TX引脚要连接另一个控制器的RX引脚,反之RX亦然。

下图是STM32大容量芯片的5个串口对应的引脚号,可以通过中文参考手册查询

 查阅官方手册,UART异步通信方式的特点如下:

  1. 全双工异步通信。
  2. 分数波特率发生器系统,提供精确的波特率。发送和接受共用的可编程波特率,最高可达4.5Mbits/s
  3. 可编程的数据字长度(8位或者9位);
  4. 可配置的停止位(支持1或者2位停止位);
  5. 可配置的使用DMA多缓冲器通信。
  6. 单独的发送器和接收器使能位。
  7. 检测标志:① 接受缓冲器  ②发送缓冲器空 ③传输结束标志
  8. 多个带标志的中断源。触发中断。
  9. 其他:校验控制,四个错误检测标志。

2. 串口通信框图

学习STM32单片机的外设,最重要的是要理清楚它的框图,下图就是串口通信的框图:

 从这个框图可以看出,STM32的串口通信是由最下面的波特率控制部分产生波特率,给来自PCLK1/2的时钟做预分频,再经过1/16分频后传给发送/接收其控制,最后分别发送给发送移位寄存器和接收移位寄存器。这两个寄存器分别在发送数据寄存器(TDR)和接收数据寄存器(RDR)的控制下完成和外部之间的数据发送和接收。

3. 串口通信相关寄存器

STM32串口通信的相关寄存器共有3个,分别是:

  • USART_SR状态寄存器
  • USART_DR数据寄存器
  • USART_BRR波特率寄存器

下面是来自中文参考手册的部分截图介绍:

 

还有一个寄存器是控制寄存器,用来存放串口的控制和中断相关配置位,这里不做展开了。

建议大家在学习基础外设(GPIO、定时器、外部中断、串口通信等)的时候不仅可以熟悉库函数的编写过程,寄存器编程也同样重要,不一定要掌握,理解即可。读者不要被寄存器编程吓住了,其实串口的寄存器相对于GPIO是很少的,配置过程也比较简单。

4. 波特率计算方法

 这是官方文档的信息,波特率预分频器是分数预分频器,为什么小数部分要乘以16呢,大家可以理解位最后的小数是四位,四位二进制的1111正好就是16(15)。

三、库函数配置

1. 串口配置一般步骤

  1. 串口时钟使能,GPIO时钟使能:RCC_APB2PeriphClockCmd();
  2. 串口复位:USART_DeInit(); 这一步不是必须的
  3. GPIO端口模式设置:GPIO_Init(); 模式设置为推挽复用以及浮空输入或者上拉输入(具体可参照中文参考手册)
  4. 串口参数初始化USART_Init();
  5. 开启中断并且初始化NVIC(如果需要开启中断才需要这个) NVIC_Init();USART_ITConfig();
  6. 使能串口:USART_Cmd();
  7. 编写中断处理函数USARTx_IRQHandler();
  8. 串口数据收发:void USART_SendData();//发送数据到串口,DR uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据
  9. 串口传输状态获取:

FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);

void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);

 


总结

这就是关于STM32的串口通信基本知识的介绍,学好这部分知识是日后深入学习STM32的基础,STM32虽然有很多串口,但是具体来说它们的配置过程基本上都是一样的,只不过是引脚不一样而已,希望大家反复学习这部分知识,做到掌握,这是日后深入学习STM32的基础。


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

相关文章

STM32串口通信

STM32串口通信 一、串口 1.串口概述 串口是单片机中最常用也是最简单的一种通信方式通信:两个或两个以上的设备进行数据交换 串口是用于两个设备之间的异步全双工通信 异步——》两个设备不需要共时钟 全双工——》两个设备之间服务于数据交换的“线”有两根 Tx&…

STM32-串口通信(串口的接收和发送)

文章目录 STM32的串口通信一、STM32里的串口通信二、串口的发送和接收串口发送串口接收 三、串口在STM32中的配置四、串口接收的两种实现方式1. 需要更改的地方2. 查询RXNE标志位3. 使用中断 总结 STM32的串口通信 本文在于记录自己的学习过程中遇到的问题和总结,各…

STM32串口通信详解

✅作者简介:嵌入式入坑者,与大家一起加油,希望文章能够帮助各位!!!! 📃个人主页:rivencode的个人主页 🔥系列专栏:玩转STM32 💬保持学…

MacOS 安装 Matlab R2021b 手记

MacOS 安装 Matlab R2021b Maci64手记 1.下载MATLAB R2021b 安装包 2.双击MatlabR2021b_Mac64.dmg打开安装包,双击InstallForMacOSX.app开始安装程序 3.出现「install_unix想要进行更改」,出入开机密码,点击好 4.出现安装界面,点击「高级选项」,选择「我有文件安装密…

linux安装matlabRuntime

1.找到自己需要的文件夹,下载压缩包,版本自己发挥 wget https://ssd.mathworks.com/supportfiles/downloads/R2021a/Release/6/deployment_files/installer/complete/glnxa64/MATLAB_Runtime_R2021a_Update_6_glnxa64.zip 2.解压 unzip MATLAB_Runtim…

四步离线安装matlab工具包

四步离线安装matlab工具包 把刚才的压缩包解压在matlab 工具包的文件夹。(其实哪里都行,防止误删) 我的是matlab安装目录下面 打开Matlab --“主页” --“设置路径” 3. 添加文件夹-选择工具包文件夹 4. 点击切换路径按钮到工具包目录&am…

安装Matlab R2022a/64位

Matlab R2022a/64位下载地址: 链接:https://pan.baidu.com/s/1pb_523QrMvu–nOcmV1bqQ 提取码:lbcc 上面失效的看看这个 链接:https://pan.baidu.com/s/14cVeXQOLBqGfq3aKT45vPw 提取码:piq7 怎么快速下可以私信我。…

如何安装matlab?官网下载详细教程

MATLAB下载和安装教程(官网下载) 很多人在遇到专业数据处理时都得用到专业的数学软件,matlab就是这样一款对于数据处理非常有帮助的支持数据分析、算法开发和建模的专业工科数学软件。那么,怎么可以快速的正确安装?下…

【首发】 ubuntu20.04安装matlab2021b/matlab2020b

文章目录 一、下载地址1.1 2021b下载链接(BT)1.2 2021a下载链接1.3 2020b CSDN下载链接 二、MATLAB2021b安装方法2.1 Mount .iso文件2.2 通过./install 启动安装程序2.3 输入正版Key安装2.4 直接下一步2.5 选安装文件夹(权限够)2.6 选需要的包2.7 选link…

服务器远程安装Matlab2015

因为在windows上跑matlab实验,出现内存不足的情况,因此,希望能在服务器上安装一个matlab。然后出现各种问题,花了一天时间才装好,特此记录下。因为对于没装过的童靴来说,每一个步骤都很关键,因此…

从零开始在linux服务器设置matlab-1.安装matlab

目录 0.安装matlab (1)安装x11客户端 1.下载ssh工具 MobaXterm 2.创建ssh连接 3.配置服务器x11转发 (1)安装matlab 1.上传安装包 2.挂载iso 3.安装 4.弹出gui,按照gui的指引操作 到此安装完成 0.安装matlab 安装matlab时因为需要gui 而linux服务器默认没有所以…

Ubuntu18.04安装Matlab2019b

1.下载Matalab2019b 链接: https://pan.baidu.com/s/1yEOnDnm0XqqyY2-jkPOQZQ 提取码: qwer 2.创建挂载文件目录 // 在任意目录下创建挂载文件目录(我是在temp目录) sudo mkdir matlab3.挂载镜像 sudo mount -o loop [镜像文件的路径] [指定的…

Ubuntu安装matlab2018a

一. 安装文件 链接: https://pan.baidu.com/s/1H2JWXVZjoNOkLhhpVj8gzg 提取码: rb21 文件目录: 二. 安装步骤 1. 解压Matlab2018aLinux64Crack.tar.gz文件: $ tar -xzvf Matlab2018aLinux64Crack.tar.gz 解压后的文件目录: 2. 建立挂…

如何安装matlab2016b

如何安装matlab2016b,详细步骤教程 首先下载软件R2016b_win64.iso,然后解压,或者挂载到光驱中,点击setup.exe运行。如果出现错误,cannot find appropriate setup file表示解压或者挂载出错了。重新解压或者挂载一下。 license选择…

Ubuntu20.04安装matlab详细教程

这里安装的是MATLAB2015b版本,其他版本也可参照这个安装步骤! 1. matlab2015b版本安装文件下载链接 链接: https://pan.baidu.com/s/1Xr1TFSrqDZAbhvyEff28rQ 密码: ojj0 2. MATLAB2015安装过程详解 下载的文件夹应该包含如下东西 第一步&#xff0c…

ubuntu18.04安装matlab2018

1. 一. 安装前的准备工作 将下载好的文件R2018a_glnxa64_dvd1.iso, R2018a_glnxa64_dvd2.iso, Crack放到目录/home/zzw/Downloads下 在该目录下新建dvd文件夹:mkdir dvd 二. 挂载镜像文件并安装Matlab 原文链接:https://blog.csdn.net/qq_37643960/a…

Ubuntu18.04 安装Matlab2021b

Ubuntu18.04/Linux下 安装Matlab2021b 1、软件下载2、安装3、安装matlab-support4、安装Troubleshotting5、安装成功开始使用6、更改系统默认快捷键7、可能出现的错误 1、软件下载 链接: https://pan.baidu.com/s/1e2w_ZXIoibMG6PfqVbf-6Q 提取码: dmfu解压后共有俩文件 2、…

Linux下安装Matlab

Linux下安装Matlab 安装包安装流程1.解压缩2.安装3.安装界面4.激活 使用1.环境变量配置2.计算分区选择3.运行4.并行 卸载 安装包 安装包上传服务器或者外置光驱安装。 我是把安装包上传到服务器,解压后安装到个人目录下,不需要root权限。 安装包下载链…

Linux安装Matlab

系统环境:Ubuntu 20.04Matlab版本:R2019b 首先下载Matlab的ios文件(这个版本有18G,再传到服务器上,真是漫长的修行。。) 在服务器上把ios文件单独放到一个目录里,比如叫Matlab/,然后…

MATLAB安装教程

比较适合学生党使用的是Matlab2016中文版 下载之后会有镜像文件,补丁文件和密钥 1.点击镜像文件 R2016a_win64.iso 2.点击setup.exe 3.选择使用文件密钥安装 5.填入密钥 6.更改默认路径之后,记住这个路径,待会打补丁时要用 7. 8. 解压补丁…