news 2026/10/23 1:42:34

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/10/22 3:12:33

3分钟解锁钉钉自动打卡:告别早起的智能秘诀

3分钟解锁钉钉自动打卡:告别早起的智能秘诀 【免费下载链接】AutoDingding 钉钉自动打卡 项目地址: https://gitcode.com/gh_mirrors/au/AutoDingding 每天早上被闹钟惊醒,匆匆忙忙洗漱出门,一路狂奔只为赶上9点的打卡?这种…

作者头像 李华
网站建设 2026/10/22 16:49:53

STM32_PWR

简介 PWR(Power Control,电源控制)是 STM32 单片机中用于管理电源模式和电压的外设,支持多种低功耗模式,可显著降低系统功耗。STM32F407 系列芯片配备了功能强大的 PWR 外设,支持睡眠模式、停止模式、待机模式等多种低功耗模式,广泛应用于电池供电、低功耗应用等场景。…

作者头像 李华
网站建设 2026/10/20 4:22:01

阴阳师智能挂机助手:让游戏更轻松的自动化工具

阴阳师智能挂机助手:让游戏更轻松的自动化工具 【免费下载链接】yysScript 阴阳师脚本 支持御魂副本 双开 项目地址: https://gitcode.com/gh_mirrors/yy/yysScript 你是否也曾因为每天重复刷御魂而感到枯燥乏味?是否希望有一款工具能够帮助你自动…

作者头像 李华
网站建设 2026/10/21 13:22:26

如何用代码绘制科研级图形?揭秘LaTeX绘图的隐藏优势

如何用代码绘制科研级图形?揭秘LaTeX绘图的隐藏优势 【免费下载链接】tikz Random collection of standalone TikZ images 项目地址: https://gitcode.com/gh_mirrors/tikz/tikz 在科研论文的创作过程中,可视化元素往往决定了研究成果的传达效率。…

作者头像 李华
网站建设 2026/10/22 13:21:26

VibeThinker-1.5B部署监控:GPU利用率实时查看方法详解

VibeThinker-1.5B部署监控:GPU利用率实时查看方法详解 1. 为什么需要实时监控GPU利用率 当你在本地或云服务器上成功部署 VibeThinker-1.5B-WEBUI 后,第一眼看到的往往是那个简洁的网页界面——输入提示词、点击生成、等待响应。但真正决定你能否稳定、…

作者头像 李华