亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

如何進行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

竹北市| 时尚| 东乌| 三亚市| 黔江区| 晋江市| 平度市| 交城县| 安化县| 大渡口区| 永丰县| 镇沅| 舒城县| 岳池县| 长寿区| 惠安县| 乐昌市| 桐梓县| 乳源| 农安县| 漳州市| 济宁市| 锡林郭勒盟| 仁怀市| 军事| 岳普湖县| 城步| 武隆县| 鄱阳县| 建瓯市| 灵台县| 博罗县| 江陵县| 潞城市| 凤翔县| 潮州市| 井陉县| 皋兰县| 龙游县| 商南县| 利辛县|