您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關如何進行stm32 DMA使用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
stm32 DMA外設簡介:
DMA (Direct Memory Access),直接存儲器存取,是一種可以大大減輕CPU 工作量的數據存取方式,因而被廣泛地使用。在硬件系統中,主要由 CPU(內核)、外設、內存(SRAM)、總線等結構組成,數據經常要在內存與外設之間轉移,或從外設 A轉移到外設B。DMA可以不同過CPU直接將數據由外設傳輸到內存或由內存到外設。其實具體表現就是在外設的寄存器和內存變量之間建立一個通道,使他們的數據更新同步,就像是同一個變量一樣。
stm32 DMA外設也有對應的傳輸完成中斷。
下面以在USART1的數據寄存器到內存變量建立一個單向DMA通道為例,說明一下DMA的用法啊。USART1->到變量。
USART1配置就是一般配置,只有一點要注意:就是一定要使能USART1外設的DMA功能。
USART_DMACmd(USART1, USART_DMAReq_Rx, ENABLE);//一定要記得使能對應外設的DMA功能,因為這個糾結了半天。。。。
DMA配置:
define USART1_DR_Base 0x40013804 uint8_t TxBuff; void DMA_Config(void) { DMA_InitTypeDef DMA_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //開啟DMA時鐘 /*設置DMA源:內存地址&串口數據寄存器地址*/ DMA_InitStructure.DMA_PeripheralBaseAddr = USART1_DR_Base; /*內存地址(要傳輸的變量的指針)*/ DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)(&TxBuff); /*方向:從外設到內存*/ DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; /*傳輸大小DMA_BufferSize=SENDBUFF_SIZE*/ DMA_InitStructure.DMA_BufferSize = 1; /*外設地址不增*/ DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; /*內存地址不增*/ DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable; /*外設數據單位*/ DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; /*內存數據單位 8bit*/ DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; /*DMA模式,循環*/ DMA_InitStructure.DMA_Mode = DMA_Mode_Circular ; /*優先級:中*/ DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; /*禁止內存到內存的傳輸 */ DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; /*配置DMA1的5通道*/ DMA_Init(DMA1_Channel5, &DMA_InitStructure); DMA_Cmd (DMA1_Channel5,ENABLE); //使能DMA USART_DMACmd(USART1, USART_DMAReq_Rx, ENABLE);//記得一定要使能對應外設的DMA功能,因為這個搞了半天。。。。 }
DMA的配置還是比較簡單的,就外設寄存器地址如何找到呢,也就是代碼中的那個宏。在數據手冊中找唄。
在這里可以找寄存器的偏移地址。然后找基地址,在PDF中搜索memory map,或找到對應章節。
這個就是寄存器的基地址了,然后寄存器地址就是0x40013800+0x04=0x40013804
stm32 有兩個dma共12個通達dma1有7個,dma2有5個。
下面是dma1的部分通道圖
從這個圖可見即使是同一個外設對應的DMA通道也可能不同,所以選擇dma通道是要注意,各個通道都是專用的,只有對應的外設才能使用對應的通道。
看完上述內容,你們對如何進行stm32 DMA使用有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。