存储器到外设
当我们使用从存储器到外设传输时,以串口向电脑端发送数据为例。
DMA
外设寄存器的地址对
应的就是串口数据寄存器的地址,
DMA
存储器的地址就是我们自定义的变量(相当于一个缓冲
区,用来存储通过串口发送到电脑的数据)的地址。方向我们设置外设为目标地址。
存储器到存储器
当我们使用从存储器到存储器传输时,以内部
FLASH
向内部
SRAM
复制数据为例。
DMA
外设寄
存器的地址对应的就是内部
FLASH
(我们这里把内部
FALSH
当作一个外设来看)的地址,
DMA
存储器的地址就是我们自定义的变量(相当于一个缓冲区,用来存储来自内部
FLASH
的数据)
的地址。方向我们设置外设(即内部
FLASH
)为源地址。跟上面两个不一样的是,这里需要把
DMA_CCR
位
14
:
MEM2MEM
:存储器到存储器模式配置为
1
,启动
M2M
模式。
2.6
要传多少,单位是什么
当我们配置好数据要从哪里来到哪里去之后,我们还需要知道我们要传输的数据是多少,数据的
单位是什么。
以串口向电脑发送数据为例,我们可以一次性给电脑发送很多数据,具体多少由
DMA_CNDTR
配置,这是一个
32
位的寄存器,一次最多只能传输
65535
个数据。
要想数据传输正确,源和目标地址存储的数据宽度还必须一致,串口数据寄存器是
8
位的,所以
我们定义的要发送的数据也必须是
8
位。外设的数据宽度由
DMA_CCRx
的
PSIZE[1:0]
配置,可
以是
8/16/32
位,存储器的数据宽度由
DMA_CCRx
的
MSIZE[1:0]
配置,可以是
8/16/32
位。
在
DMA
控制器的控制下,数据要想有条不紊的从一个地方搬到另外一个地方,还必须正确设置
两边数据指针的增量模式。外设的地址指针由
DMA_CCRx
的
PINC
配置,存储器的地址指针由
MINC
配置。以串口向电脑发送数据为例,要发送的数据很多,每发送完一个,那么存储器的地
址指针就应该加
1
,而串口数据寄存器只有一个,那么外设的地址指针就固定不变。具体的数据
指针的增量模式由实际情况决定。