STM32中的DMA机制(以STM32F103为例)
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机制(以STM32F103为例)
-
详解swiper在vue中的应用(以3.0为例)
-
Excel2010中如何生成连续的数字以生成20个连续数字为例
-
以实现MongoDB副本集状态的监控为例,看Telegraf系统中Exec输入插件如何编写部署
-
谈谈知识的融汇贯通:以“java中的迭代器失效问题”为例
-
Excel中vlookup函数的语法介绍及使用图解以2007版为例
-
CS中委托与事件的使用-以Winform中跨窗体传值为例
-
作业3:读入一个24bitRGB文件(以down.rgb为例,其分辨率为256*256),输出该数据文件中R、G、B三个分量(各8bit表示)的概率分布示意图和熵。
-
2020.3.9读入一个24bitRGB文件(以down.rgb为例,其分辨率为256*256),输出该数据文件中R、G、B三个分量(各8bit表示)的概率分布示意图(类似下图)和熵。
-
作业3:读入一个24bitRGB文件(以down.rgb为例,其分辨率为256*256),输出该数据文件中R、G、B三个分量(各8bit表示)的概率分布示意图(类似下图)和熵。