STM32 通用同步/异步收发器

server/2024/10/18 19:00:11/

目录

串行通信基础

串行异步通信数据格式

USART%E4%BB%8B%E7%BB%8D-toc" style="margin-left:40px;">USART介绍

USART%E7%9A%84%E4%B8%BB%E8%A6%81%E7%89%B9%E6%80%A7-toc" style="margin-left:40px;">USART的主要特性

USART%E7%9A%84%E5%8A%9F%E8%83%BD-toc" style="margin-left:40px;">USART的功能

USART%E7%9A%84%E9%80%9A%E4%BF%A1%E6%97%B6%E5%BA%8F-toc" style="margin-left:40px;">USART的通信时序

USART%E7%9A%84%E4%B8%AD%E6%96%AD-toc" style="margin-left:40px;">USART的中断


串行通信基础

在串行通信中,参与通信的两台或多台设备通常共享一条物理通路。发送者依次逐位发送一串数据信号,按一定的约定规则被接收者接收。由于串行端口通常只是规定了物理层的接口规范,所以为确保每次传送的数据报文能准确到达目的地,使每一个接收者能够接收到所有发向它的数据,必须在通信连接上采取相应的措施。

串行异步通信数据格式

无论是RS-232还是RS-485,均可采用通用异步收发数据格式。 通用异步收发器(Universal Asynchronous Receiver/Transmitter,UART)通信的数据格式如图

串行同步同步通信是由1~2个同步字符和多字节数据位组成,同步字符作为起始位以触发同步时钟开始发送或接收数据;多字节数据之间不允许有空隙,每位占用的时间相等;空闲位需发送同步字符。 串行同步同步通信传送的多字节数据由于中间没有空隙,因而传输速度较快,但要求有准确的时钟实现收发双方的严格同步,对硬件要求较高,适用于成批数据传送。串行同步收发通信的数据格式如图

STM32的USART工作原理

通信是嵌入式系统的重要功能之一。嵌入式系统中使用的通信接口有很多,如UART、SPI、I2C、USB和CAN等。其中,UART是最常见、最方便、使用最频繁的通信接口。在嵌入式系统中,很多微控制器或者外设模块都带有UART接口

USART%E4%BB%8B%E7%BB%8D">USART介绍

通用同步/异步收发器可以说是嵌入式系统中除了GPIO外最常用的一种外设。USART常用的原因不在于其性能超强,而是因为USART简单、通用。自Intel公司20世纪70年代发明 USART以来,上至服务器、PC之类的高性能计算机,下到4位或8位的单片机几乎都配置了USART接口,通过USART,嵌入式系统可以和绝大多数的计算机系统进行简单的数据交换。USART接口的物理连接也很简单,只要2~3根线即可实现通信。 SM32F103微控制器的小容量产品有2个USART,中等容量产品有3个USART,大容量产品有3个USART+2个UART。

USART%E7%9A%84%E4%B8%BB%E8%A6%81%E7%89%B9%E6%80%A7">USART的主要特性

USART主要特性如下:

(1)全双工,异步通信。

(2)NRZ标准格式。

(3)分数波特率发生器系统。发送和接收共用的可编程波特率,最高达10.5Mb/s。

(4)可编程数据字长度(8位或9位)。

(5)可配置的停止位(支持1或2个停止位)。

(6)LIN主发送同步断开符的能力以及LIN从检测断开符的能力。当USART硬件配置成LIN时,生成13位断开符;检测10/11位断开符。

(7)发送方为同步传输提供时钟。

(8)IRDA SIR编码器/解码器。在正常模式下支持3/16位的持续时间。

(9)智能卡模拟功能。智能卡接口支持ISO7816-3标准中定义的异步智能卡协议;智能卡用到0.5和1.5个停止位。

(10)单线半双工通信。

(11)可配置的使用DMA的多缓冲器通信。在SRAM中利用集中式DMA缓冲接收/发送字节。 (12)单独的发送器和接收器使能位。

(13)检测标志:接收缓冲器满;发送缓冲器空、传输结束标志。

(14)校验控制:发送校验位、对接收数据进行校验。

(15)四个错误检测标志:溢出错误、噪声错误、帧错误、校验错误。

(16)10个带标志的中断源:CTS改变、LIN断开符检测、发送数据寄存器空、发送完成、接收数据寄存器满、检测到总线为空闲、溢出错误、帧错误、噪声错误、校验错误。

(17)多处理器通信:如果地址不匹配,则进入静默模式。

(18)从静默模式中唤醒:通过空闲总线检测或地址标志检测。

(19)两种唤醒接收器的方式:地址位(MSB,第9位),总线空闲。

USART%E7%9A%84%E5%8A%9F%E8%83%BD">USART的功能

任何USART双向通信至少需要两个引脚:接收数据输入(RX)和发送数据输出(TX)。 RX:接收数据串行输入。通过过采样技术区别数据和噪声,从而恢复数据。 TX:发送数据串行输出。当发送器被禁止时,输出引脚恢复到它的I/O端口配置。当发送器被激活,并且不发送数据时,TX引脚处于高电平。在单线和智能卡模式中,此I/O被同时用于数据的发送和接收。

(1)总线在发送或接收前应处于空闲状态。

(2)一个起始位。

(3)一个数据字(8或9位),最低有效位在前。

(4)0.5、1.5、2个的停止位,由此表明数据帧结束。

(5)使用分数波特率发生器-12位整数和4位小数的表示方法。

(6)一个状态寄存器(USART_SR)。

(7)数据寄存器(USART_DR)。

(8)一个波特率寄存器(USART_BRR),12位的整数和4位小数。

(9)一个智能卡模式下的保护时间寄存器(USART_GTPR)。 在同步模式下需要引脚CK:发送器时钟输出。此引脚输出用于同步传输的时钟。这可以用来控制带有移位寄存器的外部设备(如LCD驱动器)。时钟相位和极性都是软件可编程的。在智能卡模式下,CK可以为智能卡提供时钟。

在IrDA模式里需要下列引脚:

(1)IrDA_RDI:IrDA模式下的数据输入。

(2)IrDA_TDO:IrDA模式下的数据输出。

在硬件流控模式下需要以下引脚:

(1)nCTS:清除发送,若是高电平,在当前数据传输结束时阻断下一次的数据发送。

(2)nRTS:发送请求,若是低电平,表明USART准备好接收数据。

1. 波特率控制

波特率控制即图下部虚线框的部分。通过对USART时钟的控制,可以控制USART的数据传输速度。 USART外设时钟源根据USART的编号不同而不同:对于挂载在APB2总线上的USART1,它的时钟源是fpcLk2;对于挂载在APB1总线上的其他USART(如 USART2和USART3等),它们的时钟源是fpcLk1。以上USART外设时钟源经各自USART的分频系数——USARTDIV分频后,分别输出作为发送器时钟和接收器时钟,控制发送和接收的时序。 通过改变USART外设时钟源的分频系数USARTDIV,可以设置USART的波特率。

2. 收发控制

收发控制即图的中间部分。该部分由若干个控制寄存器组成,如USART控制寄存器(Control Register)CR1、CR2、CR3和USART状态寄存器(Status Register)SR等。

3. 数据存储转移

数据存储转移即图8-3 上部灰色的部分。它的核心是两个移位寄存器:发送移位寄存器和接收移位寄存器。这两个移位寄存器负责收发数据并进行并串转换。

1)USART数据发送过程 当USART 发送数据时,内核指令或DMA外设先将数据从内存(变量)写入发送数据寄存器(TDR)。然后,发送控制器适时地自动把数据从TDR加载到发送移位寄存器,将数据一位一位地通过Tx引脚发送出去。

2)USART数据接收过程 USART数据接收是USART数据发送的逆过程。

USART%E7%9A%84%E9%80%9A%E4%BF%A1%E6%97%B6%E5%BA%8F">USART的通信时序

可以通过编程USART_CR1寄存器中的M位,选择8或9位字长。 在起始位期间,TX引脚处于低电平,在停止位期间,TX引脚处于高电平。空闲符号被视为完全由1组成的一个完整的数据帧,后面跟着包含了数据的下一帧的开始位。断开符号被视为在一个帧周期内全部收到0。在断开帧结束时,发送器再插入1或2个停止位(1)应答起始位。发送和接收由一共用的波特率发生器驱动,当发送器和接收器的使能位分别置位时,分别为其产生时钟。

USART%E7%9A%84%E4%B8%AD%E6%96%AD">USART的中断

STM32F103系列微控制器的USART主要有以下各种中断事件:

(1)发送期间的中断事件包括发送完成(TC)、清除发送(CTS)、发送数据寄存器空 (TXE)。

(2)接收期间的中断事件包括空闲总线检测(IDLE)、溢出错误(ORE)、接收数据寄存器非空(RXNE)、校验错误(PE)、LIN断开检测(LBD)、噪声错误(NE,仅在多缓冲器通信)和帧错误(FE,仅在多缓冲器通信)。 如果设置了对应的使能控制位,这些事件就可以产生各自的中断

串口操作的常用HAL 函数


http://www.ppmy.cn/server/131498.html

相关文章

【读书笔记-《30天自制操作系统》-27】Day28

本篇的内容不少&#xff0c;主要围绕着文件操作与文字显示展开。 1. alloca函数 在开发文件操作与文字显示之前&#xff0c;需要先做一些准备&#xff0c;引入alloca函数。首先看下面的代码&#xff1a; #include <stdio.h> #include "apilib.h"#define MA…

docker安装RabbitMQ,开启mqtt协议,并且SpringBoot继承mqtt

介绍 MQTT&#xff08;消息队列遥测传输&#xff09;是ISO标准&#xff08;ISO/IEC PRF 20922&#xff09;下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上&#xff0c;是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议。国内很多企业…

电脑查不到IP地址是什么原因?怎么解决

在日常使用电脑的过程中&#xff0c;有时会遇到无法查询到电脑IP地址的情况&#xff0c;这可能会影响到网络的正常使用。本文将探讨电脑查不到IP地址的可能原因&#xff0c;并提供相应的解决方案。 一、原因分析 ‌网络连接问题‌&#xff1a;首先&#xff0c;网络连接不稳定或…

vue面试题

一、keep-alive 在软件开发中&#xff0c;缓存组件是提高应用程序性能和响应速度的重要手段。特别是在前端框架如Vue.js中&#xff0c;缓存组件的技术被广泛使用。下面将详细介绍如何缓存当前组件、缓存后的更新机制&#xff0c;以及我对Vue.js中keep-alive组件的理解。 1.缓…

Leetcode 3319. K-th Largest Perfect Subtree Size in Binary Tree

Leetcode 3319. K-th Largest Perfect Subtree Size in Binary Tree 1. 解题思路2. 代码实现 题目链接&#xff1a;3319. K-th Largest Perfect Subtree Size in Binary Tree 1. 解题思路 这一题其实就是一个很常见的树的遍历&#xff0c;我们自底向上遍历每一个子树&#x…

ASP.NET MVC 下拉框的传值-foreach循环

数据表&#xff1a; -- 创建包裹分类表 CREATE TABLE PackageCategories (CategoryID INT PRIMARY KEY IDENTITY(1,1), -- 分类ID&#xff1a;整数类型&#xff0c;主键&#xff0c;自增&#xff0c;包裹分类的唯一标识CategoryName NVARCHAR(255) NOT NULL -- 包裹分类名称&a…

百度搜索引擎是如何解决用户点击率与网站排名关联度的呢?

百度搜索引擎是如何解决用户点击率与网站排名的关联度 大家好&#xff0c;我是林汉文&#xff08;SEO专家&#xff09;&#xff0c;今天我们来讨论一个非常有意义的话题&#xff1a;百度搜索引擎是如何解决用户点击率与网站排名的关联度&#xff0c;在当今搜索引擎优化&#x…

大数据毕业设计选题推荐-招聘信息数据分析系统-Python数据可视化-Hive-Hadoop-Spark

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…