DMA(Direct Memory Access):直接存储器访问
一些简单的动作,例如复制或发送,就可以不透过CPU,从而减轻CPU负担
由于本人使用的是正点原子开发板,部分代码取自里面的范例
本篇内容大纲
【1】DMA初步了解
【2】导入相关的库
【3】代码流程
【1】DMA初步了解
DMA可以设定三种传输方式:『外设到存储器』『存储器到外设』『存储器到存储器』(第三种方式仅DMA2能执行)
本篇测试的是『存储器到外设』,下面继续介绍DMA
STM32F4有两个DMA控制器(DMA1、DMA2)
每个控制器有8个数据流(Stream)
然后,每个数据流又有8个通道(Channel)
下面两张张表格,来说明『DMA控制器』『数据流』『通道』所对应的DMA请求映射(request mapping)
以下这图是针对STM32F4的,其他芯片,例如STM32F1,应该要找各自的说明书,也许表格会有出入
在使用DMA之前需要做设定,例如我想用串口1的发送(USART1_TX),在DMA2里面,『Stream = 7』『Channel = 4』 就是我们要的了
/* ---------------------------------------------------------------------- 题外话 ----------------------------------------------------------------------------------- */
也许你会发现,为什么会有两个一样的,例如DMA1表格里,【Stream0、Channel0】【Stream2、Channel0】对应的都是SPI3_RX
在网上问人后,对方是和我说,因为有两个DMA控制器,这部分后续有时间再研究
/* ------------------------------------------------------------------------------------------------------------------------------------------------------------------- */
【2】导入相关的库
因为本篇测试的是『存储器到外设』
先看看有没有所需外设的文件,例如