《嵌入式系统》知识总结11:STM32串口

news2024/11/25 2:58:20

串行通信vs并行通信

• 并行:使用8根数据线一次传送一个字节(或使用16根数据线一次传送2个字节,...)
• 串行:使用少量数据信号线(8根以下),将数据逐位分时传送
• 并行vs串行:类似于多车道vs单车道

 通信特性对比

 • 在工作频率相同的情况下,并行通信的数据传输速率明显高于串行通信。(注意前提)
• 由于并行传输对同步要求较高,且随着通信速率的提高,信号干扰的问题会显著影响通信性能。随着技术的发展,越来越多的应用场合采用高速率的串行差分传输。

接口举例

并行接口举例:
Centronics打印接口、PATA硬盘接口、AT键盘接口
串行接口举例:
Ps/2接口、usb接口、SATA硬盘接口、I2C接口、SPI接口

STM32的串行通信接口USART

STM32具有多达5个USART接口
• USART1连接高速APB2总线、运行速度为72MHz(支持高达4.5Mbps的传输速率)
• 其他位于APB1总线、36MHz(2.25Mbps传输速率)
STM32的USART接口具有多种操作模式
• 异步全双工通信、同步单路通信和半双工单线通信
• 支持LIN、智能卡、IrDA、多处理器通信
每个USART接口具有两个DMA通道
• 用于接收Rx和发送Tx数据与存储器之间的高速传送

USART的增强功能

局部互联网络LIN(Local Interconnection network)
• 主要针对车辆中低成本的LIN总线
智能卡(Smart Card)
• 内嵌芯片的集成电路(IC)卡
• 兼容ISO 7816-3标准的异步智能卡协议
红外线接口IrDA(Infrared Data Association)
• 短距离、点对点直线数据传输
• 支持SIR ENDEC传输编码解码协议


串口功能框图讲解

 接收发送数据过程

接收数据过程:
由Rx接收数据,根据波特率按位写入”接收移位寄存器”,待接收完毕后一次性写入”接收数据寄存器(RDR)”,CPU读取寄存器获取传输的数据
发送数据过程:
由CPU写数据到”发送数据寄存器(TDR)”,再由TDR一次性将要发送的数据写入”发送移位寄存器”,按照波特率逐位移出 

波特率控制

 如图:
发送控制器和接收控制器分别控制发送移位寄存器和接收移位寄存器

发送器时钟和接收器时来自同一个时钟单元发送和接收控制器的波特率公用波特率发生器

接收器时钟产生

 

STM32F103共5个串口:
        串口1时钟来自PLCK2
        串口2-5时钟来自PLCK1

例如:串口1的时钟由PCLK2经过/USARTDIV(分频)得到,而分频由波特率发生器控制,通过相关寄存器进行配置

USART接口的引脚

USART接口通过3个引脚连接外设
• Tx 发送数据输出(Transmit Data Out)
• Rx 接收数据输入(Receive Data In)
• CK 发送时钟输出,用于同步传输模式(CK引脚早期版本被称为SCLK)

实现硬件流程控制需要如下引脚
• nCTS 清除发送(Clear To Send)
• nRTS 发送请求(Request To Send)
硬件流控具体表现为:当串口已经准备好接收新数据时,由硬件自动把RTS脚拉低(向外表示可接收数据);在发送数据前,由硬件自动检查CTS脚是否为低(表示是否可以发送数据),再进行发送。

 USART寄存器

波特率的计算方法

波特率由波特率发生器和PCLKx共同产生 PCLKx的值由
串口本身决定,通过配置USART_BRR寄存器确定波特率发生器的值,经过USARTDIV分频器除以16得到最终的波特率

USARTDIV:无符号的定点数
FCK:串口的时钟,注意区分APB2和APB1两条总线

波特率计算举例

设置串口1波特率为115200
串口1的时钟来自PCLK2=72MHz
由公式得到:
USARTDIV=72000000/(115200*16)=39.0625
整数部分DIV_Mantissa=39=0x27
小数部分DIV_Fraction=16*0.0625=1=0x01
所以设置USART->BRR=0x0271,就可以实现设置串口1的波
特率为115200

USART操作相关数据结构和库函数

USART初始化结构体

typedef struct
{
uint32_t USART_BaudRate; //波特率 BRR
uint16_t USART_WordLength; //字长 CR1_M
uint16_t USART_StopBits; //停止位 CR2_STOP
uint16_t USART_Parity; //校验控制 CR1_PCE、CR1_PS
uint16_t USART_Mode; //模式选择CR1_TE、CR1_RE
// 硬件流选择 CR3_CTSE、CR3_RTSE
uint16_t USART_HardwareFlowControl;
} USART_InitTypeDef;

USART编程常用固件库函数

1-串口初始化函数

void USART_Init
(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct)

USART初始化

//USART初始化函数
void USART_Init ( USART_TypeDef * USARTx,
USART_InitTypeDef * USART_InitStruct)

//USARTx(要配置的串口):USART1~UART5
// USART_InitStruct指向USART_InitTypeDef结构变量的指针

typedef struct
{ uint32_t USART_BaudRate; /* 通信波特率 */
uint16_t USART_WordLength; /* 数据位数 */
uint16_t USART_StopBits; /* 停止位数 */
uint16_t USART_Parity; /* 校验模式 */
uint16_t USART_Mode; /* 接收发送模式 */
uint16_t USART_HardwareFlowControl;/* 硬件流控制 */
} USART_InitTypeDef;

2-中断配置函数

void USART_ITConfig
(USART_TypeDef* USARTx, uint16_t USART_IT,FunctionalState NewState)

3-串口使能函数

void USART_Cmd(USART_TypeDef* USARTx,FunctionalState NewState)

4-数据发送函数

void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)

5-数据接收函数

uint16_t USART_ReceiveData(USART_TypeDef* USARTx)

6-中断状态位获取函数

ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT)

USART库函数列表

 

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

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

相关文章

路径规划算法:基于秃鹰优化的路径规划算法- 附代码

路径规划算法:基于秃鹰优化的路径规划算法- 附代码 文章目录 路径规划算法:基于秃鹰优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化算法秃鹰…

【三维编辑】Removing Objects From Neural Radiance Fields论文解读

题目:Removing Objects From NeRF 从神经辐射场中移除对象 论文:https://arxiv.org/abs/2212.11966 作者:Silvan Weder,Guillermo Niantic, ETH Zurich, University College London, nianticlabs.github.ionerf-object-removal 文章目录 摘要一、前言二、…

Batch Normalization原理

首先我们提出一个问题,为什么要有Batch Normalization这样神奇的操作?原有的深度神经网络是有什么问题吗? 还真有问题,那就要提到各位炼丹师们的困境,在深度学习中,模型的层数往往非常的巨大,尤…

SpringBootWeb AOP(下)

3. AOP进阶 AOP的基础知识学习完之后,下面我们对AOP当中的各个细节进行详细的学习。主要分为4个部分: 通知类型通知顺序切入点表达式连接点 我们先来学习第一部分通知类型。 3.1 通知类型 在入门程序当中,我们已经使用了一种功能最为强大…

磁盘配额与进阶文件系统管理(二)

逻辑卷管理(Logical Volume Manager) 简介:lvm可以弹性调节filesystem容量;lvm可以整合多个实体partion在一起,使得多个partion看起来像一个磁盘。 LVM基本概念 PV:物理卷 PE:实体范围区块 VG:卷组 …

前端食堂技术周刊第 85 期:5 月浏览器更新、TypeScript 5.1、Rspack 0.2.0、Parcel v2.9.0、Next.js 企业级模板

美味值:🌟🌟🌟🌟🌟 口味:龙井酥 食堂技术周刊仓库地址:https://github.com/Geekhyt/weekly 本期摘要 5 月登陆浏览器的新功能TypeScript 5.1Rspack 0.2.0Parcel v2.9.0Next.js 企…

DINO代码学习笔记(四)

DINO代码学习笔记(一)中已经将输入transformer之前的参数处理给捋了一遍 DINO代码学习笔记(二)中将encoder部分给捋了一遍 DINO代码学习笔记(三)中将decoder部分给捋了一遍,以上将DINO的主体部…

聊一聊Spring Security的那些事

一.什么是Spring Security S[ing Security是一个基于Java EE框架Spring的安全性框架,它提供了身份认证和授权功能,用于保护应用程序中的资源。同时,它也支持许多常见的身份验证机制,并提供了预防常见攻击,如跨站请求伪…

[230603]托福听力精听|TPO66C2|Financial Advice

tuition bill 学费 add up 加总 allowance 补贴 budget 预算 document 文件 expense 费用;开销 semester 学期 dorm 宿舍 own 拥有;自己的 bulletin board…

SpringCloud微服务架构 --- 基础篇

一、认识微服务 1.1、服务架构演变 1.1.1、单体架构 单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署。 单体架构的优缺点如下: 优点: 架构简单部署成本低 缺点: 耦合度高(维护困难、…

基于Xilinx K7-410T的高速DAC之AD9129开发笔记(一)

引言:从本文开始,我们介绍下项目中设计的并行LVDS高速DAC接口设计,包括DAC与FPGA硬件接口设计、软件设计等。项目设计高速DAC采用了ADI公司的AD9129,该芯片最大更新速率5.7Gsps,该芯片在宽带通信应用、LTE、雷达信号产…

wpf中使用svg图片

在wpf中,svg图片不能直接使用,但是我们知道,svg图片比png,jpg等图片都好点,原因就是它是矢量图片,不会变形。 一共4种方式: 第一种: 简单的svg,我们可以使用path来装载…

算法与数据结构(三)

一、堆 1,堆结构就是用数组实现的完全二叉树结构 根节点的左孩子的下标为:2i1,右孩子为2i2。两个孩子的父节点为(i-1)/2向下取整 2,完全二叉树中如果每棵子树的最大值都在顶部就是大根堆 从下往上将孩子与父节点进行比较,如果子叶…

【Docker】什么是Docker,它用来干什么

作者简介: 辭七七,目前大一,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖&#x1f…

使用Leangoo轻量敏捷看板工具实现多泳道任务管理

在敏捷开发的实践当中,通过可视化的敏捷任务看板来实现团队协同和透明化管理是必不可少的一个实践。 通过可视化的敏捷任务看板我们可以达到如下几个目的: 1. 可视化管理团队的目标; 2. 明确目标的优先级; 3. 明确目标分解后的任务项; 4. 可视化管理任…

【算法题解】34. 二叉树的最小深度

这是一道 简单 题 https://leetcode.cn/problems/minimum-depth-of-binary-tree/ 文章目录 题目简单递归解法Java 代码实现Go 代码实现复杂度分析 DFSJava 代码实现Go 代码实现复杂度分析 BFSJava 代码实现Go 代码实现复杂度分析 总结 题目 给定一个二叉树,找出其最…

第十一届蓝桥杯国赛JavaB组题解

A. 美丽的2 思路: 枚举 1 到 2020 的每个数,依次判断即可。 代码: public class Main {public static boolean check(int x) {while (x ! 0) {if (x % 10 2) return true;x / 10;}return false;}public static void main(String[] args) …

CPU和微程序

目录 一、CPU功能和结构 (一)CPU的功能 1. 指令控制 2. 操作控制 3. 时间控制 4. 数据加工 5. 中断处理 (二)CU和ALU的功能 1. CU(控制器)的功能 2. ALU(运算器)的功能 …

Greenplum高并发数据库概览

一、前言 GreenPlum DB(GPDB)是一个开源的高并发(MPP:massively parallel processing ) 数据处理平台,可用于海量数据分析,机器学习,AI场景,专为下一代数据仓库和大规模分析处理设计。 参考&am…

008-从零搭建微服务-系统服务(一)

写在最前 如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。 源码地址(后端):https://gitee.com/csps/mingyue 源码地址(前端):https://gitee.com/csps…