STM32--DMA

一、DMA简介

DMA ,全称为: Direct Memory Access ,即直接存储器访问。DMA 传输方式无需 CPU 直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为 RAM 与 I/O 设备开辟一条直接传送数据的通路,能使 CPU 的效率大为提高。
STM32F407 最多有 2 个 DMA 控制器 (DMA1 和 DMA2) ,两个 DMA 控制器总共有 16 个数据流。每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。还有一个仲裁器来协调各个 DMA 请求的优先权。

二、配置步骤


1、使能DMA时钟
2、初始化DMA相关参数,连接DMA和外设
调用 HAL_DMA_Init 函数初始化 DMA 的相关参数,包括配置通道,外设地址,存储器地址,传输数据量等。
HAL 库为了处理各类外设的 DMA 请求,在调用相关函数之前,需要调用一个宏定义标识符,来连接 DMA **和外设句柄。**例如要使用串口 DMA 发送,所以方式为:

复制代码
__HAL_LINKDMA(&g_uart1_handle, hdmatx, g_dma_handle);

其中 g_uart1_handle 是串口初始化句柄,我们在 usart.c 中定义过了。g_dma_handle 是 DMA 初始化句柄。hdmatx 是外设句柄结构体的成员变量,在这里实际就是 g_uart1_handle 的成员变 量。在 HAL 库中,任何一个可以使用 DMA 的外设,它的初始化结构体句柄都会有一个DMA_HandleTypeDef 指针类型的成员变量,是 HAL 库用来做相关指向的。hdmatx 就是DMA_HandleTypeDef 结构体指针类型。这句话的含义就是把 g_uart1_handle 句柄的成员变量 hdmatx 和 DMA 句柄 g_dma_handle 连接起来,是纯软件处理,没有任何硬件操作。

复制代码
HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma);

形参 1 是 DMA_HandleTypeDef 结构体类型指针变量,其定义如下:

接下来我们重点介绍 Init ,它是 DMA_InitTypeDef 结构体类型变量,该结构体定义如下:

增量模式:
其实就是对外设\存储器的地址++,若设置为增量模式,在传输完低地址数据后会接着传输高地址数据。
模式选择:
循环模式---在DMA发送完指定字节数据后再次循环发送
外设流控模式---意味着数据传输的节奏由外设来控制,而不是由DMA控制器自行决定。这通常用于一些高吞吐量的外设,例如UART、SPI、I2C等,这些外设可以在需要的时候发起传输请求。
3、使能串口的DMA发送,启动传输,在这之中就设置好了源地址、目标地址和发送长度,调用该函数后会开启相应的 DMA 中断
4、查询传输状态,可以获取当前剩余数据量,通过检测DMA寄存器的相关位实现
5、使能中断、编写中断服务函数后就可以使用DMA中断
DMA 中断对于每个流都有一个中断服务函数,比如 DMA2_Stream7 的中断服务函数为 DMA2_Stream7_IRQHandler。 HAL 库提供了通用 DMA 中断处理函数 HAL_DMA_IRQHandler ,在该函数内部,会对 DMA 传输状态进行分析,然后调用相应的中断处理回调函数:

三、实验示例

相关推荐
木子单片机3 分钟前
基于51单片机计步器—无线蓝牙APP上传
单片机·嵌入式硬件·51单片机·keil
智者知已应修善业27 分钟前
【51单片机只有一个8*8点阵数据如何滚动起来一片595+一组IO+花样】2022-1-15
c++·经验分享·笔记·单片机·蓝桥杯·硬件架构
恒锐丰科技林技术员27 分钟前
EG2123A 三相独立半桥驱动芯片解析与工程应用
经验分享·嵌入式硬件·硬件工程
硅基手札40 分钟前
【Linux 内核专栏 13】快IO层
linux·服务器·嵌入式硬件
李日华大战鸡红1 小时前
滑膜观测器(学习记录)
stm32·单片机·学习·matlab·机器人
白搞电子1 小时前
ESP32-S31 项目如何制作 Windows 一键烧录包:完整镜像、esptool 与数据边界
windows·stm32·单片机
xiangw@GZ2 小时前
纽扣电池型号
嵌入式硬件
优信电子2 小时前
Raspberry Pi Pico 硬件开发 —— 第二课:MicroPython 从入门到项目实践(LED篇)
单片机·嵌入式硬件·树莓派·micropython·pico·入门教学
黑妹天下第一乖2 小时前
第 12 讲:阿加犀 AidLux 部署与量产——把端侧 AI 应用做成 7×24 产品
人工智能·嵌入式硬件·数码相机·接口隔离原则·iot
xiangw@GZ3 小时前
Type‑C USB DRD 电路
单片机·嵌入式硬件