博客
关于我
《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函数合集:足足68个内置函数请收好!
    查看>>
    Python+Selenium自动化测试项目实战
    查看>>
    Python+Selenium自动化测试项目实战【建议收藏】
    查看>>
    Python+Selenium自动化测试:Page Object模式
    查看>>
    python+selenium进行cnblog的自动化登录测试
    查看>>
    Python函数只返回第一个值而不是数据框
    查看>>
    Python+SQL实战:京东用户行为数据分析案例解析(上)
    查看>>
    Python+SQL实战:京东用户行为数据分析案例解析(下)
    查看>>
    PYTHON+Twisted+sqlanydb=ABORT()
    查看>>
    Python函数之返回值、作用域和局部变量
    查看>>
    Python+统计学 | 探索常用的数据分析统计分布
    查看>>
    python, selenium中用于切换帧的函数
    查看>>
    python函数
    查看>>
    python----线程、进程、协程的区别及多线程详解
    查看>>
    python---5
    查看>>
    python---使用celery分布式系统异步发送短信(云通讯)来验证登录
    查看>>
    python--003--百分号字符串拼接、format
    查看>>
    Python--10、线程
    查看>>
    Python--Redis实战:第四章:数据安全与性能保障:第4节:复制
    查看>>
    python--基本代码规范
    查看>>