关于STM32 DMA相关总结[概述知识点]

关于DMA相关知识的总结,写给未来的自己,希望有帮助。立个Flag[坚持写博客总结自己工作或学习记录自己的生活]

-------------------------------------------------------------------------------------有事做,有人爱,有所期待----------------------------------------------------------------------------------------------------------------------------------------------------

                         DMA基础知识点

DMA 简介
直接存储器访问 (DMA) 用于在外设与存储器之间以及存储器与存储器之间提供高速数据传输。可以在无需任何 CPU 操作的情况下通过 DMA 快速移动数据。这样节省的 CPU 资源可供其它操作使用。

DMA 控制器基于复杂的总线矩阵架构,将功能强大的双 AHB 主总线架构与独立的 FIFO 结合在一起,优化了系统带宽。两个 DMA 控制器总共有 16 个数据流(每个控制器 8 个),每一个 DMA 控制

器都用于管理一个或多个外设的存储器访问请求。每个数据流总共可以有多达 8 个通道(或称请求)。每个通道都有一个仲裁器,用于处理 DMA 请求间的优先级。

(说白了,就是通过AHB总线将数据从源地址--->目标地址无需CPU参与高效数据传输模式,在数据传输的过程中通过寄存器配置好要传输的数据流和数据通道然后DMA控制器管理相关的寄存器进行数据传输)

DMA 框图

DMA 控制器执行直接存储器传输:因为采用 AHB 主总线,它可以控制 AHB 总线矩阵来启
动 AHB 事务。
它可以执行下列事务:
● 外设到存储器的传输
● 存储器到外设的传输
● 存储器到存储器的传输

DMA 控制器提供两个 AHB 主端口: AHB 存储器端口(用于连接存储器)和 AHB 外设端口(用于连接外设)。但是,要执行存储器到存储器的传输, AHB 外设端口必须也能访问存
储器。AHB 从端口用于对 DMA 控制器进行编程(它仅支持 32 位访问)

DMA 事务(DMA实现过程)

DMA 事务由给定数目的数据传输序列组成。要传输的数据项的数目及其宽度(8 位、 16 位或 32 位)可用软件编程。
每个 DMA 传输包含三项操作:
● 通过 DMA_SxPAR(外设) 或 DMA_SxM0AR (存储器)寄存器寻址,从外设数据寄存器或存储器单元中加载数据。
● 通过 DMA_SxPAR 或 DMA_SxM0AR 寄存器寻址,将加载的数据存储到外设数据寄存器或存储器单元。
● DMA_SxNDTR 计数器在数据存储结束后递减,该计数器中包含仍需执行的事务数。

在产生事件后,外设会向 DMA 控制器发送请求信号。 DMA 控制器根据通道优先级处理该请求。只要 DMA 控制器访问外设, DMA 控制器就会向外设发送确认信号。外设获得 DMA 控
制器的确认信号后,便会立即释放其请求。一旦外设使请求失效, DMA 控制器就会释放确认信号。如果有更多请求,外设可以启动下一个事务。
(DMA 就是将设定好目的地址和源地址

设定好的数据大小(8字节16位半字 32位字),传输的数据量,传输模式,传输的方向等基本配置后按照指定的源地址将通过AHB总线将数据传输到目的地址);

DMA数据流和数据通道 [DMA_SxCR寄存器控制 CHSEL[2:0]]

每个数据流都与一个 DMA 请求相关联,此 DMA 请求可以从 8 个可能的通道请求中选出。此选择由 DMA_SxCR 寄存器中的 CHSEL[2:0] 位控制。

来自外设的 8 个请求(TIM、 ADC、 SPI、 I2C 等)独立连接到每个通道,具体的连接取决于产品实现情况。

DMA1,控制器控制UART数据流和数据通道

DMA 仲裁器(控制每个数据流[0-7]优先级) 【相同的优先级,数据流编号低的数据流优先】

仲裁器为两个 AHB 主端口(存储器和外设端口)提供基于请求优先级的 8 个 DMA 数据流请
求管理,并启动外设/存储器访问序列。
优先级管理分为两个阶段:
● 软件:每个数据流优先级都可以在 DMA_SxCR 寄存器中配置。分为四个级别:
— 非常高优先级
— 高优先级
— 中优先级
— 低优先级
● 硬件:如果两个请求具有相同的软件优先级,则编号低的数据流优先于编号高的数据流。例如,数据流 2 的优先级高于数据流 4。

DMA 数据流

8 个 DMA 控制器数据流都能够提供源和目标之间的单向传输链路。每个数据流配置后都可以执行:
● 常规类型事务:存储器到外设、外设到存储器或存储器到存储器的传输。
● 双缓冲区类型事务:使用存储器的两个存储器指针的双缓冲区传输(当 DMA 正在进行自/
至缓冲区的读/写操作时,应用程序可以进行至/自其它缓冲区的写/读操作)。
要传输的数据量(多达 65535)可以编程,并与连接到外设 AHB 端口的外设(请求 DMA 传
输)的源宽度相关。每个事务完成后,包含要传输的数据项总量的寄存器都会递减。

源、目标和传输模式

源传输和目标传输在整个 4 GB 区域(地址在 0x0000 0000 和 0xFFFF FFFF 之间)都可以寻址外设和存储器。

传输方向使用 DMA_SxCR 寄存器中的 DIR[1:0] 位进行配置,有三种可能的传输方向:存储器到外设、外设到存储器或存储器到存储器。 表 37 介绍了相应的源和目标地址。

DMA 模式

源地址------------->目标地址

外   设---DMA-->  存储器

存储器 ---------> 外设

存储器----------->存储器

外设到存储器模式
图 28 介绍了这种模式。
使能这种模式(将 DMA_SxCR 寄存器中的位 EN 置 1) 时,每次产生外设请求,数据流都会启动数据源到 FIFO 的传输。
达到 FIFO 的阈值级别时, FIFO 的内容移出并存储到目标中。
如果 DMA_SxNDTR 寄存器达到零、外设请求传输终止(在使用外设流控制器的情况下)或DMA_SxCR 寄存器中的 EN 位由软件清零,传输即会停止。
在直接模式下(当 DMA_SxFCR 寄存器中的 DMDIS 值为“0”时),不使用 FIFO 的阈值级别控制:每完成一次从外设到 FIFO 的数据传输后,相应的数据立即就会移出并存储到目标中。
只有赢得了数据流的仲裁后,相应数据流才有权访问 AHB 源或目标端口。系统使用在
DMA_SxCR 寄存器 PL[1:0] 位中为每个数据流定义的优先级执行仲裁。

存储器到外设模式
图 29 介绍了这种模式。
使能这种模式(将 DMA_SxCR 寄存器中的 EN 位置 1)时,数据流会立即启动传输,从源完
全填充 FIFO。
每次发生外设请求, FIFO 的内容都会移出并存储到目标中。当 FIFO 的级别小于或等于预定
义的阈值级别时,将使用存储器中的数据完全重载 FIFO。
如果 DMA_SxNDTR 寄存器达到零、外设请求传输终止(在使用外设流控制器的情况下)或
DMA_SxCR 寄存器中的 EN 位由软件清零,传输即会停止。
在直接模式下(当 DMA_SxFCR 寄存器中的 DMDIS 值为“0”时),不使用 FIFO 的阈值级
别。一旦使能了数据流, DMA 便会预装载第一个数据,将其传输到内部 FIFO。一旦外设请
求数据传输, DMA 便会将预装载的值传输到配置的目标。然后,它会使用要传输的下一个数
据再次重载内部空 FIFO。预装载的数据大小为 DMA_SxCR 寄存器中 PSIZE 位字段的值。
只有赢得了数据流的仲裁后,相应数据流才有权访问 AHB 源或目标端口。系统使用在
DMA_SxCR 寄存器 PL[1:0] 位中为每个数据流定义的优先级执行仲裁。

存储器到存储器模式
DMA 通道在没有外设请求触发的情况下同样可以工作。此为图 30 中介绍的存储器到存储器
模式。
通过将 DMA_SxCR 寄存器中的使能位 (EN) 置 1 来使能数据流时,数据流会立即开始填充
FIFO,直至达到阈值级别。达到阈值级别后, FIFO 的内容便会移出,并存储到目标中。
如果 DMA_SxNDTR 寄存器达到零或 DMA_SxCR 寄存器中的 EN 位由软件清零,传输即会
停止。
只有赢得了数据流的仲裁后,相应数据流才有权访问 AHB 源或目标端口。系统使用在
DMA_SxCR 寄存器 PL[1:0] 位中为每个数据流定义的优先级执行仲裁。
注意: 使用存储器到存储器模式时,不允许循环模式和直接模式。
只有 DMA2 控制器能够执行存储器到存储器的传输

原文地址:https://www.cnblogs.com/Jack-Tango/p/9249138.html

时间: 2024-08-22 00:10:25

关于STM32 DMA相关总结[概述知识点]的相关文章

stm32 DMA数据搬运 [操作寄存器+库函数](转)

源:stm32 DMA数据搬运 [操作寄存器+库函数] DMA(Direct Memory Access)常译为“存储器直接存取”.早在Intel的8086平台上就有了DMA应用了. 一个完整的微控制器通常由CPU.存储器和外设等组件构成.这些组件一般在结构和功能上都是独立的,而各个组件的协调和交互就由CPU完成.如此一来,CPU作为整个芯片的核心,其处理的工作量是很大的.如果CPU先从A外设拿到一个数据送给B外设使用,同时C外设又需要D外设提供一个数据...这样的数据搬运工作将使CPU的负荷显

144个stm32开发相关的问题,看你了解几个

1. SYSCLK时钟源有三个来源:HSI RC.HSE OSC.PLL; 2. MCO[2:0]可以提供4源不同的时钟同步信号; 3. GPIO口貌似有两个反向串联的二极管用作钳位二极管; 4. 总线矩阵采用轮换算法对系统总线和DMA进行仲裁 5. ICode总线,DCode总线.系统总线.DMA总线.总线矩阵.AHB/APB桥 6.在使用一个外设之前,必须设置寄存器RCC_AHBENR来打开该外设的时钟 7.数据字节以小端存储形式保存在存储器中 8. 内存映射区分为8个大块,每个块为512M

【数字图像处理之(一)】数字图像处理与相关领域概述

数字图像(Digital Image) 一副图像可以定义为一个二维函数f(x, y),这里的x和y是空间坐标,而在任意坐标(x, y)处的幅度f被称为这一坐标位置图像的亮度或灰度.当x.y和f的幅值都是有限的离散值时,称为数字图像.注意,数字图像由有限数量的元素组成,每个元素都有特殊的位置和数值.这些元素称为画像元素.图像元素和像素,像素是定义数字图像元素时使用最广泛的术语. --Digital Image Pricessing Using MATLAB( Rafacel C. Gonzalez

网站优化相关理论概述

1.网站优化 网站优化即是网站为了提高用户满意度和网站价值,根据相应策略对网站视觉设计.布局和信息架构等做出的改善措施.网站优化概念有广义和狭义之分,狭义的网站优化就是搜索引擎优化,即为了提高搜索引擎收录和排名,根据总结出的搜索引擎工作原理所做的优化措施.广义上的网站优化不但包括搜索引擎优化,还包括舒适愉悦的视觉体验.层次清晰的网站导航.健全的用户反馈和客服机制.原创且更新及时的网站内容等方面.可见广义上的网站优化有独立于搜索引擎而存在的特性,涵盖范围较广,且形式灵活多样,但用于检测这些优化方面

STM32 DMA简述

STM32 DMA简述 DMA (Direct Memory Access) 直接内存存储器,在做数据传输时能够大大减轻CPU的负担. DMA的作用 DMA提供了一个关于数据的高数传输通道,这个通道不占用CPU的资源.换句话说,通过DMA通道,你在传输大规模数据的时候CPU同时也能够去干其他事. 你可以控制DMA通道的接入口,灵活配置传输的数据源和目的地.以下几个是常用的DMA传输路径: 从外设到内存 从内存A区域传到内存B区域 从一个外设传输到另一个外设 从内存传输数据到外设 .... DMA

STM32架构相关

整理了一下STM32相关的底层结构,有助于消化理解 先上几张图片(主要参照STM3210x系列) 1.芯片结构组成图: 2.STM32内部结构: 3.Cortex-M3模块结构图: 4.STM3210X内部结构: 桥: 四个主动单元 : M3内核的ICode总线(I-bus).DCode总线(D-bus). 系统总线(S-bus).DMA(DMA1.DMA2.以太网DMA) 四个被动单元 : 内部SRAM.内部闪存.FSMC.AHB到APB桥 ICode总线 :         将M3内核的指令

Maven--->学习心得--->maven的相关配置---->概述 以及 相关配置实例

1.概述: 参考资料: 1)maven官网教程: See theGuide to Configuring Mavenfor more information. 2) The defaults for Maven are often sufficient[足够的,充分的], but if you need to change the cache location or are behind a HTTP proxy, you will need to create configuration. m

STM32 DMA

开发平台: STM32Cube + STM32F030R8T6 问题:  STM32 SPI DMA 无法正常发送 解决办法: DMA时钟必须在DMA初始化钱开启,而且DMA中设置自增模式   1. M32Cube 中生成的代码中,有SPI 和DMA的初始化,DMA的时钟初始化在DMA_INIT 中,但是其配置在SPI 中,所以,一定要把DMA_INIT放在SPI_INIT 前面. 2. DMA的配置中,需要设置目标地址和源地址的自增选项   吸取教训: 在使用某个模块之前一定要先去搞懂这个模块

stm32 DMA配置

DMA就是将一个地址空间复制到另外一个地址空间.DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为RAM与I/O设备直接传送数据,使CPU的效率大大的提高了. stm一般有两个DMA控制器,DMA1有7通道.DMA2有5个通道. STM32 的 DMA 有以下一些特性:  ●每个通道都直接连接专用的硬件 DMA 请求,每个通道都同样支持软件触发. 这些功能通过软件来配置. ●在七个请求间的优先权可以通过软件编程设置(共有四级:很高.高.中等和低),