STM32 USART/UART DMA RX与TX示例
stm32-usart-uart-dma-rx-tx
4/5
🧩 软硬件结合
已发布
项目简介
STM32 examples for USART using DMA for efficient RX and TX transmission
这是一个专注于STM32微控制器UART与DMA协同工作的开源项目,核心解决了两大嵌入式开发中的典型痛点:**未知长度数据的可靠接收** 和 **高效无阻塞的数据发送**。
标签
项目特点
**高效接收未知长度数据**:利用DMA循环模式与UART空闲线/接收超时事件,无需预先知道数据长度即可连续接收。
**CPU零负担发送**:通过DMA正常模式实现内存到UART的数据传输,发送期间CPU可处理其他任务。
**事件驱动架构**:结合DMA的HT/TC中断和UART的空闲线中断,实现灵活、低延迟的数据处理。
**支持高波特率**:DMA模式适用于`> 1Mbps`的高波特率通信,性能优于轮询和中断模式。
**清晰的示例与图解**:提供详细的代码示例、时序图和事件组合分析,便于理解和移植。
**通用性强**:适用于所有具备UART和DMA的STM32系列芯片。
技术规格
| 目标平台 | STM32系列微控制器(至少1个UART和1个DMA控制器) |
|---|---|
| 通信外设 | USART / UART / LPUART |
| 数据传输方式 | DMA(直接内存访问) |
| DMA模式 | 接收:循环模式;发送:正常模式 |
| 关键事件 | DMA HT(半传输完成)、DMA TC(传输完成)、UART IDLE LINE(空闲线)、UART RTO(接收超时) |
| 接收缓冲区大小 | 示例中使用20字节,实际应用可根据波特率和处理速度调整 |
| 波特率支持 | 从低波特率(如9600)到高速(> 1Mbps) |
| 中断支持 | 支持DMA中断和UART中断 |
| 开发环境 | 通用嵌入式C语言开发环境(如Keil、IAR、STM32CubeIDE) |
项目资源
搜索资源
物料清单 (BOM)
| 物料名称 | 数量 | 参考价格 | 备注 |
|---|---|---|---|
| STM32开发板(如STM32F4系列) | 1 | — | 需具备至少1个UART和1个DMA控制器 |
| USB转串口模块(如FT232、CH340) | 1 | — | 用于与PC通信和调试 |
| 杜邦线 | 若干 | — | 连接开发板与串口模块 |
| STM32CubeMX或HAL库 | 1 | — | 用于初始化配置 |
| 串口调试助手 | 1 | — | 用于发送/接收数据测试 |
能力画像
⚪ 记忆与知识检索: 2/5
🔵 逻辑推演: 4/5
⚪ 表达与交流: 2/5
⚪ 感知与观察: 2/5
🔵 数理与计算: 3/5
🔵 动手与操作: 4/5
⚪ 狂热与坚持: 3/5
⚪ 创造与创新: 3/5
项目图库
所需技能
🔧 **动手能力**:能够搭建硬件电路,连接STM32开发板与串口模块,使用调试工具进行测试。
💻 **编程能力**:熟练掌握C语言嵌入式编程,理解STM32 HAL库或LL库的使用,能够配置UART和DMA外设,编写中断服务函数。
⚡ **电子电路**:了解UART通信协议、DMA工作原理、中断系统,具备基本的硬件调试能力(如使用逻辑分析仪)。
适用场景
**高波特率串口通信**:当需要以`> 1Mbps`的速率进行串口通信时,DMA模式可确保数据不丢失且CPU负载低。
**实时操作系统(RTOS)环境**:DMA模式无需CPU逐字节处理,非常适合与RTOS配合,避免中断长时间占用CPU。
**低功耗应用**:DMA传输完成后CPU可进入休眠模式,仅在需要处理数据时唤醒,降低功耗。
**大数据量突发传输**:如传感器数据采集、固件升级等场景,DMA可高效处理大块数据。
**多任务系统**:CPU需要同时处理多个外设或任务时,使用DMA进行UART通信可避免阻塞。