DMA详解及应用(嵌入式学习)

news/2024/11/11 4:49:40/

DMA

  • 0. 前言
  • 1. DMA作用
  • 2. DMA特性
  • 3. DMA寄存器
  • 4. DMA的增量或者循环模式
  • 5. 练习

0. 前言

DMA(Direct Memory Access,直接内存访问)是一种计算机系统中用于高效地实现数据传输的技术。它允许数据在外设和内存之间直接传输,而无需CPU的干预和数据复制。

传统上,在计算机系统中,外设(如硬盘、网络适配器、音频设备等)与内存之间的数据传输通常需要通过CPU进行中转。这意味着CPU需要花费大量的时间和计算资源来处理数据传输操作,同时限制了CPU执行其他任务的能力。

而DMA技术的引入解决了这个问题。DMA控制器是一种专用的硬件设备,它可以直接访问系统内存和外设,完成数据的传输。当需要进行数据传输时,CPU只需配置DMA控制器的参数,并将控制权交给DMA控制器,然后就可以继续执行其他任务,而不需要参与具体的数据传输过程。

DMA控制器通过使用内存地址总线和外设地址总线,直接将数据从外设读取到内存,或者将数据从内存发送到外设,实现高速的数据传输。这样可以大大提高数据传输的效率,减轻CPU的负担,允许CPU集中精力处理其他任务。

以下是STM32中DMA的主要特点和用法:

  1. 高速数据传输:DMA允许外设与内存之间的高速数据传输,而无需CPU的干预。这对于需要大量数据传输的外设(例如串行通信接口、SPI接口、I2C接口等)非常有用。

  2. 降低CPU负担:使用DMA功能可以将数据传输任务从CPU上分担下来,使CPU能够专注于其他任务。这有助于提高系统的响应能力和并行处理能力。

  3. 多通道支持:STM32的DMA控制器通常支持多个DMA通道,每个通道可以与一个外设进行连接。这意味着多个外设可以同时执行DMA传输,而不会相互干扰。

  4. 中断和循环模式:DMA传输完成后,可以生成中断请求来通知CPU。此外,DMA还支持循环模式,可以在传输完成后自动重新启动传输,从而实现连续的数据传输。

  5. 灵活的配置:STM32提供了灵活的DMA配置选项,可以根据特定应用的需求进行设置。可以选择传输方向(从外设到内存或从内存到外设)、数据宽度、传输模式等。

使用STM32的DMA功能,可以实现高效的数据传输和处理,尤其适用于需要处理大量数据的应用场景。它提供了一种快速、可靠且低功耗的数据传输方式,有助于优化嵌入式系统的性能。

1. DMA作用

DMA的传输方式无需CPU参与,可以直接控制传输。
DMA给外部设备和内存开辟了一条直接数据传输的通道。
目的:给CPU节省资源,使CPU的工作效率提高

DMA(Direct Memory Access)是一种功能强大的技术,它允许数据在外设和内存之间直接传输,而无需CPU的直接干预。DMA的作用是提高数据传输的效率和性能,减轻CPU的负担,同时允许CPU集中精力处理其他任务。

以下是STM32中DMA的一些主要作用:

  1. 数据传输:DMA可以在外设和内存之间进行高速数据传输。它可以在不占用CPU时间的情况下,自动地将数据从外设读取到内存,或者从内存发送到外设。

  2. 提高效率:通过使用DMA,数据传输可以在后台进行,而不会占用CPU的时间。这样,CPU可以专注于执行其他任务,而不必等待数据传输的完成。

  3. 减少中断:使用DMA可以减少中断的频率。在传统的方式中,每传输一个数据,都需要一个中断来通知CPU。而使用DMA,可以将多个数据一次性传输,从而减少中断的数量。

  4. 外设协议支持:许多外设,如UART、SPI、I2C等,都支持DMA传输。通过使用DMA,可以实现高速的数据传输,提高外设的性能。

  5. 数据处理:DMA还可以在内存之间执行数据处理操作,例如内存之间的拷贝、填充等。这样可以减少CPU的负担,提高数据处理的效率。

总的来说,DMA在STM32中的作用是通过提供直接的内存访问功能,加速数据传输,减轻CPU负担,提高系统性能和效率。它特别适用于需要高速数据传输和对CPU资源要求较高的应用场景。

2. DMA特性

DMA的特性包括直接访问内存、硬件控制、高效数据传输、中断支持、多通道支持、数据流控制和内存保护等。这些特性使得DMA成为一种有效的数据传输技术,可以在计算系统中提高性能和效率。

1)同一个DMA模块可以有多个优先级请求:很高 高 中等 低
2)每个通道有3个事件标志: DMA半传输 DMA传输完成 DMA传输出错
3)数据源 目标源 数据传输宽度对齐
4)传输数据 字节8位 半字16位 全字32位 
5)存储器<->存储器 外设<->存储器 外设<->外设
6)闪存(flash) SRAM APB AHB 外设均可以作为源或者目标
7)搬移数据的最大长度为65535字节

在这里插入图片描述

3. DMA寄存器

DMA_CPARx :设置外设地址的寄存器
DMA_CMARx :设置存储器地址的寄存器
DMA_CCRx :设置数据传输方向
DMA_CNDTRx:设置传输的数据量

4. DMA的增量或者循环模式

1)增量 外设搬移到存储器的时候 ,不希望覆盖上一个会将内存设置为增量模式
2)循环 DMA不停循环的搬移数据,一组的数据传输完成时,计数寄存器将会自动地被恢复成配置该通道时设置的初值.

DMA的增量或循环模式是DMA传输过程中的一种配置选项,用于确定数据传输时内存地址的增加方式。具体来说,增量或循环模式决定了DMA传输过程中数据源和目的地地址的自动增加方式。

  1. 增量模式:在增量模式下,DMA传输过程中的数据源和目的地地址会自动递增。例如,如果数据源地址是0x1000,每次传输后增量模式会自动将数据源地址递增,使下一次传输从地址0x1001开始。同样,目的地地址也会按相同的方式自动递增。

增量模式的优点是可以方便地传输连续的数据块,减少了在每次传输时手动更新地址的工作量。这对于从连续内存区域读取或写入数据非常有用。

  1. 循环模式:在循环模式下,DMA传输过程中的数据源和目的地地址在达到事先设定的终点地址后会重新回到起始地址。这意味着传输可以在源和目的地之间循环进行。

循环模式的优点是可以重复传输一定长度的数据,而无需在每次传输后重新配置DMA寄存器。这对于需要周期性地传输数据或循环缓冲区的应用非常有用。

增量模式和循环模式可以单独或同时使用,具体取决于应用需求。在配置DMA通道时,开发人员可以根据数据的存储方式和传输需求选择适当的模式。使用这些模式可以简化DMA传输的配置和管理,提高数据传输的效率和灵活性。

5. 练习

通过DMA搬移ADC转换完成的数据

不了解ADC的家人们,点击这里跳转——》ADC(模数转换)详解
不了解ADC的家人们,点击这里跳转——》ADC(模数转换)详解
不了解ADC的家人们,点击这里跳转——》ADC(模数转换)详解

从外设 -> 内存(以STM32G030为例)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

HAL_StatusTypeDef HAL_ADC_Start_DMA  (ADC_HandleTypeDef * hadc, uint32_t * pData, uint32_t  Length)
功能:启动ADC开始转换,并通过DMA搬移转换结果。
参数:ADC_HandleTypeDef * hadc 句柄uint32_t * pData 数据存放地址uint32_t  Length 数据长度

在这里插入图片描述

在主函数中启动ADC并用DMA进行数据搬移,将数据搬移到buf中。

在这里插入图片描述

重写ADC转换完成回调函数,停止ADC并输出buf中的数据

在这里插入图片描述


http://www.ppmy.cn/news/529886.html

相关文章

tf.conv1d 和 tf.conv2d 的区别

tf.conv1d是实现一维卷积&#xff0c;tf.conv2d是实现二维卷积。 当tf.conv2d的输入第二个或第三个维度为1时就等同于一维卷积了&#xff0c;详细见以下代码。 import tensorflow as tf import numpy as npinput tf.constant([[[1], [7], [3], [2], [5], [6], [1]], [[11], …

短视频矩阵源码开发部署技术解析

短视频矩阵源码开发涉及到多个方面的技术&#xff0c;包括但不限于以下几点&#xff1a; 抖yinAPI&#xff1a;需要通过API获取抖音的视频、用户、评论、点赞等数据。 抖yinSDK&#xff1a;如果需要开发一些原生的功能&#xff0c;比如分享、登录、支付等&#xff0c;需要使用…

用OpenCV进行透视变换

1. 引言 欢迎回来&#xff01;今天我们将焦点聚焦在我在图像处理中最喜欢的话题之一——透视变换。使用该技术&#xff0c;可以灵活方便的实现各种各样好玩的特效。 闲话少说&#xff0c;我们直接开始吧&#xff01; 2. 单应矩阵 我们首先展开对单应矩阵的深入研究。作为图…

免费 Windows 数据恢复工具推荐

以下是一些免费的 Windows 数据恢复工具&#xff1a; 1、Recuva&#xff1a; Recuva 是一款功能强大的免费数据恢复工具&#xff0c;可以恢复各种类型的文件&#xff0c;包括文档、图片、音频和视频等。它能够恢复已删除的文件&#xff0c;格式化的硬盘以及无法访问的文件等。…

OCC-BEV:基于三维场景重建的多摄像机统一预训练

论文&#xff1a;https://arxiv.org/pdf/2305.18829.pdf 代码&#xff1a;https://github.com/chaytonmin/Occ-BEV 多摄像机3D感知技术&#xff08;能够收集车辆周围360的环境信息&#xff09;已经成为自动驾驶领域的一个突出研究领域&#xff0c;为 Lidarb-based 解决方案提供…

EasyRecovery15最新好用的电脑免费数据恢复软件

EasyRecovery 15mac/win新版本是一款操作安全、价格便宜、用户自主操作的数据恢复方案&#xff0c;它支持从各种各样的存储介质恢复删除或者丢失的文件&#xff0c;其支持的媒体介质包括&#xff1a;硬盘驱动器、光驱、闪存、硬盘、光盘、U盘/移动硬盘、数码相机、手机以及其它…

EasyRecovery15电脑版数据恢复工具 国内免费的数据恢复软件

之前碰到过一次数据恢复的情况&#xff0c;也算是试用了国内国外的数据恢复软件都有尝试过可以给大家做个参考总结&#xff1a;好这个概念&#xff0c;其实最好的判定就是自己的资料有没有成功找回&#xff0c;以及软件对比下&#xff0c;如果有部分文件某一软件找到而其他软件…

7个免费的Windows数据恢复工具

有时候&#xff0c;当不小心删掉一些重要文件之后你会非常后悔&#xff0c;那么数据恢复软件就是帮助你重新获得这些删除文件的重要解决方案。如今市场上有很多免费的数据恢复软件可以帮助你恢复已经删除的文件&#xff0c;在这里&#xff0c;小编将为大家介绍7个免费的Windows…