STM32串口驱动

article/2025/10/16 15:19:14

首先了解串口通信的一些基本原理:

⚫ 串口通信: 串口通信是指数据通过一条数据线(或者两条差分线)一位接着一位的传输出去。串口通信的优点是占用硬件资源少,且传输距离较远,缺点是传输速度慢(这些优缺点都是相对于并口通信而言,其实在平时应用中串口的通信速度完全能够满足绝大部分通信场景的要求)。

⚫ 并口通信 :并口通信是说通过多条数据线一次性的将数据传输出去,类似于多车道,其优点当然就是传输速度快,但是缺点也很明显,第一它占用更多的硬件资源,第二是它的传输距离短,对 PCB 布线有更高的要求,因为每条数据线如果不等长会导致寄生电容也不同,最终会在数据线之间产生传输延时,导致数据传输失败。并口一般应用在 LCD 显示和快速存储设备上面。 

⚫ 单工通信 :单工通信是指无论在何时数据的流向是单向的,接收端只负责接收不具备发送功能,发 送端只负责发送,不具备接收功能。

⚫ 半双工通信 :半双工通信是指数据传输方向是双向的,但是在同一时刻只允许数据单向传输,比如 UART 和 IIC

⚫ 全双工通信 :全双工通信则支持在同一时刻数据可以双向传输,比如 SPI

⚫ 同步通信方式: 同步通信方式是指收发双方之间通过一条时钟信号线来同步数据的传输,在发生传输时 必须在时钟线的同步下将数据一位一位的传输出去,这种方式传输速度较快,但是因为时钟和数据线是单独分开的,因此它的传输距离较近,典型的应用就是 IIC 和 SPI,他们都有一 条时钟线来同步数据线上的位传输。

⚫ 异步通信方式: 异步通信方式是指,收发双方没有数据线同步,要通过特定的起始以及停止标志位来判 断此时数据是否开始传输以及是否传输完成。另外异步通信的收发双发要保证通信速度的统 一,典型的就是 UART,RS485 等。 

UART(Universal Asynchronous Receiver/Transmitter,通用异步收发传 输器)属于异步串行通信,UART 是平时使用最多的一个串行通信方式,主要应用场景如 下:

1. 用于打印程序调试信息 (需要重定向)

2. 和上位机配套软件通信,使得我们可以通过上位机来查看或者设置下位机 (人机交互)

3. 用于 ISP 或者 IAP 程序下载(串口收发数据)

STM32F103RCT6 系统控制器有三个 USART 和两个 UART,其中 USART1 和时钟来源于 APB2 总线时钟,其最大频率为 72MHz,其他四个的时钟来源于 APB1 总线时钟,其最大频率为 36MHz。UART 只是异步传输功能,所以没有 SCLK、nCTS 和 nRTS 功能引脚。

STM32F103C8T6 单片机有三个 USART,USART 和 UART 的区别在于 USART 支持同步模式,在同步模式下有一个时钟信号线用于同步数据,但是我们平时使用的都是 UART 的异步通信,可以说 UART 是 USART 的一个子集,除此之外 STM32 的 USART 还支持 LIN(局部互连网),智能卡协议和 IrDA SIR ENDEC 规范,但是平时用的最多就是 UART,

那么要想使用 UART,就必须确保收发双方的通信约定要一致,这些约定包括:波特率(通信速度),数据位(8 位或 9 位),停止位个数(1 位,1.5 位,2 位),校验方式(奇校验, 偶校验,无校验)。波特率就是要制定双方通信的速度,我们经常使用的波特率有(1200,2400,4800,9600,115200),波特率越大,传输速度就越快。数据位就是我们想要传输的有效数据的部分,因为一 个字节是 8 位,因此经常使用的也是 8 位数据位,一般 9 位数据位的应用场合有以下几种:

1. 8 位数据的扩展(8 位可以表示 256 种可能,9 位可以表示 512 种可能)

2. 使用第 9 位来表示此时数据传输的模式,第九位为 1 代表此时是读模式,为 0 表示是写模式。

3. 使用第 9 位作为负数,例如第 9 位为 1 表示-,第 9 位为 0 表示+

另外停止位,停止位是双发通信的结束标志,常用的是1位停止位,最后是校验方式,校验可以保证数据传输的正确性、完整性,但是会增加数据帧的长度,通常我们使用无奇偶校验。(只能够知道错误,不能修改错误) 

来源STM32F10XXX参考手册:

        串口规定每次只发送一个字节,因为我们知道串口是通过bps时间差从而得到的高低电平(0,1)的切换的,每次发送一个字节就可以避免形如11111111情况下的累计误差的出现。并且在空闲的时候都是高电平1的,发送数据的时候都是先发低位,再发高位。

下面看一下 STM32中USART 的结构框图:

        UART 由三大部分组成:第一部分就是用于设置和标记传输模式的控制寄存器和标志寄存器部分(黄色高亮区域),第二部分是引脚通信(绿色高亮),该部分和发送/接收移位 寄存器进行连接,第三部分是数据转换部分(蓝色高亮),该部分将发送数据寄存器内的数据通过移位寄存器传输到 TXD 引脚,接收同理。

要想使用 UART,需要先进行配置:

1. 配置 GPIO,TXD 引脚要设置为复用推挽输出,RXD 要设置为浮空输入

2. 配置 UART,包括波特率、数据位、停止位、奇偶校验位以及是否使用硬件流控,硬 件流控通过 RTS 和 CTS 作为流控引脚,我们一般应用是不需要的。

3. 如果想实现串口的发送或接受中断,那么还要设置 NVIC。

串口驱动程序:

         在初始化函数中,依次初始化了用于通信的 TXD 和 RXD 引脚,然后设置了串口的波特率 为 9600,8 位数据位,1 位停止位,无奇偶校验位,无硬件流控,USART_Init()函数用于将 各个设置写到对应寄存器当中,生效设置, USART_ITConfig(USART1, USART_IT_RXNE, ENABLE)函数用于开启 USART 中的某个中断,USART 的中断非常多,有发送数据寄存器空中断,发送完成中断,接收寄存器非空中断等等,这里选择接收寄存器非空中断,它的意思是说当接收数据寄存器中接收到数据后它会产生中断,跳转到对应串口的中断服务函数中,添加这条语句是为下一个串口实验准备的。

 编写中断服务函数发送接收数据:

发送函数:

接收函数:

         USART_SendData()函数用于将参数 byte 填入到发送数据寄存器当中,byte 是 16 位的 原因是 byte 要支持 9 位数据位的情况。 while 循环用于等待这一字节发送完成才结束该函数。USART_FLAG_TC 就是发送完成的标志,如果把该条语句注释掉,就会导致发送不出数据,因为在本次数据还没发送完成时第二次发送任务就又来了(假设是连续发送的场 合),导致数据不停的被刷新。 

串口接发中断服务程序:

注意:正如前面所讲,可以利用串口打印调试的信息,但是前提要对打印函数重定向,有关printf函数的重定向可以看我另一篇文章。 

更多优质文章博客:STM32之串口相关配置_Swiler的博客-CSDN博客_stm32串口配置


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

相关文章

STM32串口

使用百问网的STM32F103MINI开发板完成下面实验。 1、通过STM32CubeMX配置串口。 串口1选择Asynchronous,异步通信。 115200bps,8N1,默认即可。 2、串口发送数据。 STM32Cube生成代码后,在main.c的while(1)前面加一句。 HAL_U…

STM32 串口详解

目录 01、USART的特点 02、USART简介 2.1、数据传输模型 2.2、帧结构 2.3、波特率 03、STM32的USART 04、代码配置 01、USART的特点 USART是通用异步收发传输器(UniversalAsynchronousReceiver/Transmitter),通常称作UART,是一种异步…

STM32入门教程——串口通讯

目录 1.认识串口 2.stm32串口介绍 2.1 查询方式 2.1 中断方式 2.2 DMA方式 3.使用stm32串口实现printf 串口作为嵌入式设备最常用的外设之一,被广泛的应用。本文介绍STM32串口的如何使用。从以下几个方面介绍: 1.认识串口 常用串口的引脚主要由TX…

STM32—串口

串口介绍 串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。串行接口(Serial Interface)是指数据一位一位地顺序传送。其特点是通信线路简单,只…

【stm32】串口通信

串口通信 一、串口通信协议原理二、usart功能框图三、stm32库的配置 一、串口通信协议原理 串口在嵌入式系统当中是一类重要的数据通信接口,其本质功能是作为 CPU 和串行设备间的编码转换器。当数据从 CPU 经过串行端口发送出去时,字节数据转换为串行的…

STM32-串口通信详解

目录 前言 一、通信接口背景知识 1. 并行通信和串行通信 2. 串行通信的分类 二、STM32的串口通信基础 1. 串口通信接口 2. 串口通信框图 3. 串口通信相关寄存器 4. 波特率计算方法 三、库函数配置 1. 串口配置一般步骤 总结 前言 众所周知,串口通信是MC…

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选择…