1. STM32H750串口DMA收发实验概述
在嵌入式开发中,串口通信是最基础也最常用的外设之一。传统的串口收发方式通常采用轮询或中断模式,但这两种方式都存在明显的效率问题:轮询方式会占用大量CPU资源,而中断方式在高速数据传输时会产生频繁的中断开销。
STM32H750作为STMicroelectronics推出的高性能Cortex-M7内核微控制器,其DMA(Direct Memory Access)控制器与串口外设的协同工作能力为我们提供了一种更高效的解决方案。通过DMA+空闲中断的组合,我们可以实现:
- 不定长数据的自动接收:无需预先知道数据长度,系统自动检测数据帧结束
- 零拷贝数据发送:CPU只需准备好数据,DMA自动完成传输
- 极低的CPU占用率:数据传输过程几乎不占用CPU资源
这个实验的核心价值在于解决了嵌入式系统中常见的几个串口通信痛点:
- 如何高效处理未知长度的数据帧
- 如何减少通信过程中的CPU干预
- 如何避免数据接收时的缓冲区溢出
2. 硬件设计与环境搭建
2.1 硬件连接要求
对于STM32H750的串口DMA实验,我们需要确保以下硬件连接正确:
-
串口引脚连接:
- USART1_TX: PA9 (默认)
- USART1_RX: PA10 (默认)
- 需连接USB转TTL模块与PC通信
-
DMA通道分配:
- USART1_RX → DMA1 Stream0 (Channel4)
- USART1_TX → DMA1 Stream1 (Channel4)
-
电源与时钟:
- 确保1.8V核心电压稳定
- HSE时钟配置为25MHz
- 主频配置为400MHz
2.2 开发环境准备
推荐使用以下工具链进行开发:
bash复制1. IDE: STM32CubeIDE 1.9.0或更高版本
2. HAL库版本: STM32H7xx HAL Driver v1.10.0
3. 调试工具: ST-Link V2/V3
4. 串口调试助手: Tera Term或SecureCRT
注意:使用STM32CubeMX生成代码时,务必选择正确的芯片型号STM32H750VBTx,并检查时钟树配置是否合理。
3. 软件实现详解
3.1 CubeMX配置步骤
-
USART1配置:
- Mode: Asynchronous
- Baud Rate: 115200
- Word Length: 8 bits
- Parity: None
- Stop Bits: 1
- Over Sampling: 16 samples
-
DMA配置:
- 添加USART1_RX的DMA请求
- Stream: DMA1 Stream0
- Direction: Peripheral to Memory
- Priority: Medium
- Mode: Circular (重要)
- Increment Address: Memory Only
- 添加USART1_TX的DMA请求
- St
- 添加USART1_RX的DMA请求
