这是本文档旧的修订版!
银杏科技有限公司旗下技术文档发布平台 |
技术支持电话 | 0379-69926675-801 |
技术支持邮件 | Gingko@vip.163.com |
技术论坛 | http://www.eeschool.org |
版本 | 日期 | 作者 | 修改内容 |
V0.1 | 2020-11-11 | gingko | 初次建立 |
STM32CubeMX教程十五——DMA实验
实验十五:DMA实验——储存器到存储器的传输
一、实验目的与意义
了解STM32 DMA结构
了解STM32 DMA 特征
掌握DMA的使用方法
掌握STM32 HAL库中MDA属性的配置方法
掌握KEILMDK 集成开发环境使用方法
二、实验设备及平台
iCore3L 双核心板
JLINK(或相同功能)仿真器
Micro USB线缆
Keil MDK 开发平台
STM32CubeMX开发平台
装有WIN XP(及更高版本)系统的计算机
三、实验原理
1、DMA简介
直接存储器访问(DMA),全称Direct Memory Access,用于在外设与存储器之间以及存储器与存储器之间提供高速数据传输。可以在无需任何CPU操作的情况下通过DMA快速移动数据。这样节省的CPU资源可供其它操作使用。
DMA控制器基于复杂的总线矩阵架构,将功能强大的双AHB主总线架构与独立的FIFO结合在一起,优化了系统带宽。两个DMA控制器总共有16个数据流(每个控制器 8 个),每一个DMA控制器都用于管理一个或多个外设的存储器访问请求。每个数据流总共可以有多达8个通道(或称请求)。每个通道都有一个仲裁器,用于处理DMA请求间的优先级。
2、DMA工作原理
DMA 允许不同速度的硬件装置来沟通,而不需要依于 CPU 的大量中断负载。否则,CPU 需要从来源把每一片段的资料复制到暂存器,然后把他们再次写回到新的地方。在这个时间中,CPU 对于其他的工作来说就无法使用。
DMA 传输主要地将一个内存区从一个装置复制到另外一个。当 CPU 初始化这个传输动作,传输动作本身是由 DMA 控制器来实行和完成。典型的例子就是移动一个外部内存的区块到芯片内部更快的内存去。像是这样的操作并没有让处理器工作拖延,反而可以被重新排程去处理其他的工作。所以,DMA传输对于高效能嵌入式系统算法和网络是很重要的。
3、DMA主要特性
该器件具有两个通用双端口 DMA(DMA1和DMA2)
每个通用端口都有 8 个流,它们能够管理存储器到存储器、外设到存储器、存储器到外设的传输
支持独立的8、16、32位存储器和外设传输
它们具有用于 APB/AHB 外设的专用FIFO,支持突发传输,其设计可提供最大外设带宽 (AHB/APB)
这两个DMA控制器支持循环缓冲区管理,当控制器到达缓冲区末尾时,无需专门代码
这两个DMA控制器还有双缓冲特性,可自动使用和切换两个存储器缓冲,而不需要特殊代码
每个数据流都与专用的硬件 DMA 请求相连,同时支持软件触发
通过软件进行相关配置,并且数据源和数据目标之间传输的数据量不受限制
支持的外设:定时器,ADC,SPI,I2C,USART,DAC,I2S,SDIO和DCI
可编程的数据传输数目范围为1-65535
在同一个DMA模块上,多个请求间的优先权可以通过软件编程设置(共有四级:很高、高、中等和低),DMA通道的优先级请求由软件配置和硬件通道号确定
转让源和目标的大小是独立且可配置的
4、DMA工作流程图
5、DMA传输
每个DMA传输包含三项操作:
通过DMA_SxPAR或DMA_SxM0AR寄存器寻址,从外设数据寄存器或存储器单元中加载数据
通过DMA_SxPAR或DMA_SxM0AR寄存器寻址,将加载的数据存储到外设数据寄存器或存储器单元
DMA_SxNDTR计数器在数据存储结束后递减,该计数器中包含仍需执行的事务数。在产生事件后,外设会向DMA控制器发送请求信号。DMA控制器根据通道优先级处理该请求。只要DMA控制器访问外设,DMA控制器就会向外设发送确认信号。外设获得DMA控制器的确认信号后,便会立即释放其请求。一旦外设使请求失效,DMA控制器就会释放确认信号。如果有更多请求,外设可以启动下一个事务。
四、实验程序