娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

DMA,意思為直接存儲器訪問。


DMA 可 用于實現外設與存儲器之間或者存儲器與存儲器之間數據高效傳輸。


因為 DMA 傳輸數據移動過程無需 CPU 直接操作,這樣節省的 CPU 資 源就可供其它操作使用。


從硬件層面來理解,DMA 就好像是 RAM 與 I/O 設備間數 據傳輸的通路,外設與存儲器之間或者存儲器與存儲器之間可以直接在這條通路 上進行數據傳輸。


這里說的外設一般指外設的數據寄存器,比如 ADC、SPI、I2C、 DCMI 等外設的數據寄存器,存儲器一般是指片內 SRAM、外部存儲器、片內 Flash 等。


STM32F1 最多有 2 個 DMA 控制器,DMA1 有 7 個通道。 DMA2 有 5 個通道。每個通道專門用來管理來自于一個或多個外設 對存儲器訪問的請求。還有一個仲裁器來協調各個 DMA 請求的優先權。


DMA1通道對應外設請求


DMA2通道對應外設請求

DMA就像一個中轉站一樣,里面有源地址和目標地址,多通道并用可以配置優先級,

只要開啟DMA就可以直接實現源地址里的內容傳送給目標地址,不需要CPU來管理,它就像個通道一樣,開啟就傳輸。


dma.c


#include "dma.h"

 

/*******************************************************************************

* 函 數 名         : DMAx_Init

* 函數功能         : DMA初始化函數

* 輸    入         : 

                     DMAy_Channelx:DMA通道選擇,@ref DMA_channel DMA_Channel_0~DMA_Channel_7

                     par:外設地址

                     mar:存儲器地址

                     buff_size:數據傳輸量

* 輸    出         : 無

*******************************************************************************/ 

void DMAx_Init(DMA_Channel_TypeDef* DMA1_Channelx,u32 par,u32 mar,u16 buff_size)

{

    DMA_InitTypeDef DMA_InitStructure;

    

    //1*開啟相應時鐘

    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);

    

    //2*DMA結構體配置

    DMA_InitStructure.DMA_PeripheralBaseAddr = par;  //外設目標地址

    DMA_InitStructure.DMA_MemoryBaseAddr = mar;   //存儲器源地址

    DMA_InitStructure.DMA_DIR =DMA_DIR_PeripheralDST ;  //方向是DMA存儲器到外設寄存器。方向還有外設到存儲器,存儲器到存儲器

    DMA_InitStructure.DMA_BufferSize = buff_size; //傳輸的字節數目

    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //外設寄存器地址自遞增,外設通常是一個不需要遞增

    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryInc_Enable;  //傳輸數據多字節時需要地址自增,實現開啟就全部傳輸完

    DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; //DMA傳輸模式,單次傳輸

    DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;  //優先級配置,用于多通道時

    DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;  //存儲器到存儲器時打開

    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; //存儲器數據長度為1Byte,8位

    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; //外設接收數據長度為必須要存儲器發送數據長度一樣

    DMA_Init(DMA1_Channelx,&DMA_InitStructure);

    

}

 

/*******************************************************************************

* 函 數 名         : DMAx_Enable

* 函數功能         : 開啟一次DMA傳輸

* 輸    入         : DMAy_Channelx:DMA通道選擇,@ref DMA_channel DMA_Channel_0~DMA_Channel_7

                     buff_size:數據傳輸量,傳輸時再賦值一遍防止出錯

* 輸    出         : 無

*******************************************************************************/ 

//3*開啟DMA

void DMAx_ENABLE(DMA_Channel_TypeDef* DMA1_Channelx,u16 buff_size)

{

 

    DMA_Cmd(DMA1_Channelx,DISABLE);   //先關閉DMA使能來賦

    DMA_SetCurrDataCounter(DMA1_Channelx,buff_size);

    DMA_Cmd(DMA1_Channelx,ENABLE);

}

dma.h


#ifndef _dma_H

#define _dma_H

 

#include "system.h"

 

 

void DMAx_Init(DMA_Channel_TypeDef* DMA1_Channelx,u32 par,u32 mar,u16 buff_size);

 

void DMAx_ENABLE(DMA_Channel_TypeDef* DMA1_Channelx,u16 buff_size); 

 

 

#endif

 

main.c


#include "systick.h"

#include "led.h"

#include "system.h"

#include "key.h"

#include "usart.h"

#include "dma.h"

 

#define data_size 5000

u8 data[data_size];

 

//數組賦值專用函數

void Data_zhuang(u8 *p)

{

    u16 i;

    for(i=0;i    {

        *p = '5';

        p++;

 

    }

}


int main()

{

    u8 i=0;

    u8 key;

    

    SysTick_Init(72);  //系統時鐘初始

    LED_INIT(); 

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 

    USART1_Init(9600);

    KEY_INIT();

    

    Data_zhuang(data); //給數組賦值

    DMAx_Init(DMA1_Channel4,(u32)&USART1->DR,(u32)data,data_size); //DMA初始化,(u32)&USART1->DR是串口1的數據寄存器,(u32)data是我們在內存中造的數組

    

    while(1)

    { 

        key = KEY_Scan(0);

        if(key==KEY_UP)

        {

            USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE); //是哪個外設就開啟哪個的DMA功能

            DMAx_ENABLE(DMA1_Channel4,data_size);  //使能DMA

            

            while(1)

            {

                if(DMA_GetFlagStatus(DMA1_FLAG_TC4)==1) //判斷DMA1的通道4是否傳輸完成

                {

                    DMA_ClearFlag(DMA1_FLAG_TC4);  //清除傳輸完成標志

                    break;

                }

                led2=!led2;

                delay_ms(300);

            }   

        }

    

        i++;

        if(i%20==0) //200ms變換一次

        {

            led1=!led1;

        }

    

    }

}

關鍵字:stm32  DMA基礎  存儲器 引用地址:stm32---DMA基礎

上一篇:stm32---DS18b20
下一篇:stm32---DAC

推薦閱讀

  顯示市場如果以20年為期,那么最近這20年時間,無疑是液晶顯示技術的天下,在此之前,CRT技術是當之無愧的主導,而在下一個20年內,是OLED顯示技術稱雄還是有其他次時代顯示技術取而代之,現在仍然難以定論,但可以確定的是,顯示市場正站在一個選擇的分叉口上。下面就隨嵌入式小編一起來了解一下相關內容吧?! ∽畋晃覀兯煜さ娘@示設備,當然就是...
根據《CNET》報導,美國聯邦貿易委員會(FTC)要求多家通信商解釋其隱私權措施,以及他們是如何通過用戶數據獲利。FTC在美國時間周二寄信給AT&T、Comcast、Google Fiber、T-Mobile以及Verizon,詢問這些公司的數據使用方式。FTC表示,由于電信公司逐漸轉變成垂直整合的平臺,也會提供廣告贊助內容,該機構希望能通過這個研究,更好地了解網絡提供商的隱私措...
目標:定時器和計數器的理解(二)3.定時器/計數器工作方式(1)方式0TL0是5位的寄存器,計數滿了就向TH0進位并清0GATE是門控信號GATE=1時,T/C(定時/計數器)啟動收到雙重控制要求TR0/TR1和INT0/INT1同時為高,GATE=0時,T/C的啟動僅收到TR0/TR1的控制,通常把GATE置0GATE置1,經過非門為0到或門,INT0必須為1和TR0必須為1,與門才是1,才能開始計數/定時GAT...
3月24日,全球領先的足式機器人AI創新賦能平臺德魯動力受海南安邁云網絡技術有限公司之邀,參與了由其主辦的“云領風潮?安邁云品牌交流會”。活動現場,德魯動力與分布式存儲行業精英、產業鏈核心機構、分布式技術應用單元、主流媒體等嘉賓代表齊聚一堂,解析產業最新政策,前瞻賽道趨勢,拆解技術架構。德魯動力COO鮑平軍現場出席,并圍繞《四足機器人AI...

史海拾趣

問答坊 | AI 解惑

MSN組件問題

wince定制系統時要加MSN,缺少.NET messenger service支持。要加什么組件呢?謝謝。?!?

查看全部問答∨

用tornado時 build沒問題,但download時報錯

程序就是想打印BIOS中的時間:年 原程序如下: #include #include #include #include void biostime() {     struct tm ahora;     int cYear;     sysOutByte(0x70,0x09);     ...…

查看全部問答∨

單片機 燒制程序

單片機燒制程序原理是什么? 一個程序是怎么燒制到單片機里面去的,燒制進去后為什么就會運行? 這問題困擾我很久,想不通啊。…

查看全部問答∨

2010年全球電子工程師薪資對比 中國最低

 美國EETimes雜志剛剛發布了2010年全球電子工程師收入調查結果。數據表明,中國的電子工程師收入最低,僅相當于北美同行的16%,然而他們的付出卻是全球最高的。報告稱,工程師得不到休息是全球性問題,尤其是對于中國的工程師而言。中國最近超 ...…

查看全部問答∨

c8051f系列單片機

C8051F020單片機主要特性   高速流水線結構的8051  兼容的CIP-51  內核可達25MIPS   全速非侵入式的在系統調試接口片內   真正12 位C8051F020 100 ksps  的8  通道ADC 帶PGA和模擬多路開關&nb ...…

查看全部問答∨

招聘(@成都or深圳)——歡迎懂電子技術的才女

       如果您厭倦于做工程師的枯燥,或者希望尋求新的職場機遇,如果您對自己的文字表達能力有信心,了解主流電子技術概念,并具有一定英文技術資料閱讀能力,您不妨發送簡歷給我們,為您打開全新的職場空間?。ㄅ?...…

查看全部問答∨

基于MSP430F149單片機的炮兵氣象儀設計

針對目前采用的簡易氣象綜合觀測儀,存在著實時性差、精度不夠、作業時間長以及不能直接計算射擊條件修正量和地面風修正量等諸多問題,本文提出基于MSP430F149單片機設計一種炮兵氣象儀,以滿足炮兵分隊射擊時的簡易氣象條件和火箭炮地面風修正的 ...…

查看全部問答∨

Cyclone V板卡試用報告三 --- 初識Cyclone V PCIe硬核接口

Cyclone V的板卡上有一個PCIE的接口為了試用一下這個接口對PCIe進行了一些學習。 主要參考資料是Cyclone V Hard IP for PCI Express User Guide.pdf在Altera的官方網址都可以下載到。 PDF中主要介紹了Cyclone V系列FPGA的硬核PCIe的配置方法,IP ...…

查看全部問答∨

51 單片機之間通訊

rt 打算實現一個單片機把溫度值顯示 并在另一個單片機上用數碼管顯示  求大神看一下哪里錯了 #include#include#define uchar unsigned char#define uint unsigned intsbit DS=P2^4;          uint temp;& ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 柯坪县| 沁水县| 泰顺县| 永清县| 浑源县| 吉隆县| 宁武县| 台安县| 丘北县| 江北区| 遵义县| 齐齐哈尔市| 治县。| 滁州市| 福安市| 罗平县| 启东市| 古蔺县| 介休市| 沂水县| 右玉县| 漠河县| 海南省| 阿合奇县| 崇义县| 威信县| 通渭县| 延吉市| 咸丰县| 田林县| 两当县| 黎平县| 蓬莱市| 邛崃市| 修文县| 泽库县| 晋州市| 凌海市| 汽车| 朝阳市| 江西省|