中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行stm32 DMA使用

發布時間:2022-01-05 19:32:29 來源:億速云 閱讀:149 作者:柒染 欄目:互聯網科技

今天就跟大家聊聊有關如何進行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,或找到對應章節。

如何進行stm32 DMA使用

這個就是寄存器的基地址了,然后寄存器地址就是0x40013800+0x04=0x40013804

stm32 有兩個dma共12個通達dma1有7個,dma2有5個。

下面是dma1的部分通道圖如何進行stm32 DMA使用

從這個圖可見即使是同一個外設對應的DMA通道也可能不同,所以選擇dma通道是要注意,各個通道都是專用的,只有對應的外設才能使用對應的通道。

看完上述內容,你們對如何進行stm32 DMA使用有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

前郭尔| 上犹县| 廉江市| 旬邑县| 高邮市| 定远县| 车致| 轮台县| 保山市| 雷州市| 涞水县| 通城县| 精河县| 东台市| 文山县| 蒙阴县| 井研县| 麻江县| 阿拉善右旗| 文登市| 沈丘县| 龙州县| 湘西| 涿鹿县| 五寨县| 大连市| 东光县| 内丘县| 错那县| 乐业县| 宁乡县| 南阳市| 全椒县| 彭阳县| 简阳市| 胶南市| 杭锦旗| 慈利县| 铁力市| 拉萨市| 沁水县|