博客
关于我
《STM32从零开始学习历程》——DMA直接存储区访问理论知识
阅读量:485 次
发布时间:2019-03-07

本文共 1452 字,大约阅读时间需要 4 分钟。

STM32DMA—从零开始学习历程

DMA简介

DMA(Direct Memory Access, 直接存储区访问)是一种独立于CPU的控制器。它的主要功能是实现数据在外设寄存器与存储器之间、存储器与存储器之间的独立于CPU的高速传输。

外设寄存器与存储器的数据传输

  • 外设寄存器到存储器传输:将外设数据寄存器内容转移到指定的内存空间中
  • 存储器到外设寄存器传输:将特定存储区域的内容转移到外设寄存器中
  • 存储器到存储器传输:将一个指定存储区内容拷贝到另一个指定的存储区中
  • 技术特点(针对STM32F4)

  • 高效传输速度
  • 数据传输无需CPU参与
  • 独立于CPU运行
  • FPGA DMA控制器框图分析

    核心功能模块

    • 通道:8路数据流
    • 流:64个通道
    • 数据传输流程:外设数据 → FIFO → 存储器

    FIFO模式与直接模式

    FIFO(First In First Out)模式下,数据会在FIFO缓冲区中存留,直到达到设定的阈值后才批量发送。直接模式下,数据直接传送到目标地址。

    突发模式配置

    • 突发数据传输的速度与节拍(4字节/8字节/16字节)相关
    • 节拍模式可以选择单次、增量4节拍、8节拍和16节拍

    FIFO阈值与数据传输模式

  • FIFO阈值配置:1/4、1/2、3/4 和1
  • 阈值对应的数据量:
    • 1/4:1字(4字节)
    • 1/2:2字(8字节)
    • 3/4:3字(12字节)
    • 1:4字(16字节)
  • 数据传输模式

  • 直接模式:FIFO缓冲区不存数据
  • FIFO模式:数据在FIFO中存留,直到达到阈值后批量传输
  • DMA初始化结构体

    typedef struct {(uint32_t DMA_Channel); // 通道选择(uint32_t DMA_PeripheralBaseAddr); // 外设地址(uint32_t DMA_Memory0BaseAddr); // 存储器0地址(uint32_t DMA_DIR); // 传输方向(uint32_t DMA_BufferSize); // 数据数目(uint32_t DMA_PeripheralInc); // 外设递增配置(uint32_t DMA_MemoryInc); // 存储器递增配置(uint32_t DMA_PeripheralDataSize); // 外设数据宽度(uint32_t DMA_MemoryDataSize); // 存储器数据宽度(uint32_t DMA_Mode); // 传输模式(uint32_t DMA_Priority); // 优先级(uint32_t DMA_FIFOMode); // FIFO模式(uint32_t DMA_FIFOThreshold); // FIFO阈值(uint32_t DMA_MemoryBurst); // 存储器突发传输配置(uint32_t DMA_PeripheralBurst); // 外设突发传输配置} DMA_InitTypeDef;

    中断事件处理

    • HTIF(半传输中断):传输量达一半时触发中断
    • TCIF(传输完成中断):完成一次数据传输触发中断
    • TEIF(传输错误中断):总线错误或存储器地址受限触发中断
    • FEIF(FIFO错误中断):FIFO下溢或上溢触发中断
    • DMEIF(直接模式中断):外设到存储器的直接模式错误触发中断

    总结

    DMA是STM32F4高效数据传输的核心技术。通过合理配置DMA控制器和FIFO机制,开发者可以实现高效率的数据处理任务。

    转载地址:http://smwcz.baihongyu.com/

    你可能感兴趣的文章
    Python中set.discard和set.remove方法之间的运行时差异?
    查看>>
    Python接口自动化测试企业级实战
    查看>>
    python中tkinter中value_输入字段中的python Tkinter get()值
    查看>>
    Python中wx.FlexGridSizer
    查看>>
    Python中xPath技术和BeautifulSoup的使用
    查看>>
    python中yield的用法详解——最简单,最清晰的解释
    查看>>
    python中‘set.intersection()‘的算法是什么?
    查看>>
    Python中一个图形中的多个绘图
    查看>>
    python中一个好的持久同步队列
    查看>>
    Python中不准确的对数
    查看>>
    python中什么是实例方法_在Python中创建实例方法对象的不同方法
    查看>>
    Python中使用cutecharts实现简单的手绘风格的图表
    查看>>
    python中使用dxfgrabber,解析dxf文件信息生成obj文件
    查看>>
    Python中使用ncmbot玩转网易云音乐
    查看>>
    Python中使用PIL快速实现二值图
    查看>>
    Python中使用PIL快速实现灰度图
    查看>>
    Python中使用pip install ncmbot时各种错误解决办法
    查看>>
    Python中使用requests和parsel爬取喜马拉雅电台音频
    查看>>
    Python中使用turtle绘制多个同心圆
    查看>>
    Python中使用turtle绘制棋盘详解
    查看>>