STM32 片上资源之串口

news2025/5/15 12:37:38

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 轮询模式:

  1. 简单直接

  2. 占用CPU资源

  3. 适合低速率或简单应用

1.5.2 中断模式:

  1. 数据收发通过中断处理

  2. 提高CPU利用率

  3. 需要配置NVIC

1.5.3 DMA模式:

  1. 高效数据传输

  2. 适合大数据量传输

  3. 需要配置DMA控制器

1.6 常见应用

  1. 与PC通信(通过USB转串口)
  2. 与GPS模块通信
  3. 与无线模块(如蓝牙、WiFi)通信
  4. 工业设备间的RS232/RS485通信
  5. 调试信息输出

1.7 注意事项

  1. 确保时钟配置正确(USART时钟使能)

  2. 注意GPIO复用功能配置

  3. 不同USART挂载在不同APB总线上,时钟频率可能不同

  4. 使用DMA时注意缓冲区管理

  5. 在低功耗应用中注意唤醒源配置

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. 配置 USART1
    USART_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. 启动 USART
    USART_Cmd(USART1, ENABLE);
}

void USART1_SendChar(uint8_t ch) {
    while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
    USART_SendData(USART1, ch);
}

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

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

相关文章

职坐标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 补充:同为操作数据变更的日志…

时间序列预测建模的完整流程以及数据分析【学习记录】

文章目录 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与…

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&#xf…

动态规划问题 -- 多状态模型(删除并获得点数)

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

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)的数据结构,其中元素被添加到队列的尾部,并从…

OpenEvidence AI临床决策支持工具平台研究报告

平台概述 OpenEvidence是一个专为医疗专业人士设计的临床决策支持工具,旨在通过整合各类临床计算器和先进的人工智能技术,提高医生的诊疗决策效率和准确性。作为一款综合性医疗平台,OpenEvidence将复杂的医学计算流程简化,同时提供个性化的临床建议,使医生能够更快、更准…

如何远程执行脚本不留痕迹

通常我们在做远程维护的时候,会有这么一个需求,就是我想在远程主机执行一个脚本,但是这个脚本我又不想保留在远程主机上,那么有人就说了,那就复制过去再登录远程执行不就行了吗?嗯嗯,但是这还不…

Ota++框架学习

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

Chrome安装最新vue-devtool插件

本vue-devtool版本是官方的 v7.6.8版本,兼容性好、功能齐全且稳定。 操作步骤: 方法一: 打开谷歌浏览器 --> 右上角三个点 --> 扩展程序 --> 管理扩展程序 --> 加载已解压的扩展程序, 然后选择解压后的文件夹即可。…

bfs-最小步数问题

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

java----------->代理模式

目录 什么是代理模式? 为什么会有代理模式? 怎么写代理模式? 实现代理模式总共需要三步: 什么是代理模式? 代理模式:给目标对象提供一个代理对象,并且由代理对象控制目标对象的引用 代理就是…

Untiy基础学习(十四)核心系统—物理系统之碰撞检测代码篇 刚体,碰撞体,材质

目录 一、碰撞器(Collider)与触发器(Trigger) 二、碰撞检测条件 三、碰撞事件与触发器事件,可以理解为特殊的生命周期函数。 四、讲讲如何选择 ​编辑 五、总结 一、碰撞/触发事件函数对照表 二、Collider 与 …

SAP学习笔记 - 开发08 - Eclipse连接到 BTP Cockpit实例

有关BTP,之前学了一点儿,今天继续学习。 SAP学习笔记 - 开发02 - BTP实操流程(账号注册,BTP控制台,BTP集成开发环境搭建)_sap btp开发-CSDN博客 如何在Eclipse中连接BTP Cockpit开发环境实例。 1&#xf…