DMA
理论
DMA简介
DMA :Data Memory Access,直接存储器访问。主要功能是可以把数据从一个地方搬到另外一个地方,而且不占用CPU.
DMA1:有7个通道,可以实现 P->M,M->P,M->M
DMA2:有5个通道,可以实现 P->M,M->P,M->M
DMA2只存在于大容量和互联型产品中
注:P:外设(如ADC);M:变量(FLASH(代码、const变量),SRAM(变量))
CPU给DMA发送一个命令,让DMA把变量送到串口里面,通过串口发送出去,CPU只需要发送这样的命令之后,CPU就空闲下来了。
参考资料:
STM32参考手册 2.1
STM32参考手册 10
框图
1-DMA请求
2-通道
3-仲裁器
DMA1请求映射
DMA2请求映射
M-M模式的时候,所有通道都可以使用
当多个DMA请求一起来
优先级分别:
软件层面:
硬件层面:
通道编号小的优先级大,DMA1的优先级大于DMA2的优先级。
Q:需要用到同一个通道怎么办?
结构体与函数
数据从哪里来,到哪里去
1、外设地址,DMA_CPAR
2、存储器地址,DMA_CMAR
3、传输方向,DMA_CCR:P->M/M->P:DIR M->M:MEM2MEM
DMA_DIR_PeripheralDST 外设的目的地就是M->P
DMA_DIR_PeripheralSRC 外设的源,就是P->M
4、传输数目,DMA_CNDTR 比如说发送的数组,数组的元素数
5、外设地址是否递增,DMA_CCRx:PINC 比如发到USART的发送缓冲寄存器里面,地址是不用变的
6、存储器地址是否递增,DMA_CCRx:MINC 比如说发送存储器的一串数组,地址是要变的
7、外设数据宽度, DMA_CCRx:PSIZE 比如说数组的变量类型,8位还是16位还是32位
8、存储器数据宽度, DMA_CCRx:MSIZE 同上
78最好保持一致
PS:当PSIZE和MSIZE不相同时,DMA模块按照10.3.4进行数据对齐
9、模式选择,DMA_CCRx:CIRC MINC PINC
DMA_Mode_Normal 进行一次
DMA_Mode_Circular无限循环
10、通道优先级,DMA_Priority
可配置很高速、高速、低速、很低速
11、M->M模式 DMA_M2M
传输过半,传输完成,传输出错,DMA_ISR 通常用TC