博客
关于我
《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 中如何使用 lambda 函数
    查看>>
    Python 中如何创建多行字符串?
    查看>>
    Python 中如何处理异常?
    查看>>
    Python 中如何实现列表的切片?
    查看>>
    Python 中的装饰器是什么?
    查看>>
    Python 中的装饰器是如何工作的,有哪些实际应用场景?
    查看>>
    python请求html_使用Python请求获取HTML?
    查看>>
    Python 之匿名函数和偏函数
    查看>>
    python 之栈的实现
    查看>>
    python语音播放
    查看>>
    python语言:装饰器原理
    查看>>
    Python 交互式数据可视化详解
    查看>>
    python语言有哪些优点和缺点_Python有哪些优缺点,你了解吗?
    查看>>
    Python 从入门到精通:30天速成教程到底有多狠?你能坚持下来吗?
    查看>>
    Python 从数据库中存储和检索密码的最安全方法
    查看>>
    Python语言及其应用 - 知识点遍历
    查看>>
    Python 优化提速的 8 个小技巧
    查看>>
    Python 余弦相似度与皮尔逊相关系数 计算
    查看>>
    python 使用execjs 报编码错误解决办法,UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xac in position 145: il
    查看>>
    python 使用filetype校验文件
    查看>>