DMA(Direct Memory Access ,直接存储器访问 ) 提供在 外设与内存 、 存储器和存储器 、 外设与外设 之间的高速数据传输使用。它允许不同速度的硬件装置来沟通,而不需要依赖于CPU ,在这个时间中, CPU 对于内存的工作来说就无法使用。
我自己的理解就是:类似于一个多线程的存在,一些简单的比如数据传输的动作可以不通过CPU,DMA直接动作,这样可以释放CPU,让CPU去做些更有意义的事儿DMA 的意义代替 CPU 搬运数据,为 CPU 减负。1. 数据搬运的工作比较耗时间;2. 数据搬运工作时效要求高(有数据来就要搬走);3. 没啥技术含量( CPU 节约出来的时间可以处理更重要的事)。搬运什么数据?存储器、外设这里的外设指的是 spi 、 usart 、 iic 、 adc 等基于 APB1 、 APB2 或 AHB 时钟的外设,而这里的存储器包括自身的闪存 (flash) 或者内存 (SRAM) 以及外设的存储设备都可以作为访问地源或者目的。 三种搬运方式:存储器 → 存储器(例如:复制某特别大的数据 buf )存储器 → 外设 (例如:将某数据 buf 写入串口 TDR 寄存器)外设 → 存储器 (例如:将串口 RDR 寄存器写入某数据 buf )
DMA
控制器
STM32F103
有
2
个
DMA
控制器,
DMA1
有
7
个通道,
DMA2
有
5
个通道。
一个通道每次只能搬运一个外设的数据!!
如果同时有多个外设的
DMA
请求,则按照优先级进
行响应。
DMA1
有
7
个通道:
DMA 及通道的优先级 优先级管理采用软件 + 硬件: