STM32 USART串口

news2024/11/26 17:45:24

什么是串口

串口是串行接口 (Serial Interface)的简称,它是指数据一位一位地顺序传送,其特点是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。一条信息的各位数据被逐位按顺序传送的通讯方式称为串行通讯。串行通讯的特点是:数据位的传送,按位顺序进行,最少只需一根传输线即可完成;成本低但传送速度慢。串行通讯的距离可以从几米到几千米;根据信息的传送方向,串行通讯可以进一步分为单工、半双工和全双工三种。

STM32的USART简介

在STM32的参考手册中,串口被描述成通用同步异步收发器(USART),它提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。有别与USART,还有一个UART,它在USART基础上裁剪掉了同步通信功能,只有异步通信。简单区分同步和异步就是看通信时需不需要对外提供时钟输出,我们平时用的串口通信基本都是 UART。

串口通信一般是以帧格式传输数据,即一帧一帧传输,每帧包含有起始信号、数据信息、停止信息,可能还有校验信息。USART 满足外部设备对工业标准 NRZ 异步串行数据格式的要求,并且使用了小数波特率发生器,可以提供多种波特率,使得它的应用更加广泛。USART 支持同步单向通信和半双工单线通信;还支持局域互连网络 LIN、智能卡(SmartCard)协议与 lrDA(红外线数据协会) SIR ENDEC规范。USART支持使用 DMA,可实现高速数据通信。

硬件连接

USART通过3个引脚与其他设备连接在一起,任何USART双向通信至少需要2个引脚:接受数据输入(RX)和发送数据输出(TX)。  

RX: 接受数据串行输入。通过过采样技术来区别数据和噪音,从而恢复数据。 

TX: 发送数据输出。当发送器被禁止时,输出引脚恢复到它的I/O端口配置。当发送器被激活,并且不发送数据时,TX引脚处处于高电平。在单线和智能卡模式里,此I/O口被同时用于数据的发送和接收。

USART功能框图剖析

1、功能引脚

TX:发送数据输出引脚。

RX:接收。

SW_RX:数据接收引脚,属于内部引脚。

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

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

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

以STM32F103RC系列为例,USART1的时钟来源于APB2总线时钟,最大频率为72MHZ,其他4个时钟来源于APB1总线时钟,最大频率36MHZ。UART只有异步传输功能,没有SCLK、nCTS和nRTS功能引脚。

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 传输,可以实现高速数据传输。

3.控制器

USART有专门控制发送的发送器、控制接收的接收器,还有唤醒单元、中断控制等。

使用USART之前需要向USART_CR1寄存器的UE位置1使能USART,UE位用于开启供给串口的时钟。发送或者接收数据字长可选8或9位,由USARTT_CR1的M位控制。

1)发送器

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

一个字符帧发送需要3部分:起始位、数据帧、停止位。起始位是一个位周期的低电平,位周期就是每一位占用的时间 ;数据帧就是我们要发送的8或9位数据,数据是最低位开始传输的;停止位是一定时间周期的高电平。

停止位的时间长短可以通过USART控制寄存器2(USART_CR2)的STOP[1:0]位控制,可选0.5个、1个、1.5个、2个停止位。默认使用1个停止位。2个停止位适用于正常USART模式、单线模式和调制解调器模式。0.5和1.5个停止位用于智能卡模式。

当发使能位TE置1之后,发送器开始会发送一个空闲帧(一个数据帧长度的高电平),接下来就可以往USART_DR寄存器写入要发送的数据。在写入最后一个数据后,需等待USART状态寄存器(USART_SR)的TC位为1,表示数据传输完成。USART_CR1寄存器的TCIE位置1,则产生中断。

发送数据时,几个重要的标志位如下:

TE:发送使能。

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

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

TXIE:发送完成中断使能。

2)接收器

将CR1寄存器的RE位置1,使能USART接收,使得接收器在RX线开始搜索起始位。在确定起始位后,就根据RX线电平状态把数据存放在接收移位寄存器内。接收完成后就把接收移位寄存器的数据移到PDR内,并把USART_SR寄存器的RXNE位置。如果USART_CR2寄存器的RXNEIE置1可以产生中断。

接收数据时,几个重要的标志位如下:

RE: 接收使能。

RXNE:读数据寄存器非空。

RXNEIE:发送完成中断使能。

4.小数波特率生成

USART 的发送器和接收器使用相同的波特率。计算公式如下:

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

例如:p_Mantissa=24(0x18),p_Fraction=10(0x0A),此时 USART_BRR 值为0x18A;那么USARTp的小数位10/16=0.625;整数位24,最终USARTp的值为24.625。

如果知道 USARTp 值为 27.68,那么 p_Fraction=16*0.68=10.88,最接近的正整数为 11,所以 p_Fraction[3:0]为 0xB;p_Mantissa=整数(27.68)=27,即为 0x1B。

波特率的常用值有 2400、9600、19200、115200。下面以实例讲解如何设定寄存器值得到波特率的值。

我们知道 USART1 使用 APB2 总线时钟,最高可达 72MHz,其他 USART 的最高频率为 36MHz。我们选取 USART1 作为实例讲解,即 f PLCK =72MHz。为得到 115200bps 的波特率,此时:

115200 =72000000/(16 ∗ USARTp)

解 得 USARTp=39.0625,可 算 得 p_Fraction=0.0625*16=1=0x01 ,p_Mantissa=39=0x27,即应该设置 USART_BRR 的值为 0x171。

5.校验控制

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

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

根据M位定义的帧长度,可能的USART帧格式列在下表中。

6.中断请求

对嵌入式物联网感兴趣的小伙伴,可以多了解一下相关信息。(看过来)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/665691.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

优秀的 Verilog/FPGA开源项目介绍(三十七)- MATH库

DSP介绍 数字信号处理( Digital Signal Processing)技术广泛地应用于通信与信息系统、信号与信息处理、自动控制、 雷达、军事、航空航天、医疗、家用电器等许多领域。DSP 技术可以快速地对采集的信号进行量化、变换、滤波、估值 、增强、压缩、识别等处理&#xff…

2023 linux驱动中probe函数的返回值,返回0成功。返回负数则失败,这个时候驱动向系统申请的有关资源都会被释放,如中断号,申请的内存等。实际测试。

一、在linux 驱动里面申请一个gpip&#xff0c;&#xff0c;gpip2b4 变换是 76 &#xff0c;dts 如下&#xff1a; m117b45 {compatible "xxx,m117b";reg <0x45>;pinctrl-names "default";pinctrl-0 <&m117b_gpio>;pwdn-gpios <&a…

数据库数据更新:从内存到磁盘,一步步揭开数据的神秘面纱!

大家好&#xff0c;我是小米&#xff01;今天我要和大家分享一下数据库数据更新的流程。作为一名热衷于技术分享的小伙伴&#xff0c;我希望通过本篇文章&#xff0c;帮助大家更好地理解数据库数据更新的过程。废话不多说&#xff0c;让我们开始吧&#xff01; 获取数据 在数据…

PM3328BP-6电源模块PIONEER MAGNETICS

PM3328BP-6电源模块PIONEER MAGNETICS PM3328BP-6电源模块PIONEER MAGNETICS DCS中的先进控制技术 DCS在控制上的最大特点是依靠各种控制、运算模块的灵活组态&#xff0c;可实现多样化的控制策略以满足不同情况下的需要&#xff0c;使得在单元组合仪表实现起来相当繁琐与复杂…

基于GO实现的简易博客,附源码

1、简介 此博客系统主要是基于GO、Gin、Gorm进行开发&#xff0c;以及采用lay-ui框架进行前端界面的开发&#xff0c;项目包含功能众多&#xff0c;基本上涵盖了博客系统的大部分需求。 此项目适合开发者练手学习&#xff0c;同时也适合高校毕业设计的作品。 以下对作品进行…

#经验分享#消防电源强切故障

工业园火灾报警控制器显示&#xff0c;13#厂房电源强切报故障&#xff0c;经过紧急处理&#xff0c;成功解决了故障问题。 据了解&#xff0c;故障原因是71#强切模块被修复大门时损坏模块破碎无法进行修复&#xff0c; 只留有接线底座&#xff0c;测试并检查底座线路正常。 坏…

如何查看jar包的官网地址

https://mvnrepository.com/ 使用artifactId搜索 点击要查看的版本 查看HomePage LicenseApache 2.0CategoriesJSON LibrariesTagsformatjsonOrganizationAlibaba GroupHomePageGitHub - alibaba/fastjson2: &#x1f684; FASTJSON2 is a Java JSON library with excellent…

Citespace和vosviewer文献计量学可视化SCI论文高效写作方法

【基于Citespace和vosviewer文献计量学相关论文 】 文献计量学是指用数学和统计学的方法&#xff0c;定量地分析一切知识载体的交叉科学。它是集数学、统计学、文献学为一体&#xff0c;注重量化的综合性知识体系。特别是&#xff0c;信息可视化技术手段和方法的运用&#xff…

tp6+企业付款到零钱

一 开通条件&#xff0c;就是首先要在微信平台设置好。 以下微信文档里有的&#xff0c;我这里大概掠几项比较重要的。 付款资金 企业付款到零钱资金使用商户号余额资金。 根据商户号的账户开通情况&#xff0c;实际出款账户有做区别&#xff1a; ◆ 默认情况下&#xff0c…

四、kafka集群与可靠性

Kafka集群的目标 1、高并发 2、高可用&#xff08;防数据丢失&#xff09; 3、动态伸缩 Kafka集群规模如何预估 吞吐量&#xff1a; 集群可以提高处理请求的能力。单个Broker的性能不足&#xff0c;可以通过扩展broker来解决。 磁盘空间&#xff1a; 比如&#xff0c;如…

C# 生成XML文档中如何去掉 xmlns=““

如果在XML 文档的指定了默认的命名空间&#xff0c;那么产生的文档中将会出现xmlns“”。 如何去掉这个烦人的xmlns“”? 网络上似乎都没有讲明白。有人提示: 当我们在AppendChild的时候&#xff0c;如果ParentNode是带有xmlns属性的&#xff0c;而你新加的节点&#xff0c;在…

SpringBoot 高校实验室资产管理系统-计算机毕设 附源码85189

SpringBoot高校实验室资产管理系统 摘 要 随着计算机技术的发展&#xff0c;特别是计算机网络技术与数据库技术的发展&#xff0c;使人们的生活与工作方式发生了很大的改观。本课题研究的高校实验室资产管理系统&#xff0c;主要功能模块包括后台首页&#xff0c;轮播图&#…

WindowManager中Surface申请流程

WindowManager中Surface申请流程 1、SurfaceFlinger 和 WindowManager2、WindowManager中Surface申请流程2.1 WMS侧添加界面时scheduleTraversals()2.2 Window更新过程时scheduleTraversals()2.3 Surface初始化申请2.4 简易时序图 3、对应画布Layer创建3.1 简易时序图 android1…

【Vue3 页面美化】常用组件库推荐

Vue 作为一款深受广大群众喜欢的前端框架&#xff0c;拥有众多优秀的开源 UI 组件库&#xff0c;这里整理了一下供大家参考。 这几套框架主要用于后台管理系统和移动端的制作&#xff0c;方便开发者快速开发。 一、PC 端 UI 库 1.1 Element Plus 官网地址&#xff1a;https…

基于阿里云免费算力自建LLM(类GPT)大模型

这会是一个关于 ChatGPT 的系列文章&#xff0c;主要记录老胡日常使用 ChatGPT 的思考和一些有趣的开源项目&#xff0c;然后这些信息我都会汇总到一个 ChatGPT 信息群(免费&#xff0c;目的是为了交流)&#xff0c;有兴趣的朋友可以联系我进群 &#x1f973;。 目前开源的 LLM…

sql总理论加实践

一、基础查询 DQL语法 SELECT 字段列表 1.设置别名 SELECT 字段1[别名],字段二[别名]......FROM 表名 WHERE 条件列表; 2.查询多个字段 SELECT 字段1,字段2,字段3......FROM 表名; SELECT * FROM 表名; 3.去除重复记录 DISTANT FROM 表明列表 WHERE 条件列表(条件…

Stable Diffusion: 利用Latent Diffusion Models实现高分辨率图像合成

原文链接&#xff1a; Stable Diffusion: 利用Latent Diffusion Models实现高分辨率图像合成 High-Resolution Image Synthesis with Latent Diffusion Models 01 The shortcomings of the existing works?02 What problem is addressed?03 What are the keys to the solutio…

RESTful API 中的 HTTP 方法有哪些?

RESTful API 中的 HTTP 方法有哪些&#xff1f; RESTful API 是一种基于 HTTP 协议的 API 设计风格&#xff0c;它使用 HTTP 协议中的方法来定义对资源的操作。在 RESTful API 中&#xff0c;HTTP 方法主要用于表示对资源的操作&#xff0c;例如获取、创建、更新和删除资源。本…

持 PMP®证书增持 CSPM-2证书,怎么弄?

2023年起&#xff0c;持有PMP证书的朋友可以直接增持一个同等级证书CSPM-2&#xff0c;不用重新考试&#xff0c;不用重新学习&#xff0c;原PMP证书不影响正常使用&#xff0c;相当于多了一个国标项目管理领域的证书。 第一步准备资料 1、填写能力评价表(简历和业绩不用填&am…

自毁便签:MaiFile Privnote

自毁便签&#xff1a;MaiFile Privnote为您提供安全可靠的信息传递 在当今数字化时代&#xff0c;隐私保护成为了人们关注的焦点。MaiFile Privnote作为一种创新的在线服务&#xff0c;为用户提供了一种安全、便捷的方式来发送私密信息&#xff0c;确保信息在传递后能够自动销…