news 2026/4/23 15:24:48

STM32_DMA

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
STM32_DMA
简介

DMA(Direct Memory Access,直接内存访问)是一种允许外设直接与内存进行数据传输的技术,无需 CPU 干预,可大大提高数据传输效率。STM32F407 系列芯片配备了 2 个 DMA 控制器(DMA1 和 DMA2),共 16 个数据流,每个数据流可配置为不同的外设通道,支持多种传输模式,如内存到内存、外设到内存、内存到外设等。本文从 DMA 的基本原理出发,详细讲解 STM32F407 DMA 的配置方法、代码实现、传输模式以及实际应用案例,帮助你快速掌握 DMA 的使用技巧。

一、DMA核心概念与分类
1.1 基本概念

DMA 是一种允许外设直接与内存进行数据传输的技术,其主要特点包括:

  • 减轻 CPU 负担:数据传输过程中 CPU 可执行其他任务
  • 提高传输效率:避免 CPU 中断处理的开销
  • 支持多种传输模式:内存到内存、外设到内存、内存到外设
  • 支持多种触发方式:可由外设事件触发,实现自动化传输
  • 支持多种数据宽度:8 位、16 位、32 位

关键参数

  • 数据流:DMA 控制器中的数据传输通道
  • 通道:每个数据流可配置为不同的外设通道
  • 传输方向:内存到内存、外设到内存、内存到外设
  • 数据宽度:8 位、16 位、32 位
  • 传输模式:正常模式、循环模式、双缓冲模式
1.2 STM32F407 的 DMA 资源

STM32F407 系列芯片配备了 2 个 DMA 控制器:

DMA 控制器数据流数量通道数量时钟源适用场景
DMA178AHB1主要服务于 APB1 外设
DMA298AHB2主要服务于 APB2 外设和 AHB 外设

DMA1 数据流与通道对应关系

数据流通道0通道1通道2通道3通道4通道5通道6通道7
Stream0SPI3_RXUART3_RXTIM4_CH1/TIM4_TRGOI2C1_RXTIM2_CH1/TIM2_TRGO---
Stream1-SPI3_TXTIM4_CH2I2C1_TXTIM2_CH2/TIM2_UPTIM3_CH4/TIM3_UP--
Stream2--TIM4_CH3I2C2_RXTIM2_CH3TIM3_CH1/TIM3_TRGO--
Stream3--TIM4_UPI2C2_TXTIM2_CH4TIM3_CH2--
Stream4-----TIM3_CH3DAC1_CH1/DAC1_CH2TIM5_TRGO/TIM5_CH4
Stream5------DAC2_CH1TIM5_CH1/TIM5_CH2/TIM5_CH3
Stream6-------TIM6_UP/TIM7_UP
Stream7--------

DMA2 数据流与通道对应关系

数据流通道0通道1通道2通道3通道4通道5通道6通道7
Stream0ADC1SPI1_RXUSART1_RX-----
Stream1--------
Stream2----USART1_TX---
Stream3--------
Stream4--------
Stream5--------
Stream6--------
Stream7--------

关键特性

  • 支持 8 位、16 位、32 位数据宽度
  • 支持正常模式、循环模式、双缓冲模式
  • 支持内存到内存、外设到内存、内存到外设传输
  • 支持外设和内存地址自动递增
  • 支持多种中断:传输完成、半传输完成、传输错误等
  • 支持 FIFO 模式和突发传输
二、DMA工作原理
2.1 基本工作原理

DMA 的基本工作原理是通过 DMA 控制器直接控制数据在外设和内存之间的传输,无需 CPU 干预。

传输流程

  1. CPU 配置 DMA 传输参数(源地址、目的地址、传输长度等)
  2. CPU 使能 DMA 传输
  3. DMA 控制器根据配置参数执行数据传输
  4. 传输完成后,DMA 控制器触发中断(如果使能)
  5. CPU 在中断服务函数中处理传输完成事件
2.2 传输模式

DMA 支持多种传输模式:

正常模式

  • 传输完成后,DMA 控制器停止工作
  • 需要重新配置 DMA 参数才能进行下一次传输
  • 适用于单次传输场景

循环模式

  • 传输完成后,DMA 控制器自动重新开始传输
  • 无需 CPU 干预,可实现连续传输
  • 适用于连续数据采集或输出场景

双缓冲模式

  • 使用两个缓冲区交替进行数据传输
  • 在一个缓冲区传输时,CPU 可以处理另一个缓冲区的数据
  • 适用于需要实时处理数据的场景
2.3 数据流配置

DMA 数据流的配置参数包括:

外设地址

  • 外设数据寄存器的地址
  • 可配置为固定地址或自动递增

内存地址

  • 内存缓冲区的地址
  • 可配置为固定地址或自动递增

传输长度

  • 要传输的数据项数量
  • 最大值为 65535

数据宽度

  • 外设数据宽度:8 位、16 位、32 位
  • 内存数据宽度:8 位、16 位、32 位

传输方向

  • 外设到内存:从外设读取数据到内存
  • 内存到外设:从内存发送数据到外设
  • 内存到内存:从内存一个区域复制数据到另一个区域

优先级

  • 低、中、高、非常高
  • 当多个数据流同时请求时,根据优先级决定传输顺序
三、DMA配置与代码实现
3.1 标准库配置步骤

以 DMA2 Stream0 Channel0(ADC1)为例,使用标准库配置 DMA 的基本步骤:

  1. 使能 DMA 时钟
  2. 配置 DMA 数据流参数
  3. 配置 DMA 通道
  4. 配置 DMA 中断(可选)
  5. 使能 DMA 数据流
3.2 代码实现(DMA2 Stream0 Channel0,ADC1)
#include"stm32f4xx.h"#defineADC1_DMA_BUFFER_SIZE100uint16_tADC1_DMA_Buffer[ADC1_DMA_BUFFER_SIZE];/** * @brief 初始化DMA2 Stream0 Channel0(ADC1) * @param 无 * @retval 无 */voidDMA2_Stream0_Init(void){DMA_InitTypeDef DMA_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;// 1. 使能DMA2时钟RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2,ENABLE);// 2. 配置DMA2 Stream0DMA_DeInit(DMA2_Stream0);while(DMA_GetCmdStatus(DMA2_Stream0)!=DISABLE
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 10:42:46

Z-Image-Turbo推理延迟优化:H800 GPU部署完整步骤

Z-Image-Turbo推理延迟优化:H800 GPU部署完整步骤 1. 为什么Z-Image-Turbo值得特别关注 你可能已经用过不少文生图模型,但Z-Image-Turbo带来的体验差异是实实在在的——不是“快一点”,而是“快到不用等”。在H800 GPU上实测,从…

作者头像 李华
网站建设 2026/4/22 14:24:55

VSCode Mermaid预览完全指南:从基础到高级的全方位解决方案

VSCode Mermaid预览完全指南:从基础到高级的全方位解决方案 【免费下载链接】vscode-mermaid-preview Previews Mermaid diagrams 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-mermaid-preview VSCode Mermaid预览是一款强大的插件,为开…

作者头像 李华
网站建设 2026/4/23 14:07:23

AI图像增强实战教程:集成WebUI的EDSR模型详细部署步骤

AI图像增强实战教程:集成WebUI的EDSR模型详细部署步骤 1. 为什么你需要AI图像超分?——从模糊到清晰的真实需求 你有没有试过翻出十年前的老照片,想发朋友圈却发现满屏马赛克? 有没有下载过一张网图做设计素材,放大两…

作者头像 李华
网站建设 2026/4/23 8:37:32

MGeo在电商平台的应用:收货地址合并与用户画像构建

MGeo在电商平台的应用:收货地址合并与用户画像构建 1. 为什么电商需要“懂地址”的AI? 你有没有遇到过这样的情况:同一个用户,在三个月内下了五单,收货地址却写了五种不同写法—— “杭州市西湖区文三路123号A栋501”…

作者头像 李华
网站建设 2026/4/23 8:36:53

MedGemma-X效果可视化:热力图定位+自然语言解释+结构化术语同步输出

MedGemma-X效果可视化:热力图定位自然语言解释结构化术语同步输出 1. 为什么“看懂一张胸片”比想象中更难? 你有没有试过盯着一张胸部X光片,明明知道肺野、纵隔、肋骨这些名词,却依然不确定“那里是不是有点不对劲”&#xff1…

作者头像 李华
网站建设 2026/4/22 21:49:54

滤波电路响应测试:proteus示波器波形采集完整示例

以下是对您提供的博文《滤波电路响应测试:Proteus示波器波形采集完整技术分析》的深度润色与专业重构版。本次优化严格遵循您的全部要求:✅ 彻底去除AI痕迹,语言自然、老练、有“人味”——像一位在高校带过十年模电实验、也常蹲产线调板子的…

作者头像 李华