专题STM32 DMA详解
STM32 DMA详解
1. DMA基础概念
DMA(Direct Memory Access,直接存储器访问)是STM32微控制器中一种无需CPU干预的数据传输机制,可在外设(如ADC、UART、SPI)与内存(RAM)之间,或内存与内存之间高效搬运数据。通过将数据传输任务交给DMA控制器,CPU得以处理其他任务,提升系统效率和实时性。
2. DMA工作原理
- 触发机制:当外设(如ADC转换完成、UART接收到数据)或软件请求DMA传输时,DMA控制器接管总线控制权,直接操作数据。
- 传输流程:
- 外设或软件发出传输请求。
- DMA控制器响应,根据配置的源地址、目标地址和数据量进行传输。
- 传输完成后,DMA释放总线,并可选触发中断通知CPU。
3. STM32 DMA核心特性
- 通道与请求映射:不同DMA通道对应特定外设(如UART1_TX使用DMA1通道4)。需查阅芯片手册确定映射关系。
- 传输方向:
- 外设 ↔ 内存(如ADC数据存入数组)
- 内存 ↔ 外设(如通过UART发送数组数据)
- 内存 ↔ 内存(高速数据拷贝)
- 数据宽度:支持8/16/32位,源和目标的数据宽度可独立设置(自动适配)。
- 地址递增:传输后源/目标地址可自动递增,便于处理连续数据。
- 循环模式:数据循环传输(如ADC连续采样),适用于环形缓冲区场景。
- 中断类型:支持传输完成、半传输完成、传输错误中断。
4. DMA配置步骤(以HAL库为例)
// 示例:配置UART通过DMA发送数据
// 1. 使能DMA时钟(不同系列可能不同)
__HAL_RCC_DMA1_CLK_ENABLE();
// 2. 初始化DMA通道参数
DMA_HandleTypeDef hdma_uart_tx;
hdma_uart_tx.Instance = DMA1_Channel4; // 根据外设选择通道
hdma_uart_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; // 内存到外设
hdma_uart_tx.Init.PeriphInc = DMA_PINC_DISABLE; // 外设地址固定(UART数据寄存器)
hdma_uart_tx.Init.MemInc = DMA_MINC_ENABLE; // 内存地址递增(数组)
hdma_uart_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; // 外设数据宽度
hdma_uart_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; // 内存数据宽度
hdma_uart_tx.Init.Mode = DMA_NORMAL; // 单次传输模式
HAL_DMA_Init(&hdma_uart_tx);
// 3. 绑定DMA到外设
__HAL_LINKDMA(&huart1, hdmatx, hdma_uart_tx);
// 4. 使能外设的DMA请求
SET_BIT(huart1.Instance->CR3, USART_CR3_DMAT); // 使能UART的TX DMA
// 5. 启动传输(发送数据)
uint8_t data[] = "Hello DMA!";
HAL_UART_Transmit_DMA(&huart1, data, sizeof(data));
5. 典型应用场景
- ADC多通道采样:ADC连续转换数据通过DMA存入RAM数组,避免CPU轮询。
- 高速通信:SPI/I2C与外部存储器(如Flash)大量数据交换。
- USART收发:DMA+空闲中断实现串口不定长数据接收。
- 内存操作:快速拷贝或填充大块内存(如图像处理)。
6. 注意事项
- 资源冲突:同一DMA通道不可同时用于多个外设。
- 缓存一致性:若使用Cache(如STM32H7),需调用
SCB_CleanDCache()等函数确保数据同步。 - 传输完成判断:避免在传输未完成时操作数据缓冲区。
- 中断优先级:DMA中断与相关外设中断的优先级需合理分配。
7. 调试技巧
- 使用断点+调试器观察DMA寄存器(如CNDTR查看剩余数据量)。
- 开启DMA传输完成中断,在中断内标记状态。
- 若传输异常,检查地址对齐、数据宽度匹配及DMA通道是否使能。
参考资料:
- 《STM32参考手册》(对应型号的DMA章节)
- ST官方例程(如STM32CubeMX生成的DMA示例)
- HAL库源码(
stm32xx_hal_dma.c)
通过合理使用DMA,可显著优化STM32系统的性能,尤其在高吞吐量或实时性要求高的场景中效果显著。
-
STM32采用串口DMA方式向上位机连续发送数据
目录前言一、DMA简介1.1DMA功能框图1.1.1DMA 请求1.1.2通道1.1.3仲裁器1.2DMA数据配置 1.2.1数据传输方向:1.2.2数据传输大小和单位1.2.3什么时候传输完成1.3DMA库函数配置过程二、串口DMA方式向上位机发送数据2.1新建工程2.2设置RCC 2.3打开USART1及DMA模式 三、代码编写3.1添加代码 3.2编
2次下载 2023-05-11 2.32 MB -
详解STM32中的DMA原理
DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。
0次下载 2022-02-08 1.23MB -
STM32的“GPU”——DMA2D实例详解
GPU即图形处理器,是现代显卡的核心。在没有GPU的时代,所有图形的绘制都是由CPU来完成的,CPU需要计算图形的边界、颜色等数据,并且负...
5次下载 2022-01-25 508.69KB -
STM32基础-----DMA
STM32基础-------DMA
11次下载 2021-12-20 -
stm32——DMA
DMA部分我用到的相对简单,当然,可能这是新东西,我暂时还用不到它的复杂功能吧。下面用问答的形式表达我的思路。DMA的定义直接存储器存取(Direct Memory Access,DMA)是计算机科学中的一种内存访问技术。它允许某些电脑内部的硬体子系统(电脑外设),可以独立地直接读写系统存储器,而不需绕道 CPU。在同等程度的CPU负担下,DMA是一种快速的
11次下载 2021-12-14 -
16、STM32——DMA详解
1、DMA简介DMA(Direct Memory Access) :直接存储器存取,是单片机的一个外设,它的主要功能是用来搬数据,但是不需要占用 CPU,即在传输数据的时候, CPU 可以干其他的事情,好像是多线程一样。数据传输支持从外设到存储器或者存储器到存储器,这里的存储器可以是 SRAM 或者是 FLASH。DMA 控制器包含了 DMA1 和 DMA2
21次下载 2021-12-02 0.34 MB -
基于HC32F460系列的DMA控制器使用手册
HC32F460 系列 MCU 内部集成 DMAC 模块,能够在 CPU 不参与的情况下实现存储器之间,存储器和外围功能模块之间以及外围功能模块之间的数据交换。
3次下载 2021-09-06 0.02 MB -
STM32 DMA使用详解
DMASTM32 DMA使用详解1、画图Cortex-M3内部结构图,要体现相应的总线,并标注其作用。Icode:程序存在Flash中,通过ICode(Instruction Code)总线与Cortex连接取指令。Dcode:数据被存放在外设内部Flash(SRAM)中,通过DCode(Data Code)访问。Systembus: 访问外设的寄存器,通常
0次下载 2021-08-12 -
STM32串口DMA容易忽视的问题资料下载
电子发烧友网为你提供STM32串口DMA容易忽视的问题资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料、英文资料、参考设计、用户指南、解决方案等资料,希望可以帮助到广大的电子工程师们。
5次下载 2021-04-16 154.13KB -
STM32实现用DMA完成多通道AD采样资料下载
电子发烧友网为你提供STM32实现用DMA完成多通道AD采样资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料、英文资料、参考设计、用户指南、解决方案等资料,希望可以帮助到广大的电子工程师们。
9次下载 2021-03-29 108.9KB -
dsPIC33F系列参考手册之直接存储器访问(DMA)(第III部分)
直接存储器访问 (Direct Memory Access, DMA)控制器是 Microchip 的高性能 16 位数字信号 控制器(Digital Signal Controller,DSC)系列中很重要的子系统。通过该子系统,无需 CPU 协 助即可在 CPU 及其外设之间方便地传输数据。 dsPIC33F DMA 控制器针对高性能实时嵌入式应 用进行
10次下载 2018-06-22 0.84 MB -
《Python开发技术详解》-随书附带程序
Python开发技术详解 周伟,宗杰等编著 机械工业出版社 随书附带程序
0次下载 2018-05-09 0.79 MB -
TMS320C6474 DSP 增强型DMA控制器用户指南
本文档介绍了增强型直接存储器存取功能和操作(EDMA3)在tms320c6474数字信号处理器(DSP)控制器。这是一个高性能的多通道,EDMA3,多线程的DMA控制器允许你的程序的各种传输的几何形状和转移序列。
6次下载 2018-04-16 1.01 MB -
STM32之DMA
6次下载 2012-09-13 2380KB -
STM32 DMA介绍
39次下载 2012-07-16 319KB
- 本周
- 本月
- 总榜
-
11.55 MB 1次下载 免费
-
2
I-PEX 82863-100B-02-D_CABLINE-CA系列PCIe/USB4极细同轴线图纸
301.83 KB 0次下载 免费 -
3
A-29P AI智能降噪回音消除模块
1.50 MB 0次下载 免费 -
4
性能优异的 USB 音频编码模块 HX-01 说明书
1.11 MB 0次下载 免费 -
5
I-PEX 82652-100B-02-D_CABLINE-CA系列40P极细同轴线束SI设计图纸
293.34 KB 0次下载 免费 -
6
双麦回音消除及远场拾音降噪模块 A-68
1.58 MB 0次下载 免费 -
7
FT-02语音模块测试底座规格书)VJ1
2.16 MB 0次下载 免费 -
8
A-59P_多功能语音处理模组规格书公版
3.48 MB 0次下载 免费