博客
关于我
《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/

    你可能感兴趣的文章
    Plotly:如何绘制累积的“步骤“;直方图?
    查看>>
    Quartz进一步学习与使用
    查看>>
    Plotly条形图-根据正/负值更改颜色-python
    查看>>
    PLSQL developer12安装图解
    查看>>
    PLSQL Developer调试 存储过程和触发器
    查看>>
    PLSQL window操作
    查看>>
    plsql 存储过程 测试
    查看>>
    plsql 安装后database下拉没有东西
    查看>>
    PLSQL_Oracle PLSQL内置函数大全(概念)
    查看>>
    PLSQL_案例优化系列_体验逻辑结构如何影响SQL优化(案例3)
    查看>>
    PLSQL中INDEX BY TABLE的 DELETE操作
    查看>>
    plsql学习笔记---plsql相关概念,以及基础结构
    查看>>
    plsql数据库异常---plsql 登录后,提示数据库字符集(AL32UTF8)和客户端字符集(ZHS16GBK)不一致
    查看>>
    plsql查询乱码问题解决
    查看>>
    PLSQL的DBMS_GETLINE
    查看>>
    quartz简单demo,教你最快使用quartz
    查看>>
    PlutoSDR学习笔记(一)—函数API手册
    查看>>
    Quartz安装包中的15个example
    查看>>
    Quartz学习总结(2)——定时任务框架Quartz详解
    查看>>
    pm2 start命令中的json格式详解
    查看>>