1.作用
DMA(直接存储器访问)用来在外设和存储器之间或者存储器和存储器之间进行高速数据传输。并且该过程不需要cpu进行干预,节省cpu资源,从而提cpu的执行效率。
2.资源
共有两个DMA 控制器,其中DMA1有7个通道,DMA2有5个通道。
每个通道专门用来管理一个或者多个外设对存储器访问请求
一个仲裁器用来协调各个DMA请求的优先权。
3.DMA框图

4.特性
1)每个通道都直接连接专用的硬件DMA请求,并且每一个通道都支持软件触发。
2)在同一个DMA模块上,多个请求之间的优先权可以通过软件编程设置(很高、高、中、低),在优先权设置相等时由硬件决定(0优先于1)。
3)支持循环的缓冲器管理。
4)独立数据源和目标数据区的传输宽度(字节:8位、半字:16位、全字:32位),模拟打包和拆包的过程。源和目标地址必须按数据传输宽度对齐。
5)每个通道都有3个事件标志(DMA半传输、 DMA传输完成和DMA传输出错),这3个事件标志逻辑或成为一个单独的中断请求。
6)存储器和存储器之间,外设和存储器之间、存储器和外设之间的传输。
7)可编程最大的数据传输数目是65535。
DMA处理数据:取数据->存数据->任务量-1
指针增量:(可选的)
源:外设寄存器地址宽度:8
目标:存储器地址(val)宽度:8
5.配置过程
配置DMA通道x的过程(x代表通道号):外设 存储
1)在DMA_CPARx寄存器中设置外设寄存器的地址。发生外设数据传输请求时,这个地址将是数据传输的源或目标。
2)在DMA_CMARx寄存器中设置数据存储器的地址。发生外设数据传输请求时,传输的数据将从这个地址读出或写入这个地址。
3)在DMA_CNDTRx寄存器中设置要传输的数据量。在每个数据传输后,这个数值递减。
4)在DMA_CCRx寄存器的PL[1:0]位中设置通道的优先级。
5)在DMA_CCRx寄存器中设置数据传输的方向、循环模式、外设和存储器的增量模式、外设和存储器的数据宽度、传输一半产生中断或传输完成产生中断。
6)设置DMA_CCRx寄存器的ENABLE位,启动该通道。
void DMA_confi(void)
{
RCC->AHBENR |= (0X01);
DMA1_Channel1->CPAR = (uint32_t )&(ADC1->DR);
DMA1_Channel1->CMAR =(uint32_t )adc_str ;
DMA1_Channel1->CNDTR =9;
DMA1_Channel1->CCR |=(0x03<<12);
DMA1_Channel1->CCR &=~(0x01<<4);//从外设读取数据
DMA1_Channel1->CCR |= (0x01<<5);//循环模式
DMA1_Channel1->CCR |= (0x01<<7);
DMA1_Channel1->CCR |= (0x01<<8);
DMA1_Channel1->CCR |= (0x01<<10);
DMA1_Channel1 ->CCR |=(0x01<<1);
DMA1_Channel1->CCR |= (0x01);
ADC1->CR2 |=(0x01<<8);
}
本文介绍了STM32中的DMA机制,用于在外设和存储器间高效传输数据,无需CPU干预,提升CPU效率。内容包括DMA的作用、资源分配、通道特性、配置过程等,特别强调了其支持多种传输类型、优先级设置及中断管理等功能。
2183

被折叠的 条评论
为什么被折叠?



