DMA这简略的三字母表明Direct Memory Access,直译过来便是“直接存储器存取”,其规划意图是供给在外设和存储器之间或许存储器和存储器之间的高速数据传输,而无须MCU的干涉,然后节省了MCU名贵的运转时刻,为其它操作供给了足够的时刻。
STM32F103体系MCU的DMA操控器有7个通道,每个通道专门用来办理来自一个或多个硬件外设对存储器的拜访恳求。该拜访恳求能够经过硬件触发,也能够经过软件装备来完结软件触发。7个通道恳求经过一个裁定器来和谐,它们的优先级能够经过软件编程来设置,但持平的优先级经过固有的硬件决议(恳求0优先于恳求1)。
DMA操控器是能够完结外设至内存、内存至外设与内存至内存的三方数据直接搬运。数据在传输的时分能够挑选字节、半字与全字的传输宽度,并模仿打包与拆包进程,支撑循环的缓冲器办理。最大的传输数据长度为65536,当然,假如挑选全字传输则DMA传输一次传输可多达128K个字节的数据,这个关于嵌入式的MCU来说,能够说是一个天文数字了。
DMA操控器关于数据的处理传输是选用的同享体系数据线履行的,因而,在1个DMA恳求产生时要占用至少2个周期的总线时刻,考虑到其它原因,2个接连的DMA恳求间开释体系时钟至少1个周期,假如关于72Mhz的MCU来说一个周期约为14ns,2个周期也便是28个ns的时刻。MCU的核算时刻现已进入了纳秒阶段了……
DMA的完结进程只要简略的三步(当然是简略说了):
从外设数据寄存器或许从DMA_CMARx 寄存器指定地址的存储器单元履行加载操作。
存数据到外设数据寄存器或许存数据到DMA_CMARx 寄存器指定地址的存储器单元。
履行一次DMA_CNDTRx 寄存器的递减操作。该寄存器包括未完结的操作数目。
DMA操控器通道的恳求映像。DMA通道有7个恳求,而这7个恳求与所衔接的外设可不是为所欲为的挑选,因而,关于在同一个通道的DMA恳求外设来说,在同一时刻只能有一个恳求有用,咱们先请出来DMA恳求映像来,如下图所示:
从上面能够清楚的看到,每个通道都能够用做Memory 2 memory,而这个功用,笔者以为却是适当重要的。
通讯与传感器是现在开展的两个大发向,而与外设相连的DMA通道是以最快、最省劲的方法将数据传给MCU,而咱们知道原始数据肯定要进行一步数据的处理,因而,运用DMA的Memory2memory功用能够轻松完结数据“乒乓操控”,然后一起完结数据的收集与处理。通讯时,待发送的数据存储至缓冲器,而DMA的内存至外设,又能够把数据直接送到外设,不必MCU的任何运算与资源,关于数据通讯节省了大师名贵的时刻,也使得工程师们更加把精力重视于数据的处理中。
这么多的长处,STM32并没有多加银子,完全是免费赠送的,今后的项目运用必定运用。免费而高效,何乐而不为呢?