stm32的DMA

直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作。 两个DMA控制器有12个通道(DMA1有7个通道,DMA2有5个通道),每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。还有一个仲裁器来协调各个DMA请求的优先权。

DMA是个很好的功能,不但能减轻CPU的负担,还可以提高数据传输速率,一举两得。合理的使用DMA可以使程序变的简单清晰。

DMA1通道表如下:

DMA1通道表

比如工程需要使用usart1来发送数据,如果没有DMA的话,需要由cpu执行一系列指令才能发送数据。但是,有了DMA,就可以由usart1外设发送DMA数据传输请求给DMA单元,后面具体的数据发送任务就由DMA负责处理,当DMA处理完成后,会将相应的寄存器状态位置位。整个传输的过程不需要cpu的参与,cpu处理别的事情即可。

DMA的几个主要寄存器如下:

DMA_ISR(interrupt status register)。主要表示中断状态。

DMA_IFCR(interrupt flag clear register)。中断标志清除。

DMA_CCRx(channel x configuration register)。通道x配置。这是DMA的核心控制寄存器,包含有数据宽度、外设及存储器宽度、通道优先级、增量方式、传输方向、中断允许、使能等。

DMA_CNDTRx(channel x number of data register)。通道x传输数据量寄存器。用来记录需要传输的数据量,并且随着传输的进行会递减。当递减到0时表明传输完成。

DMA_CPARx(channel x peripheral address register)。通道x外设地址寄存器。

DMA_CMARx(channel x memory address register)。通道x存储器地址寄存器。

posted on 2017-08-23 11:17  犯困的tiger  阅读(377)  评论(0编辑  收藏  举报