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

这篇具有很好参考价值的文章主要介绍了DMA详解及应用(嵌入式学习)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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字节

dma,嵌入式底层,学习,单片机,stm32,嵌入式硬件

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为例)

dma,嵌入式底层,学习,单片机,stm32,嵌入式硬件

dma,嵌入式底层,学习,单片机,stm32,嵌入式硬件

dma,嵌入式底层,学习,单片机,stm32,嵌入式硬件

dma,嵌入式底层,学习,单片机,stm32,嵌入式硬件

dma,嵌入式底层,学习,单片机,stm32,嵌入式硬件

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 数据长度

dma,嵌入式底层,学习,单片机,stm32,嵌入式硬件

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

dma,嵌入式底层,学习,单片机,stm32,嵌入式硬件

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

dma,嵌入式底层,学习,单片机,stm32,嵌入式硬件文章来源地址https://www.toymoban.com/news/detail-757972.html

到了这里,关于DMA详解及应用(嵌入式学习)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 嵌入式开发--STM32用DMA+IDLE中断方式串口接收不定长数据

    之前讲过用 利用IDLE空闲中断来接收不定长数据 ,但是没有用到DMA,其实用DMA会更加的高效,MCU也可以腾出更多的性能去处理应该做的事情。 IDLE顾名思义,就是空闲的意思,即当监测到串口空闲超过1个串口的数据帧时,会使状态寄存器(SR或ISR)的IDLE位置位,如果此时控制

    2024年04月17日
    浏览(64)
  • 【正点原子FPGA连载】第二十一章AXI DMA环路测试 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

    1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=692450874670 3)全套实验源码+手册+视频下载地址: http://www.openedv.com/thread-340252-1-1.html DMA(Direct Memory Access,直接存储器访问)是计算机科学中的一种内存访问技术。它允许某些计算机内部的硬件子系

    2024年02月16日
    浏览(63)
  • C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新)

    1.1 视频教程点到为止 1.2 炫技视频看看就行 1.3 编程游戏不玩也罢 有些游戏的主题任务就是编程,游戏和实际应用环境有一定差异(工具、操作流程),在初级阶段主要是熟悉实际场景,而且多数是通过前端语言进行游戏,对底层软件学习的帮助不大。 Coding Games: PHP、C、

    2024年04月28日
    浏览(80)
  • PWM详解(嵌入式学习)

    在STM32微控制器中,PWM代表脉冲宽度调制(Pulse Width Modulation)。PWM是一种用于控制电子设备的技术,通过调整信号的脉冲宽度和周期,可以模拟出不同的电压或功率级别。 在STM32中,PWM功能常用于控制电机速度、调节LED亮度、产生音频信号等应用。通过调整PWM的占空比(高电

    2024年02月07日
    浏览(48)
  • Xilinx Bit文件格式详解及嵌入式应用

    Bit文件是Xilinx FPGA(可编程逻辑门阵列)设备上的配置文件,用于定义硬件逻辑和电路的功能。本文将详细介绍Xilinx Bit文件的格式以及在嵌入式系统中的应用。 一、Bit文件格式 Bit文件是一种二进制文件,包含了FPGA设备的配置信息。它由多个不同类型的数据块组成,每个数据

    2024年02月02日
    浏览(50)
  • STM32串口通信详解(嵌入式学习)

    时钟信号在电子领域中是指用于同步和定时电路操作的周期性信号。它在数字系统和通信系统中起着至关重要的作用,用于协调各个组件之间的数据传输和操作。 时钟信号有以下几个重要的方面: 频率:时钟信号的频率是指单位时间内信号周期的数量。它通常以赫兹(Hz)为

    2024年02月09日
    浏览(69)
  • STM32的中断系统详解(嵌入式学习)

    中断是处理器中的一种机制,用于响应和处理突发事件或紧急事件。当发生中断时,当前正在执行的程序会被暂时中止,处理器会跳转到中断处理程序(也称为中断服务例程),对中断事件进行处理。处理完中断后,处理器再返回到被中断的程序继续执行。 中断可以分为内部

    2024年02月12日
    浏览(74)
  • 《嵌入式存储器架构、电路与应用》----学习记录(四)

    在现有主流嵌入式存储器中,SRAM虽然读写速度非常快,但是单元面积太大,无法在片上实现高密度集成;DRAM由于要制造电容,所采用的工艺无法在先进的CMOS工艺中实现,不利于做嵌入式存储,虽然基于增益单元的eDRAM能够完全采用标准CMOS工艺,但是仍然需要刷新,而且集成

    2024年02月08日
    浏览(47)
  • STM32的定时器详解(嵌入式学习)

    想要了解STM32的时钟系统 点击这里跳转——》STM32的时钟系统(嵌入式学习) 建议先看看时钟树如何配置 点击这里跳转——》STM32的时钟树配置(嵌入式学习) 跳转——》STM32的时钟基础详解(嵌入式学习) 跳跳转——》STM32的时钟源详解(嵌入式学习) SysTick又称滴答定时

    2024年02月13日
    浏览(70)
  • 单片机STM32看门狗详解(嵌入式学习)

    单片机STM32的看门狗(Watchdog)是一种硬件定时器,用于监控系统的运行状态并在出现故障或死锁时采取措施以恢复正常操作。看门狗的主要功能是定期检查系统是否正常运行,并在系统出现问题时触发复位操作。 STM32系列单片机通常配备了内置的看门狗定时器(通常称为独立

    2024年02月13日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包