STM32 片上资源之串口
STM32 片上资源之串口
- 1 串口介绍
- 1.1 初步介绍
- 1.2 主要特性
- 1.2.1 USART特性
- 1.2.2 UART特性
- 1.3 主要寄存器
- 1.4 波特率计算
- 1.5 常用工作模式
- 1.5.1 轮询模式:
- 1.5.2 中断模式:
- 1.5.3 DMA模式:
- 1.6 常见应用
- 1.7 注意事项
- 2 软件层面协议
- 2.1 基本概念
- 2.2 物理层标准
- 2.2.1 RS-232硬件标准
- 2.2.2 RS-422:
- 2.2.3 RS-485:
- 2.3 协议核心参数
- 2.3.1 波特率(Baud Rate):
- 2.3.2 数据位(Data Bits):
- 2.3.3 停止位(Stop Bits):
- 2.3.4 校验位(Parity Bit):
- 2.4 数据帧结构
- 3 代码
这里以stm32f4系列的标准库为应用案例解释
1 串口介绍
1.1 初步介绍
STM32F407系列包含最多6个USART/UART接口。 4个通用同步/异步收发器(USART),2个通用异步收发器(UART)。
具体型号的可用串口数量可能不同,需参考具体型号的数据手册。
1.2 主要特性
1.2.1 USART特性
全双工异步通信
单线半双工通信
同步通信(需要时钟线)
支持LIN协议
支持智能卡协议(ISO7816)
支持IrDA SIR ENDEC规范
支持调制解调器操作(CTS/RTS)
1.2.2 UART特性
全双工异步通信
单线半双工通信
支持LIN协议
支持IrDA SIR ENDEC规范
支持调制解调器操作(CTS/RTS)
1.3 主要寄存器
每个USART/UART包含以下主要寄存器:
USART_SR - 状态寄存器
USART_DR - 数据寄存器
USART_BRR - 波特率寄存器
USART_CR1/CR2/CR3 - 控制寄存器
1.4 波特率计算
波特率计算公式:
波特率 = fCK / (16 * USARTDIV)
其中:
fCK是USART时钟频率(APB1或APB2总线)
USARTDIV是写入USART_BRR寄存器的值
1.5 常用工作模式
1.5.1 轮询模式:
-
简单直接
-
占用CPU资源
-
适合低速率或简单应用
1.5.2 中断模式:
-
数据收发通过中断处理
-
提高CPU利用率
-
需要配置NVIC
1.5.3 DMA模式:
-
高效数据传输
-
适合大数据量传输
-
需要配置DMA控制器
1.6 常见应用
- 与PC通信(通过USB转串口)
- 与GPS模块通信
- 与无线模块(如蓝牙、WiFi)通信
- 工业设备间的RS232/RS485通信
- 调试信息输出
1.7 注意事项
-
确保时钟配置正确(USART时钟使能)
-
注意GPIO复用功能配置
-
不同USART挂载在不同APB总线上,时钟频率可能不同
-
使用DMA时注意缓冲区管理
-
在低功耗应用中注意唤醒源配置
2 软件层面协议
2.1 基本概念
串口通信是一种常见的设备间通信方式,以下是关于串口通信协议的全面介绍。串口通信(Serial Communication)是指通过单根数据线按位顺序传输数据的通信方式,与之相对的是并行通信。
2.2 物理层标准
2.2.1 RS-232硬件标准
最传统的串口标准
电压范围:±3V至±15V
典型DB9连接器
传输距离短(约15米)
2.2.2 RS-422:
差分信号传输
传输距离可达1200米
全双工通信
2.2.3 RS-485:
改进的RS-422
支持多点通信(最多32个节点)
半双工通信
工业环境常用
2.3 协议核心参数
2.3.1 波特率(Baud Rate):
波特率即每秒钟传输二进制信息的位数,单位是为位/秒(bps或bit/s)。如每秒钟传输240个字符,每个字符帧格式包含10位(1个起始位、1个停止位、8个数据位),则此时的波特率为:
传输距离与波特率及传输线的电气特性有关。当传输线使用每0.3m(约1英尺)有50pF电容的非平衡屏蔽双绞线时,传输距离随波特率的增加而减小。当波特率超过1000 bps 时,最大传输距离迅速下降,如115200 bps 时最大距离下降到只有30m。
常见值:9600, 19200, 38400, 57600, 115200等
通信双方必须一致
2.3.2 数据位(Data Bits):
通常5-9位,常用8位
2.3.3 停止位(Stop Bits):
1位、1.5位或2位
用于标识数据包结束
2.3.4 校验位(Parity Bit):
可选:无校验(None)、奇校验(Odd)、偶校验(Even)
用于简单错误检测。
若设置为奇校验,则当接收方接收到数据时,校验“1”的个数是否为奇数,从而确定数据传输是否正确;若设置为偶校验,则当接收方接收到数据时,校验“1”的个数是否为偶数,从而确定数据传输是否正确;若设置为无校验,则不对数据传输的正确性做判断。
2.4 数据帧结构
3 代码
#include "stm32f4xx_usart.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_gpio.h"void USART_Config(void) {GPIO_InitTypeDef GPIO_InitStruct;USART_InitTypeDef USART_InitStruct;// 1. 时钟使能RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);// 2. 配置 PA9(TX) 和 PA10(RX)GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;GPIO_Init(GPIOA, &GPIO_InitStruct);// 配置复用功能GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);// 3. 配置 USART1USART_InitStruct.USART_BaudRate = 115200;USART_InitStruct.USART_WordLength = USART_WordLength_8b;USART_InitStruct.USART_StopBits = USART_StopBits_1;USART_InitStruct.USART_Parity = USART_Parity_No;USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_InitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;USART_Init(USART1, &USART_InitStruct);// 4. 启动 USARTUSART_Cmd(USART1, ENABLE);
}void USART1_SendChar(uint8_t ch) {while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);USART_SendData(USART1, ch);
}
相关文章:

STM32 片上资源之串口
STM32 片上资源之串口 1 串口介绍1.1 初步介绍1.2 主要特性1.2.1 USART特性1.2.2 UART特性 1.3 主要寄存器1.4 波特率计算1.5 常用工作模式1.5.1 轮询模式:1.5.2 中断模式:1.5.3 DMA模式: 1.6 常见应用1.7 注意事项 2 软件层面协议2.1 基本概…...

职坐标IT培训:互联网行业核心技能精讲
在互联网行业高速迭代的今天,掌握全链路核心技能已成为职业发展的关键突破口。职坐标IT培训聚焦行业需求,系统拆解从需求分析到系统部署的完整能力模型,助力从业者构建多维竞争力。无论是产品岗的用户调研与原型设计,还是技术岗的…...

FlashInfer - 介绍 LLM服务加速库 地基的一块石头
FlashInfer - 介绍 LLM服务加速库 地基的一块石头 flyfish 大型语言模型服务中的注意力机制 大型语言模型服务(LLM Serving)迅速成为重要的工作负载。Transformer中的算子效率——尤其是矩阵乘法(GEMM)、自注意力(S…...

MySQL 学习(七)undo log、redo log、bin log 的作用以及持久化机制
目录 一、前言二、三大日志的概念、作用、存储位置2.1 bin log 二进制执行日志2.2 undo log 事务回滚日志2.3 redo log 快速恢复日志 三、补充说明3.1 补充:为什么使用 buffer pool 而不直接修改磁盘中的数据?3.2 补充:同为操作数据变更的日志…...
vue中,created和mounted两个钩子之间调用时差值受什么影响
在 Vue 中,created 和 mounted 是两个生命周期钩子,它们之间的调用时差主要受以下几个因素影响: 🟢 1. 模板复杂度与渲染耗时(最主要因素) mounted 的触发时间是在组件的 DOM 被挂载之后(也就是…...
16S18S_OTU分析(3)
OTU的定义 OTU:操作分类单元是在系统发生学研究或群体遗传学研究中,为了便于进行分析,人为给某一个分类单元(如品系、种、属、分组等)设置的同一标志。目的:OTU用于将相似的序列归为一类,以便于…...
电机的导程和脉冲之间的关系
文章目录 导程计算关系相互影响关系 在电机相关领域中,导程通常是针对直线电机或带有丝杠等传动机构的电机系统而言的。 导程 导程是指丝杠或类似传动部件旋转一周时,与其相连的运动部件在轴向方向上移动的距离。例如,在一个由电机驱动丝杠来…...

时间序列预测建模的完整流程以及数据分析【学习记录】
文章目录 1.时间序列建模的完整流程2. 模型选取的和数据集2.1.ARIMA模型2.2.数据集介绍 3.时间序列建模3.1.数据获取3.2.处理数据中的异常值3.2.1.Nan值3.2.2.异常值的检测和处理(Z-Score方法) 3.3.离散度3.4.Z-Score3.4.1.概述3.4.2.公式3.4.3.Z-Score与…...
Flink和Spark的选型
在Flink和Spark的选型中,需要综合考虑多个技术维度和业务需求,以下是在项目中会重点评估的因素及实际案例说明: 一、核心选型因素 处理模式与延迟要求 Flink:基于事件驱动的流处理优先架构,支持毫秒级低延迟、高吞吐的…...

FFmpeg3.4 libavcodec协议框架增加新的decode协议
查看ffmepg下面的configure文件发现,config.h文件;解码协议的配置是通过libavcodec/allcodecs.c文件,通过查找DEC关键字生成的。 1、在libavcodec/allcodecs.c 新增REGISTER_ENCODER(MYCODE, mycode); REGISTER_ENCODER(VP8_VAAPI, vp8_vaapi); …...

无人机数据处理与特征提取技术分析!
一、运行逻辑 1. 数据采集与预处理 多传感器融合:集成摄像头、LiDAR、IMU、GPS等传感器,通过硬件时间戳或PPS信号实现数据同步,确保时空一致性。 边缘预处理:在无人机端进行数据压缩(如JPEG、H.265)…...

前端面试宝典---js垃圾回收机制
什么是垃圾回收 垃圾回收是指一种自动内存管理机制,当声明一个变量时,会在内存中开辟一块内存空间用于存放这个变量。当这个变量被使用过后,可能再也不需要它了,此时垃圾回收器会自动检测并回收这些不再使用的内存空间。垃圾回收…...

IDEA 新建 SpringBoot 项目时,没有高版本 SpringBoot 可选
环境描述 IDEA 2025.1.1JDK17Maven 3.9.9 问题描述 IDEA 新建 SpringBoot 项目时,没有高版本 SpringBoot 可选,可以看到此时的最高版本为 3.0.2: 问题分析 返回上一步,可以发现 Spring Initializr 的服务地址为阿里云&#…...

2025年PMP 学习十三 第9章 项目资源管理(9.1,9.2)
2025年PMP 学习十三 第9章 项目资源管理(9.1,9.2) 序号过程过程组9.1规划资源管理规划9.2估算活动资源规划9.3获取资源执行9.4建设团队执行9.5管理团队执行9.6控制资源监控 文章目录 2025年PMP 学习十三 第9章 项目资源管理(9.1,9.2…...

动态规划问题 -- 多状态模型(删除并获得点数)
目录 动态规划分析问题五步曲题目概述预处理阶段 代码编写 动态规划分析问题五步曲 不清楚动态规划分析问题是哪关键的五步的少年们可以移步到 链接: 动态规划算法基础 这篇文章非常详细的介绍了动态规划算法是如何分析和解决问题的 题目概述 链接: 删除并获得点数 预处理阶段…...

Jenkins里构建一个简单流水线
前情提要:传送门,我在虚拟机里装了一个Ubuntu,然后在docker里装了一个Jenkins及GitLab! 点击这里下载或fork一个简单的Java项目用于学习Jenkins! 目标:修改代码后,上传到git,在在Jenkins流水线里…...

Java Queue 接口实现
Date: 2025.05.14 20:46:38 author: lijianzhan Java中的Queue接口是位于java.util包中,它是一个用于表示队列的接口。队列是一种先进先出(First-In-First-Out, 简称为FIFO)的数据结构,其中元素被添加到队列的尾部,并从…...
华为0507机试
题目二 建设基站 有一棵二叉树,每个节点上都住了一户居民。现在要给这棵树上的居民建设基站,每个基站只能覆盖她所在与相邻的节点,请问信号覆盖这棵树最少需要建设多少个基站 #include <bits/stdc.h> using namespace std;const int …...

OpenEvidence AI临床决策支持工具平台研究报告
平台概述 OpenEvidence是一个专为医疗专业人士设计的临床决策支持工具,旨在通过整合各类临床计算器和先进的人工智能技术,提高医生的诊疗决策效率和准确性。作为一款综合性医疗平台,OpenEvidence将复杂的医学计算流程简化,同时提供个性化的临床建议,使医生能够更快、更准…...
`RotationTransition` 是 Flutter 中的一个动画组件,用于实现旋转动画效果
RotationTransition 是 Flutter 中的一个动画组件,用于实现旋转动画效果。它允许你对子组件进行动态的旋转变换,从而实现平滑的动画效果。RotationTransition 通常与 AnimationController 和 Tween 一起使用,以控制动画的开始、结束和过渡效果…...
Android多媒体——媒体start流程分析(十三)
当多媒体的数据源准备好,并且完成调用准备结束流程后,接下来就开始是调用 start() 方法开始播放媒体了。这里我们就来分析一下媒体开始播放的整个流程。 一、媒体播放流程 对于媒体播放流程的 Java 层和 JNI 层与前面的示例基本相同,这里不再重复展示了,我们直接从 mediap…...

如何远程执行脚本不留痕迹
通常我们在做远程维护的时候,会有这么一个需求,就是我想在远程主机执行一个脚本,但是这个脚本我又不想保留在远程主机上,那么有人就说了,那就复制过去再登录远程执行不就行了吗?嗯嗯,但是这还不…...
jQuery知识框架
一、jQuery 基础 核心概念 $ 或 jQuery:全局函数,用于选择元素或创建DOM对象。 链式调用:多数方法返回jQuery对象,支持连续操作。 文档就绪事件: $(document).ready(function() { /* 代码 */ }); // 简写 $(function…...
java加强 -File
File类的对象可以代表文件/文件夹,并可以调用其提供的方法对象文件进行操作。 File对象既可以代表文件,也可以代表文件夹。 创建File对象,获取某个文件的信息 语法: File 对象名 new File("需要访问文件的绝对路径&…...
c# 倒序方法
在C#中,有几种方法可以对List进行倒序排列: 1. 使用List的Reverse()方法(原地反转) List<int> numbers new List<int> { 1, 2, 3, 4, 5 };numbers.Reverse(); // 直接修改原列表// 结果:5, 4, 3, 2, 1 …...
每日c/c++题 备战蓝桥杯(P2241 统计方形(数据加强版))
洛谷P2241 统计方形(数据加强版)题解 题目描述 给定一个 n m n \times m nm 的方格棋盘,要求统计其中包含的正方形数量和长方形数量(不包含正方形)。输入为两个正整数 n n n 和 m m m,输出两个整数分…...

Ota++框架学习
一:框架结构 这是一幅展现 Web 应用程序架构的示意图,以下是对图中各部分的详细解释: 外部交互部分 Request(请求):位于架构图的左上角,用黄色虚线框表示 。代表来自客户端(如浏览器…...

Chrome安装最新vue-devtool插件
本vue-devtool版本是官方的 v7.6.8版本,兼容性好、功能齐全且稳定。 操作步骤: 方法一: 打开谷歌浏览器 --> 右上角三个点 --> 扩展程序 --> 管理扩展程序 --> 加载已解压的扩展程序, 然后选择解压后的文件夹即可。…...
Android锁
引言 🔒 在 Android 应用的开发过程中,随着业务需求的复杂度不断提升,多线程并发场景层出不穷。为了保证数据一致性与线程安全,锁(Lock)成为了不可或缺的工具。本篇博客将深入剖析 Android 中常用的锁机制…...

bfs-最小步数问题
最小步长模型 特征: 主要是解决权值为1且状态为字符串类型的最短路问题,实质上是有向图的最短路问题,可以简化为bfs求最短路问题。 代表题目: acwing 845 八数码问题: 八数码题中由于每次交换的状态是由x进行上下左右…...