news 2026/4/16 12:17:57

RS485 双串口通信 + LCD 实时显示(DMA版)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RS485 双串口通信 + LCD 实时显示(DMA版)

目录

  • 一、前言
  • 二、DMA 通信核心原理简述
  • 三、CubeMX 的 DMA 串口配置
  • 四、FreeRTOS DMA 收发任务代码开发
  • 五、总结
  • 六、结尾

一、前言

前文我们已经完成了串口 RS485 通信的查询方式中断方式开发,两种方式各有适配场景。本次笔记将在此基础上,讲解串口通信的第三种实现方案 ——DMA 方式。串口的收发数据始终依靠 TDR 发送寄存器、RDR 接收寄存器完成数据中转,无论数据量多少都需经这两个寄存器经手;而 DMA 相当于独立的「硬件搬运工」,可自主完成寄存器与内存之间的数据搬运,全程无需 CPU 参与,能最大化解放 CPU 资源,是串口大数量、高频次数据传输的最优方案,本次依旧基于 FreeRTOS 多任务完成功能开发,保持功能逻辑不变。

二、DMA 通信核心原理简述

DMA(直接存储器访问)的核心作用,是在外设寄存器内存地址之间建立独立的数据传输通道,无需 CPU 的指令干预,自主完成数据的读写搬运。

对于串口通信而言:发送时,DMA 将内存中的数据搬运至串口 TDR 发送寄存器;接收时,DMA 将串口 RDR 接收寄存器的数据搬运至内存,整个传输过程 CPU 可完全脱离,仅在传输完成 / 异常时触发少量响应逻辑,大幅降低 CPU 的资源占用率。

三、CubeMX 的 DMA 串口配置

CubeMX 中有 DMA 功能的专属配置页面,本次开发沿用之前的串口 2 作为发送端、串口 4 作为接收端,为两路串口分别配置独立的 DMA 通道,其余串口、中断、FreeRTOS 相关配置均与上一篇中断版保持一致,具体 DMA 配置如下:

  1. 配置Channel0作为串口 2 的 DMA 通道,触发方式选择UART2_TX,数据传输方向为内存到外设,源地址设置为每次递增 1 字节。

  1. 配置Channel1作为串口 4 的 DMA 通道,触发方式选择UART4_RX,数据传输方向为外设到内存,目的地址设置为每次递增 1 字节。

四、FreeRTOS DMA 收发任务代码开发

DMA 方式的串口开发,在代码层面的逻辑与中断方式几乎完全一致,核心改动仅为将中断收发启动函数替换为 DMA 收发启动函数,依旧沿用此前编写的完成等待函数做传输状态判断与超时控制;当接收出现超时异常时,调用专用函数停止对应串口的 DMA 传输,规避异常占用,完整的任务代码如下:

// 串口2 DMA发送任务:周期发送自增字节数据staticvoidCH1_UART2_TxTaskFunction(void*pvParameters){uint8_tc=0;while(1){HAL_UART_Transmit_DMA(&huart2,&c,1);// 启动串口2 DMA发送1字节wait_uart2_tx_cplt(100);// 等待DMA发送完成,超时100msvTaskDelay(1000);// 延时1秒,固定周期发送c++;// 发送数据自增}};// 串口4 DMA接收任务:接收数据并实时显示至LCDstaticvoidCH2_UART4_RxTaskFunction(void*pvParameters){uint8_tc=0;intcnt=0;charbuf[100];HAL_StatusTypeDef err;while(1){err=HAL_UART_Receive_DMA(&huart4,&c,1);// 启动串口4 DMA接收1字节if(wait_uart4_rx_cplt(1000)==0)// 等待DMA接收完成,超时1000ms{// 接收成功,格式化数据并LCD显示sprintf(buf,"Recv Data : 0x%02x, Cnt : %d",c,cnt++);Draw_String(0,0,buf,0x0000ff00,0);}else{HAL_UART_DMAStop(&huart4);// 接收超时,停止串口4的DMA传输}}};

由此能清晰看出,串口的 DMA 传输与中断传输,在业务代码的实现逻辑上本质一致,只是底层的硬件数据传输方式不同。

五、总结

  1. 串口通信有查询、中断、DMA 三种实现方式,核心数据中转均依赖 TDR/RDR 寄存器;
  2. DMA 为硬件独立搬运数据,无需 CPU 参与,相比中断更能解放 CPU 资源,传输效率更高;
  3. DMA 版代码逻辑与中断版高度复用,仅替换收发启动函数,开发适配成本低;
  4. DMA 传输需做好超时异常处理,通过停止 DMA 规避硬件资源异常占用;
  5. 三种方式各有优势:查询简单、中断省资源、DMA 效率最优,按需选型即可。

六、结尾

本次完成了串口 RS485 通信三种实现方式的闭环学习,从查询到中断再到 DMA,是逐步优化 CPU 资源利用、提升传输效率的过程,也是嵌入式开发的核心优化思路。三种串口通信方式的开发逻辑可通用至各类外设,是嵌入式必备的基础能力。感谢各位的阅读,持续关注本系列,后续将带来更多项目实战的干货复盘与技术优化!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/11 4:35:37

物理AI:下一代科技前沿已悄然来临

ChatGPT在三年多前的发布引发了AI热潮。尽管AI模型持续变得更加强大,但要真正在人们的日常生活中发挥最大帮助作用,它们需要能够处理日常任务。这只有让AI走出笔记本电脑屏幕上的聊天机器人,更直接地融入我们的环境中才能实现。 行业最新热词…

作者头像 李华
网站建设 2026/4/16 10:42:34

全相位数字滤波器的基本原理与MATLAB仿真分析

目录 1.全相位数字滤波器的基本原理 1.1 输入信号的对称延拓 1.2 全相位滤波器的输出 1.3 频率响应 2.全相位数字滤波器的MATLAB仿真 全相位数字滤波器是一类基于“全相位处理思想”的线性时不变滤波器,其输入信号的每个输出点都由该点为中心的全部可用输入数据…

作者头像 李华
网站建设 2026/4/1 18:38:44

DevOps与SRE概念理解

DevOps与SRE概念理解 DevOps 和 SRE(Site Reliability Engineering)是现代软件工程中保障高效交付与系统稳定性的两大核心方法论,二者目标高度一致但侧重点不同,在生产环境中常常协同落地。 一、基础认知:什么是DevOps…

作者头像 李华
网站建设 2026/4/3 1:30:38

全网最全9个AI论文网站,专科生毕业论文轻松搞定!

全网最全9个AI论文网站,专科生毕业论文轻松搞定! AI 工具如何助力论文写作,让专科生轻松应对毕业挑战 在当前的学术环境中,越来越多的专科生开始借助 AI 工具来提升论文写作效率。尤其是那些对写作技巧不熟悉、时间紧张的学生来说…

作者头像 李华
网站建设 2026/4/10 11:13:00

大模型产品经理完整学习路线,从零基础到实战全覆盖,附免费学习资源_2026最新

文章详细介绍了大模型产品经理的五个阶段学习路径:基础知识、大模型技术、产品管理、实战经验和持续提升。内容涵盖计算机科学、人工智能基础、大模型技术概览、产品思维培养及实战项目经验。同时提供了丰富的学习资源,包括学习路线图、视频教程、技术文…

作者头像 李华