您现在的位置是:主页 > MT4交易平台 >

【STM32】 DMA原理步骤超细详解一文看懂DMA

2021-11-14 07:26MT4交易平台 人已围观

简介【STM32】 DMA原理步骤超细详解一文看懂DMA DMA传输将数据从一个地点空间复制到另一个地点空间,供给正在外设和存储器之间或者存储器和存储器之间的高速数据传输。 咱们理解CPU有迁...

  【STM32】 DMA原理步骤超细详解一文看懂DMA

  DMA传输将数据从一个地点空间复制到另一个地点空间,供给正在外设和存储器之间或者存储器和存储器之间的高速数据传输。

  咱们理解CPU有迁徙数据、准备、把持轨范迁徙等许众效用,编制运作的中心便是CPU,

  CPU无时不刻的正在收拾着大批的事件,但有些事变却没有那么紧张,比如说数据的复制和存储数据,倘若咱们把这个别的CPU资源拿出来,让CPU行止理其他的繁复准备事件,是不是不妨更好的欺骗CPU的资源呢?

  以是:迁徙数据(更加是迁徙大批数据)是能够不须要CPU参预。比方生气外设A的数据拷贝到外设B,只须给两种外设供给一条数据通途,直接让数据由A拷贝到B 只是程CPU的收拾,

  DMA便是基于以上设思打算的,它的效力便是治理大批数据迁徙太甚泯灭CPU资源的题目。有了DMA使CPU更笃志于特别适用的操作–准备、把持等。

  DMA用来供给正在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU的干涉,通过DMA数据能够疾速地转移。这就节减了CPU的资源来做其他操作。

  DMA的效力便是杀青数据的直接传输,而去掉了古代数据传输须要CPU寄存器参预的闭头,紧要涉及四种处境的数据传输,但性质上是相同的,都是从内存的某一区域传输到内存的另一区域(外设的数据寄存器性质上便是内存的一个存储单位)。四种处境的数据传输如下:

  咱们理解,数据传输,最初须要的是1 数据的源地点 2 数据传输地方的对象地点 ,3 传达数据众少的数据传输量 ,4 实行众少次传输的传输形式DMA所须要的中心参数,便是这四个

  当用户将参数创立好,紧要涉及源地点、对象地点、传输数据量这三个,DMA把持器就会启动数据传输,当节余传输数据量为0时 到达传输止境,了局DMA传输 ,当然,DMA 另有轮回传输形式当来到传输止境时会从新启动DMA传输。也便是说只须节余传输数据量不是0,并且DMA是启动形态,那么就会发作数据传输。

  每个通道都直接衔接专用的硬件DMA央求,每个通道都同样援救软件触发。这些效用通过软件来修设;

  正在统一个DMA模块上,众个央求间的优先权能够通过软件编程创立(共有四级:很高、高、中等和低),优先权创立相当时由硬件肯定(央求0优先于央求1,依此类推);

  独立数据源和对象数据区的传输宽度(字节、半字、全字),模仿打包和拆包的流程。源和对象地点务必按数据传输宽度对齐;

  每个通道都有3个事项符号(DMA半传输、DMA传输告终和DMA传输犯错),这3个事项符号逻辑或成为一个独自的结束央求;

  闪存、SRAM、外设的SRAM、APB1、APB2和AHB外设均可举动拜望的源和对象;

  对待大容量的STM32芯片有2个DMA把持器两个DMA把持器,DMA1有7个通道,DMA2有5个通道。每个通道都能够修设少少外设的地点。

  从外设(TIMx[x=1、2、3、4]、ADC1、SPI1、SPI/I2S2、I2Cx[x=1、2]和USARTx[x=1、2、3])出现的7个DMA央求,通过逻辑或输入到DMA1把持器 此中每个通道都对应着的确的外设:

  从外设(TIMx[5、6、7、8]、ADC3、SPI/I2S3、UART4、DAC通道1、2和SDIO)出现的5个央求,经逻辑或输入到DMA2把持器,此中每个通道都对应着的确的外设:

  上方的框图,咱们能够看到STM32内核,存储器,外设及DMA的衔接,这些硬件最终通过各式各样的线衔接到总线矩阵中,硬件构造之间的数据迁徙都过程总线矩阵的调解,使各个外设协和的操纵总线来传输数据。

  下面看有与没有DMA的处境下,ADC搜罗的数据是如何存放到SRAM中的?

  1.倘若没有DMA,CPU传输数据还要以内核举动中转站,比方要将ADC搜罗的数据迁徙到到SRAM中,这个流程是如许的:

  内核通过DCode过程总线矩阵调解,从获取AHB存储的外设ADC搜罗的数据,然后内核再通过DCode过程总线矩阵调解把数据存放到内存SRAM中。

  DMA把持器的DMA总线与总线矩阵调解,操纵AHB把外设ADC搜罗的数据经由DMA通道存放到SRAM中,这个数据的传输流程中,十足不须要内核的参预,也便是不须要CPU的参预,

  正在发作一个事项后,外设向DMA把持器发送一个央求信号。DMA把持器依照通道的优先权收拾央求。当DMA把持器劈头拜望发出央求的外设时,DMA把持器立刻发送给它一个应答信号。当从DMA把持器取得应答信号时,外设立刻开释它的央求。一朝外设开释了这个央求,DMA把持器同时推翻应答信号。DMA传输了局,倘若有更众的央求时,外设能够启动下一个周期。

  从外设数据寄存器或者从目下外设/存储器地点寄存器指示的存储器地点取数据,第一次传输时的劈头地点是DMA_CPARx或DMA_CMARx寄存器指定的外设基地点或存储器单位;

  存数据到外设数据寄存器或者目下外设/存储器地点寄存器指示的存储器地点,第一次传输时的劈头地点是DMA_CPARx或DMA_CMARx寄存器指定的外设基地点或存储器单位;

  推广一次DMA_CNDTRx寄存器的递减操作,该寄存器包罗未告终的操作数目。

  当一次DMA数据传输完后,阻止DMA传送 ,也便是只传输一次形式2:DMA_Mode_Circular,轮回传输形式

  当传输了局时,硬件主动会将传输数据量寄存器实行重装,实行下一轮的数据传输。 也便是众次传输形式仲裁器

  硬件:倘若2个央求有相像的软件优先级,则较低编号的通道比力高编号的通道有较高的优先权。比方:倘若软件优先级相像,通道2优先于通道4。

  预防: 正在大容量产物和互联型产物中,DMA1把持用具有高于DMA2把持器的优先级。DMA数据流(仅存正在于STM32F4 /M4 内核上)

  8 个 DMA 把持器数据流都不妨供给源和对象之间的单向传输链途。每个数据流修设后都能够推广:● 旧例类型事件:存储器到外设、外设到存储器或存储器到存储器的传输。● 双缓冲区类型事件:操纵存储器的两个存储器指针的双缓冲区传输(当 DMA 正正在实行自/至缓冲区的读/写操作时,利用轨范能够实行至/自其它缓冲区的写/读操作)。要传输的数据量(众达 65535)能够编程,并与衔接到外设 AHB 端口的外设(央求 DMA 传输)的源宽度联系。每个事件告终后,包罗要传输的数据项总量的寄存器都邑递减。

  DMA_SxCR 寄存器把持数据流终究操纵哪一个通道,每个数据流有 8 个通道可供拔取,每次只可拔取此中一个通道实行 DMA 传输。接下来,咱们看看 DMA2 的各数据畅通

  每个通道都能够正在有固定地点的外设寄存器和存储器地点之间推广DMA传输。DMA传输的数据 量是可编程的,大到达65535。包罗要传输的数据项数目的寄存器,正在每次传输后递减。

  可编程的数据量:外设和存储器的传输数据量能够通过DMA_CCRx寄存器中的PSIZE和MSIZE位编程。指针递增形式

  依照 DMA_SxCR 寄存器中 PINC 和 MINC 位的形态,外设和存储器指针正在每次传输后能够主动向后递增或维持常量。当创立为增量形式时,下一个要传输的地点将是前一个地点加上增量值

  倘若使能了递增形式,则依照正在 DMA_SxCR 寄存器 PSIZE 或 MSIZE 位中编程的数据宽度,下一次传输的地点将是前一次传输的地点递增 1个数据宽度、2个数据宽度或 4个数据宽度。存储器到存储器形式

  DMA通道的操作能够正在没有外设央求的处境下实行,这种操作便是存储器到存储器形式。

  当创立了DMA_CCRx寄存器中的MEM2MEM位之后,正在软件创立了DMA_CCRx寄存器中的EN位启动DMA通道时,DMA传输将立即劈头。当DMA_CNDTRx寄存器变为0时,DMA传输了局。存储器到存储器形式不行与轮回形式同时操纵。

  这里要预防仅 DMA2 的外设接口能够拜望存储器,于是仅 DMA2 把持器援救存储器到存储器的传输,DMA1 不援救。

  每个DMA通道都能够正在DMA传输过半、传输告终和传输舛误时出现结束。为利用的矫健性琢磨,通过创立寄存器的差别位来掀开这些结束。

  使没开启,咱们也能够通过盘问这些位来得到目下 DMA 传输的形态。这里咱们常用的是 TCIFx位,即数据流 x 的 DMA 传输告终与否符号。

  可编程的数据传输宽度、对齐式样和数据巨细端当PSIZE和MSIZE不相像时,DMA模块遵循下图实行数据对齐。

  预防:正在大容量产物中, DMA2 通道 4 和 DMA2 通道 5 的结束被照射正在统一个结束向量上。正在互联型产物 中, DMA2 通道 4 和 DMA2 通道 5 的结束划分有独立的结束向量。统统其他的 DMA 通道都有自身的 结束向量DMA的内存占用

  正在STM32把持器中,芯片采用Cortex-MX架构,总线构造有了很大的优化,DMA占用其它的地点总线,并不会与CPU的编制总线发作冲突。也便是说,DMA的操纵不会影响CPU的运转速率

  然而要预防:DMA 把持器和Cortex-M3核共享编制数据总线推广直接存储器数据传输。当CPU和DMA同时拜望相像的对象(RAM或外设)时,DMA央求或许会阻止 CPU拜望编制总线达若干个周期,总线仲裁器推广轮回调剂,以担保CPU起码能够取得一半的编制总线(存储器或外设)带宽。DMA修设个别

  DMA修设参数包罗:通道地点、优先级、数据传输宗旨、存储器/外设数据宽度、存储器/外设地点是否增量、轮回形式、数据传输量。

  咱们倘若开启了 DMA_ISR 中这些结束,正在到达条目后就会跳到结束效劳函数内里去,纵然 没开启,咱们也能够通过盘问这些位来得到目下 DMA 传输的形态。这里咱们常用的是 TCIFx, 即通道 DMA 传输告终与否的符号。

  预防此寄存器为只读寄存器,于是正在这些位被置位之后,只 能通过其他的操作来肃除。DMA结束符号肃除寄存器(DMA_IFCR)

  DMA_IFCR 的列位便是用来肃除 DMA_ISR 的对应位的,通过写 0 肃除。正在 DMA_ISR 被置位后, 咱们务必通过向该位寄存器对应的位写入 0 来肃除。

  该寄存器把持着 DMA 的许众联系 消息,包罗数据宽度、外设及存储器的宽度、通道优先级、增量形式、传输宗旨、结束允诺、 使能等都是通过该寄存器来创立的。于是 DMA_CCRx 是 DMA 传输的中心把持寄存器

  这个寄存器把持 DMA 通道 x 的每次 传输所要传输的数据量。其创立规模为 0~65535。而且该寄存器的值会跟着传输的实行而删除, 当该寄存器的值为 0 的时辰就代外此次数据传输依然统共发送告终了。于是能够通过这个寄存 器的值来理解目下 DMA 传输的进度

  该寄存器用来存储 STM32 外设的地 址,比方咱们操纵串口 1,那么该寄存器务必写入 0x40013804(原本便是&USART1_DR)。倘若使 用其他外设,就修削成相应外设的地点就行了。

  ,该寄存器和 DMA_CPARx 差不众, 然而是用来放存储器的地点的。比方咱们操纵 SendBuf[5200]数组来做存储器,那么咱们正在 DMA_CMARx 中写入&SendBuff 就能够了。

  正在DMA_CPARx寄存器中创立外设寄存器的地点。发作外设数据传输央求时,这个地点将 是数据传输的源或对象。

  正在DMA_CMARx寄存器中创立数据存储器的地点。发作外设数据传输央求时,传输的数 据将从这个地点读出或写入这个地点。

  正在DMA_CNDTRx寄存器中创立要传输的数据量。正在每个数据传输后,这个数值递减。

  正在DMA_CCRx寄存器中创立数据传输的宗旨、轮回形式、外设和存储器的增量形式、外 设和存储器的数据宽度、传输一半出现结束或传输告终出现结束。

  一朝启动了DMA通道,它既可反映连到该通道上的外设的DMA央求。 当传输一半的数据后,半传输符号(HTIF)被置1,当创立了允诺半传输结束位(HTIE)时,将出现 一个结束央求。正在数据传输了局后,传输告终符号(TCIF)被置1,当创立了允诺传输告终结束位 (TCIE)时,将出现一个结束央求。

  解释:RCC_ResetCmd中对DMA无界说,以是采用的直接独揽DMA寄存器的式样

  效用:创立要开启的通道,另有少少参数,包罗外设基地点,存储器基地点,传输的数据量,增量形式,数据宽度等。

  /* 创立数据传输宗旨,肯定是从外设读取数据到内存还送从内存读取数 据发送到外设,也便是外设是源地仍旧宗旨地

  效力:前者创立DMA通道的传输数据量(DMA处于闭塞形态);后者获取目下DMA通道传输节余数据量(DMA处于开启形态)。

  //创立通道;传输地点;传输宗旨;传输数据的数目;传输数据宽度;传输形式;优先级;是否开启存储器到存储器。

  以串口为例:使能串口DMA发送,串口DMA使能函数。移用函数:USART_DMACmd();

  以UART为例,倘若要罗致数据,会触发UART结束,然后CPU介入,正在结束中通过CPU将UART输入寄存器的值读出来,存放到内存中;

  而DMA式样,出现UART结束后,DMA直接参预,把UART输入寄存器的值搬运到内存中,CPU只须要正在去搜检内存的值就好了,如许降低了CPU的效劳。

  本文提到的有以下实质:时钟编制与总线矩阵SysTick编制依时器RTC及时时钟看门狗依时器通用依时器一、时钟编制与总线的时钟树如下图所示:正在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。HSI是高速内部时钟,RC振荡器,频率为8MHz。HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率规模为4MHz~16MHz。LSI是低速内部时钟,RC振荡器,频率为40kHz。LSE是低速外部时钟,接频率为32.768kHz的石英晶体。PLL为锁相环倍频输出,那时钟输入源可拔取为HSI/2、HSE或者HSE/2。倍频可拔取为2~16倍,然而其输出频率最大不得进步

  之时钟把持 /

  一、硬件上的衔接题目倘若操纵内部RC振荡器而不操纵外部晶振,请遵循如下形式收拾:1)对待100脚或144脚的产物,OSC_IN应接地,OSC_OUT应悬空。2)对待少于100脚的产物,有2种接法:i)OSC_IN和OSC_OUT划分通过10K电阻接地。此形式可降低EMC职能。ii)划分重照射OSC_IN和OSC_OUT至PD0和PD1,再修设PD0和PD1为推挽输出并输出0。此形式能够减小功耗并(相对上面i)节减2个外部电阻。STM32时钟编制构造图时钟是STM32单片机的脉搏,是单片机的驱动源。操纵任何一个外设都务必掀开相应的时钟。如许的好处便是,倘若不操纵一个

  时钟领略 /

  ***************************** STM32 NVIC 结束一、STM32 的结束分组:STM32 将结束分为 5 个组,组 0~4。该分组的创立是由 SCB-AIRCR 寄存器的 bit10~8 来界说的。的确的分派相干如外所示:组…,…,. bit[7:4]分派处境 …,…,…,…分派结果0 …,…,…,…,…,…0:4 …,…,…,…0 位抢占优先级,4 位反映优先级1 …,…,…,…,…,…1:3 …,…,…,…1 位抢占优先级,3 位反映优先级2 …,…,…,…,…,…2:2 …,…,…,…2 位抢占优先级,2 位反映优先级3…,…,…,…,…,…3:1…,…,…,… ,3 位抢占

  参考材料《STM32F4xx 中文参考手册》第十章-结束和事项、《 ARM Cortex™-M4F 技巧参考手册》-4.3 章节:NVIC 和 4.4章节:SCB—4.4.5的 AIRCR。对51单片机有必然解析的都理解51单片机有5个结束源,2个优先级,通过对IP这个寄存器赋值来实行结束优先级的收拾而STM32的结束很是壮健,每个外设都能够出现结束,那么STM32怎样实行结束优先级的分派呢,这时就用到了NVIC(嵌套向量结束把持器), 援救为数稠密的编制特地和外部结束。下外即为STM32F42系列的结束向量外(解析即可),即结束类型灰色个别即为内核的编制特地,灰色以外的其他个别即为片上统统外设能够出现的结束。priority值

  结束及NVIC概述 /

  stm32时钟创立(F1其余型号同理):Reset handlerReset_Handler PROC EXPORT Reset_Handler [WEAK] IMPORT __main

  内部12位ADC是一种逐次靠拢型模仿数字转换器。它有众达18个通道,可丈量16个外部和2个内部信号源。各通道的A/D转换能够单次、一口气、扫描或间断形式推广。ADC的结果能够左对齐或右对齐式样存储正在16位数据寄存器中。模仿看门狗特色允诺利用轨范检测输入电压是否跨越用户界说的高/低阀值。ADC的输入时钟不得进步14MHz,它是由PCLK2经分频出现。// ADC 转换告终结束效劳轨范void ADC_IRQHandler(void){ if(ADC_GetITStatus(RHEOSTAT_ADC,ADC_IT_EOC)==SET) { // 读取ADC

  Real-Time Embedded Multithreading - Using ThreadX and ARM

  单片机开启嵌入式到云端之旅 系列正在线研讨会

  有奖直播:DIY 家用监控角落 AI Box——基于 8TOPS 算力,售价 199 美元的开拓套件搭修深度研习案例

  Silicon Labs BG22-EK4108A 开拓套件 用科技衔接改日 申请实行时!

  【直播】STM32U5超低功耗高职能 Cortex-M33 MCU技巧解析

  【实训】STM32U5超低功耗高职能 Cortex-M33 MCU技巧解析

  【下载】最新译文:STM32CubeMX用于STM32修设和初始化C代码天生

  【干货】放大招!STM32U5,ST首个得到PSA和SESIP 3级认证的MCU!

  站点联系:归纳资讯51单片机PIC单片机AVR单片机ARM单片机嵌入式编制汽车电子消费电子数据收拾视频教程电子百科其他技巧STM32MSP430单片机资源下载单片机习题与教程

Tags:

广告位
    广告位
    广告位

标签云