STM32F10x 串口使用DMA

Posted 浇筑菜鸟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32F10x 串口使用DMA相关的知识,希望对你有一定的参考价值。

一、DMA简介

DMA(Direct Memory Access,直接存储器访问) 是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载。否则,CPU 需要从来源把每一片段的资料复制到暂存器,然后把它们再次写回到新的地方。在这个时间中,CPU 对于其他的工作来说就无法使用。

二、DMA的工作原理

  DMA 传输将数据从一个地址空间复制到另外一个地址空间。当CPU 初始化这个传输动作,传输动作本身是由 DMA 控制器来实行和完成。
  在实现DMA传输时,是由DMA控制器直接掌管总线,因此,存在着一个总线控制权转移问题。即DMA传输前,CPU要把总线控制权交给DMA控制器,而在结束DMA传输后,DMA控制器应立即把总线控制权再交回给CPU。一个完整的DMA传输过程必须经过DMA请求、DMA响应、DMA传输、DMA结束4个步骤。
  传输的四种情况:

  • 外设到内存
  • 外设到外设
  • 内存到外设
  • 内存到内存
  1. DMA主要特征
  • 12个独立的可配置的通道(请求):DMA1有7个通道,DMA2有5个通道
  • 每个通道都直接连接专用的硬件DMA请求,每个通道都同样支持软件触发。这些功能通过软件来配置。
  • 在同一个DMA模块上,多个请求间的优先权可以通过软件编程设置(共有四级:很高、高、中等和低),优先权设置相等时由硬件决定(请求0优先于请求1,依此类推) 。
  • 独立数据源和目标数据区的传输宽度(字节、半字、全字),模拟打包和拆包的过程。源和目标地址必须按数据传输宽度对齐。
  • 支持循环的缓冲器管理
  • 每个通道都有3个事件标志(DMA半传输、DMA传输完成和DMA传输出错),这3个事件标志逻辑或成为一个单独的中断请求。
  • 存储器和存储器间的传输
  • 外设和存储器、存储器和外设之间的传输
  • 闪存、SRAM、外设的SRAM、APB1 、APB2和AHB外设均可作为访问的源和目标。
  • 可编程的数据传输数目:最大为65535
  1. DMA框图

  2. DMA硬件优先级

  3. 各个通道的DMA

三、程序分析

  1. 初始化结构体
typedef struct

    uint32_t DMA_PeripheralBaseAddr; 
    uint32_t DMA_MemoryBaseAddr;    
    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_M2M;                
DMA_InitTypeDef;

参考文献

STM32 DMA工作原理:https://blog.csdn.net/baidu_37366055/article/details/98069744
STM32之DMA原理:https://blog.csdn.net/lushoumin/article/details/78907526

如本博客的内容侵犯了你的权益,请与以下地址联系,本人获知后,马上删除。同时本人深表歉意,并致以崇高的谢意! computer_wx@foxmail.com

以上是关于STM32F10x 串口使用DMA的主要内容,如果未能解决你的问题,请参考以下文章

STM32F4 DMA接收串口定长数据,串口每秒来1000个数据,使用DMA-Normal模式

65 STM32F0系列 串口DMA循环接收实验记录

65 STM32F0系列 串口DMA循环接收实验记录

65 STM32F0系列 串口DMA循环接收实验记录

stm32f10x串口通信的写法

stm32f10x串口通信的写法