STM32CubeMX HAL库 串口的使用

news2025/5/15 10:02:44

1.配置

2.开启中断后,生成代码 

3.串口的接收

1).开启空闲中断接收

__HAL_UART_ENABLE_IT(huart, UART_IT_IDLE); // 关键步骤:启用空闲中断

2). 启动接收

调用 HAL_UARTEx_ReceiveToIdle_IT 启动异步接收,可以使用连个数组交替接收

#define RX_BUFFER_SIZE 256
uint8_t rx_buffer[RX_BUFFER_SIZE];

// 在 main() 或某个初始化函数中启动接收
HAL_UARTEx_ReceiveToIdle_IT(&huart1, rx_buffer, RX_BUFFER_SIZE);

3).实现接收回调

当以下事件发生时,会触发 HAL_UARTEx_RxEventCallback 回调函数:

  • 接收到指定长度(RX_BUFFER_SIZE)的数据;
  • 检测到空闲(IDLE)状态。

在回调函数中处理接收到的数据

void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) {
  if (huart == &huart1) {
    // Size 是实际接收到的数据长度(可能小于 RX_BUFFER_SIZE)
    if (Size > 0) {
      // 处理数据(例如解析、转发等)
      process_received_data(rx_buffer, Size);
    }

    // 重新启动接收,以持续监听数据
    HAL_UARTEx_ReceiveToIdle_IT(&huart1, rx_buffer, RX_BUFFER_SIZE);
  }
}

接收注意事项‌

  1. 缓冲区大小‌:设置的 RX_BUFFER_SIZE 应足够大以容纳最大预期数据包,否则可能溢出。
  2. 及时重启接收‌:在回调函数中务必重新调用 HAL_UARTEx_ReceiveToIdle_IT,否则后续数据无法接收。 ‌
  3. 数据竞争‌:避免在数据处理过程中修改 rx_buffer,可以使用双缓冲区(Ping-Pong Buffer)策略。 ‌
  4. 错误处理‌:检查 HAL_UARTEx_ReceiveToIdle_IT 的返回值,确保启动成功(返回 HAL_OK)。

4.串口的数据的发送 

以下是 STM32 HAL 库中 ‌UART 数据发送‌的常用方式及使用方法总结:

一、UART 数据发送的三种模式‌

根据 HAL 库设计,可通过以下三种方式实现 UART 数据发送:

轮询模式(阻塞式)‌

调用 HAL_UART_Transmit 函数,CPU 持续等待数据发送完成后再执行后续代码。
适用场景‌:简单调试、低频率小数据量传输。

// 示例代码:发送字符串 "Hello"
uint8_t data[] = "Hello";
HAL_UART_Transmit(&huart2, data, sizeof(data), 100);  // 超时时间 100ms

中断模式(非阻塞)‌

调用 HAL_UART_Transmit_IT 函数启动发送,数据通过中断异步传输,CPU 可并行处理其他任务。
适用场景‌:需提高 CPU 利用率的中等数据量传输。

// 步骤:
// 1. 启动发送
HAL_UART_Transmit_IT(&huart2, data, len);

// 2. 实现发送完成回调函数
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) {
    if (huart == &huart2) {
        // 发送完成后的处理(如启动下一次发送)
    }
}

DMA 模式(非阻塞)‌

调用 HAL_UART_Transmit_DMA 函数,DMA 控制器直接搬运数据至 UART 外设,完全释放 CPU。
适用场景‌:高速、大数据量传输(如音频流、图像数据)。

// CubeMX 配置:
// 1. 开启 UART DMA 发送通道
// 2. 启动发送
HAL_UART_Transmit_DMA(&huart2, data, len);

二、发送模式选择建议‌

模式    优点                            缺点                          典型应用场景


轮询    实现简单                     阻塞 CPU                 调试输出、简单指令
中断    非阻塞、                     中等效率                  频繁中断可能影响系统实时性    中速数据包传输
DMA    零 CPU 占用、高效    需配置 DMA 通道    高速大数据传输

三、关键配置步骤‌

1.CubeMX 基础配置‌

启用 UART 外设并配置波特率、数据位等参数。
中断模式‌:使能 UART 全局中断(NVIC 设置优先级)。
DMA 模式‌:添加 DMA 通道(方向为 Memory-to-Peripheral)。

2.代码实现要点‌

中断模式‌需实现 HAL_UART_TxCpltCallback 回调函数处理发送完成事件。
DMA 模式‌需确保发送缓冲区在 DMA 传输期间保持有效(避免使用栈内存)。

四、注意事项‌

  1. 错误处理‌:检查函数返回值(如 HAL_OK),并在 HAL_UART_ErrorCallback 中处理超时或硬件错误。
  2. 缓冲区管理‌:避免在发送过程中修改发送缓冲区数据(尤其在使用 DMA 时)。可使用双缓冲区交替发送以提高效率。
  3. 重新启动发送‌:在中断或 DMA 回调中需手动重启发送流程(如需连续传输)。

五、进阶优化‌

自定义协议‌:结合空闲中断(IDLE)实现不定长数据帧接收,与发送逻辑配合使用。
混合模式‌:对关键数据使用中断/DMA,非关键数据使用轮询,平衡系统负载。


通过合理选择发送模式并优化配置,可显著提升 STM32 UART 通信的效率和可靠性。

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

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

相关文章

flutter 视频通话flutter_webrtc

flutter 比较热门的库 flutter_webrtc | Flutter package agora_rtc_engine | Flutter package 我使用的是flutter_webrtc 下面是官方推荐的demo库 GitHub - flutter-webrtc/flutter-webrtc-demo: Demo for flutter-webrtc 其中 https://demo.cloudwebrtc.com:8086/ 已经停…

Babylon.js学习之路《四、Babylon.js 中的相机(Camera)与视角控制》

文章目录 1. 引言:为什么相机是 3D 场景的“眼睛”?1.1 相机的核心作用1.2 常见相机类型概览 2. 相机基础参数解析2.1 通用属性2.2 相机坐标系 3. 详解常用相机类型3.1 自由相机(FreeCamera)3.2 弧形旋转相机(ArcRotat…

【Redis实战篇】秒杀优化

1. 秒杀优化-异步秒杀思路 我们来回顾一下下单流程 当用户发起请求,此时会请求nginx,nginx会访问到tomcat,而tomcat中的程序,会进行串行操作,分成如下几个步骤 1、查询优惠卷 2、判断秒杀库存是否足够 3、查询订单…

Trae IDE:AI深度集成的智能开发环境

(以高效人机协作重塑编程体验) 概述 Trae IDE(发音 /treɪ/)是一款深度集成AI能力的现代化开发工具,结合传统IDE的完备功能与前沿AI技术,提供智能问答、代码自动补全、跨文件编程及AI Agent驱动的自动化开…

【大模型】AI智能体Coze 知识库从使用到实战详解

目录 一、前言 二、知识库介绍 2.1 coze 知识库功能介绍 2.2 coze 知识库应用场景 2.3 coze 知识库类型 2.4 coze 知识库权限说明 2.5 coze 知识库与记忆对比 2.6 知识库的使用流程 三、知识库创建与使用 3.1 创建知识库入口 3.2 创建文本知识库 3.2.1 上传文件 3.…

【springcloud学习(dalston.sr1)】服务消费者通过restTemplate来访问服务提供者(含源代码)(五)

该系列项目整体介绍及源代码请参照前面写的一篇文章​​​​​​【springcloud学习(dalston.sr1)】项目整体介绍(含源代码)(一) 一般情况下,我们远程调用服务,可以用restTemplate来进行http请求的访问。接…

打破边界,智评未来:AI如何重塑学科交叉融合的评价体系?

目录: 引言:当“学科孤岛”遇上“创新浪潮”透视现状:学科交叉融合的“热望”与“冰壁”他山之石:国际交叉融合模式与评价的“镜与灯”AI赋能:重构学科交叉评价的内涵、要素与方法论 4.1. 基本内涵:从“知识叠加”到“价值涌现”4.2. 评价要素:超越“单点指标”的“网络…

ULVAC C30HMVRT系列冷冻泵和超捕集器压缩机组 安装、操作、维护和故障排除说明 含电路图

ULVAC C30HMVRT系列冷冻泵和超捕集器压缩机组 安装、操作、维护和故障排除说明 含电路图

ORACLE查看归档是否打开

一、使用V$DATABASE视图 SELECT log_mode FROM v$database; 结果说明: ARCHIVELOG - 数据库处于归档模式 NOARCHIVELOG - 数据库处于非归档模式 二、 使用v$instance视图 SELECT archiver FROM v$instance; 结果说明: STARTED - 归档进程已启动(归档模…

鸿蒙5.0项目开发——鸿蒙天气项目的实现(介绍)

【高心星出品】 文章目录 项目简介:项目运行效果图:主要功能:使用的技能点:开发环境: 项目简介: 这是一个基于鸿蒙系统(HarmonyOS)开发的天气应用,采用 ArkTS 语言开发&…

3Dblox

TSMC 3Dblox Introduction 3Dblox是TSMC定义的一门语言,目标是将物理封装系统分解为模块化的组件,然后进行集成 RDL : 代表interposer的部分 Die的实例化信息 堆叠信息 连接信息 thickness:Die与Die连接Bump的高度 RedHawk-SC-Electrothermal…

Python+大模型 day01

Python基础 计算机系统组成 基础语法 如:student_num 4.标识符要做到见名知意,增强代码的可读性 关键字 系统或者Python定义的,有特殊功能的字符组合 在学习过程中,文件名没有遵循标识符命名规则,是为了按序号编写文件方便查找复习 但是,在开发中,所有的Python文件名称必须…

磁光克尔效应在量子计算中的应用

一、量子自旋态光学操控 1、‌拓扑量子态探测‌ 磁光克尔效应通过检测拓扑磁结构(如磁斯格明子)的磁光响应,实现对量子材料中非平庸拓扑自旋序的非侵入式表征。例如,二维量子磁体中的“拓扑克尔效应”可通过偏振光旋转角变化揭示…

Vue.js---嵌套的effect与effect栈

4.3嵌套的effect与effect栈 1、嵌套的effect effect是可以发生嵌套的 01 effect(function effectFn1() { 02 effect(function effectFn2() { /* ... */ }) 03 /* ... */ 04 })有这么一段代码: 01 // 原始数据 02 const data { foo: true, bar: true } 03 /…

AAAI-2025 | 电子科大类比推理助力精准识别!SPAR:基于自提示类比推理的无人机目标探测技术

作者: Nianxin Li, Mao Ye, Lihua Zhou, Song Tang, Yan Gan, Zizhuo Liang, Xiatian Zhu 单位:电子科技大学计算机科学与工程学院,上海理工大学机器智能研究所,重庆大学计算机学院,谢菲尔德大学,萨里大学…

速查 Linux 常用指令 II

目录 一、网络管理命令1. 查看和配置网络设备:ifconfig1)重启网络命令2)重启网卡命令 2. 查看与设置路由:route3. 追踪网络路由:traceroute4. 查看端口信息和使用情况1)netstat 命令2)lsof 命令…

IIS服务器URL重写配置完整教程

1.下载URL Rewrite Module 2.1 https://www.iis.net/downloads/microsoft/url-rewrite https://download.microsoft.com/download/1/2/8/128E2E22-C1B9-44A4-BE2A-5859ED1D4592/rewrite_amd64_zh-CN.msi 2.安装

注解和 XML 两种方式有什么区别?

注解和 XML 是两种常见的配置方式(尤其在 Java 开发中,如 Spring 框架),它们的主要区别体现在配置方式、代码耦合性、可读性、维护性等方面。以下是两者的对比: 1. 配置方式 注解(Annotation) 在…

高速系统设计实例设计分析二

6.6 仿真约束的生成和实施 进行到这一步,我们已经完成了对实例进行仿真的所有条件的设置,包括对板子的设计要求分析和预布局处理。虽然从技术上讲,我们可以开始进行仿真分析并生成设计的约束,但是根据作者的工作经验,…

【MySQL】变更缓冲区:作用、主要配置以及如何查看

📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…