DMA
直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。
无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作。
DMA控制器和Cortex™-M3核心共享系统数据总线,执行直接存储器数据传输。当CPU和DMA同时访问相同的目标(RAM或外设)时,DMA请求会暂停CPU访问系统总线达若干个周期,总线仲裁器执行循环调度,以保证CPU至少可以得到一半的系统总线(存储器或外设)带宽。
DMA配置过程
DMA的数据对齐
一句话,如果目标的容量存放不了源数据,则只能尽可能存放源数据(小端模式)
操作一个不支持字节或半字写的AHB设备
当DMA模块开始一个AHB的字节或半字写操作时,数据将在HWDATA[31:0]总线中未使用的部分重复。
比如一个寄存器为一个字节/一个半字,不支持字写入;而AHB总线是32位(字)的,假如写入0xAB到一个字节大小的寄存器中,则0xAB传输到AHB总线上后是0xABABABAB。
写入的数据 | AHB总线上的数据(32位) |
---|
0xABCD | 0xABCD ABCD |
0x12 | 0x1212 1212 |
STM32CubeMX使用DMA的注意点
使用STM32CubeMX配置得工程文件中,任何使用DMA的外设初始化函数必须得再DMA初始化后再进行外设初始化。否则DMA无效