DMA 全稱是:Direct Memory Access;根據 ST 公司提供的相關信息,DMA是STM32中一個獨立于 Cortex-M3 內核的模塊,有點類似于 ADC、PWM、TIMER 等模塊;主要功能是起通信“橋梁”的作用,可以將所有外設映射的寄存器“連接”起來,這樣就可以高速訪問各寄存器,其傳輸不受 CPU 的支配,傳輸還是雙向的;例如,從“表面”上看,它可以將 flash 中的數據與儲存器中變量建立通訊,還可以將某一個外設的寄存器或緩沖器與另一個外設的寄存器或緩沖器建立雙向通訊,有點像把外設硬件之間用“導線”連接在一起了。其間的通訊不占 CPU 資源,訪問速度快,對于實時性強的應用將是一個很好的選擇。下面代碼是一個標準 DMA 設置,當然實際應用中可根據實際情況進行裁減:
//開啟時鐘,否則初始化無效。
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
DMA_DeInit(DMA_Channel1);
上面這句是給 DMA 配置通道,根據 ST 提供的資料,STM3210Fx 中 DMA 包含 7 個通道(CH1~CH7),也就是說可以為外設或 memory 提供 7 座“橋梁”;
DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;
DMA_PeripheralBaseAddr 是 DMA_InitStructure 結構體中一個數據成員,給 DMA 一個起始地址,好比是一個 buffer 起始地址,ADC1_DR_Address 是我定義的一個地址變量;
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)ADC_ConvertedValue;
上面這句很顯然是 DMA 要連接在 Memory 中變量的地址,ADC_ConvertedValue 是我自己在memory 中定義的一個變量地址;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
上面的這句是設置 DMA 的傳輸方向,就如前面所說的,DMA 可以雙向傳輸,也可以單向傳輸,這里設置的是單向傳輸,如果需要雙向傳輸:把 DMA_DIR_PeripheralSRC 改成DMA_DIR_PeripheralDST 即可。
DMA_InitStructure.DMA_BufferSize = 2;
上面的這句是設置 DMA 在傳輸時緩沖區的長度,前面有定義過了 buffer 的起始地址:ADC1_DR_Address ,為了安全性和可靠性,一般需要給 buffer 定義一個儲存片區,這個參數的單位有三種類型:Byte、HalfWord、word,我設置的 2 個 half-word(見下面的設置);32位的 MCU 中 1 個 half-word 占 16 bits。
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
上面的這句是設置 DMA 的外設遞增模式,如果 DMA 選用的通道(CHx)有多個外設連接,需要使用外設遞增模式:DMA_PeripheralInc_Enable;我的例子里 DMA 只與 ADC1 建立了聯系,所以選用 DMA_PeripheralInc_Disable。
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
上面的這句是設置DMA的內存遞增模式,DMA 訪問多個內存參數時,需要使用DMA_MemoryInc_Enable,當DMA只訪問一個內存參數時可設置成 :DMA_MemoryInc_Disable。
DMA_InitStructure.DMA_PeripheralDataSize =
DMA_PeripheralDataSize_HalfWord;
上面的這句是設置 DMA 在訪問時每次操作的數據長度。有三種數據長度類型,前面已經講過了,這里不在敘述。
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
與上面雷同。在此不再說明。
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
上面的這句是設置 DMA 的傳輸模式:連續不斷的循環模式,若只想訪問一次后就不要訪問了(或按指令操作來反問,也就是想要它訪問的時候就訪問,不要它訪問的時候就停止),可以設置成通用模式:DMA_Mode_Normal。
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
上面的這句是設置 DMA 的優先級別:可以分為 4 級:VeryHigh,High,Medium,Low.
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
上面的這句是設置 DMA 的 2 個 memory 中的變量互相訪問的
DMA_Init(DMA_Channel1,&DMA_InitStructure);
前面那些都是對 DMA 結構體成員的設置,在次再統一對 DMA 整個模塊做一次初始化,使得 DMA 各成員與上面的參數一致。
DMA_Cmd(DMA_Channel1,ENABLE);
使能啟動。
要使 DMA 與外設建立有效連接,這不是 DMA 自身的事情,是各個外設的事情,每個外設都有 一個 xxx_DMACmd(XXXx,Enable )函數,如果使 DMA 與 ADC 建立有效聯系,就使用ADC_DMACmd(ADC1,Enable); (這里我啟用了 ADC 中的 ADC1 模塊)。
上一篇:STM32學習之通用定時器中斷
下一篇:STM32 通用定時器作為輸入捕獲 學習筆記
推薦閱讀
史海拾趣
由于篇幅限制,無法在此處直接提供5個完整的、每篇至少500字的Eclipse Magnetics公司電子行業發展的相關故事。不過,我可以概括地描述幾個可能的故事線索,這些線索可以基于Eclipse Magnetics公司的歷史、技術發展和市場應用來構建。
- 品牌初創與磁鐵技術的突破
在1930年代,Eclipse Magnetics的名字首次出現,標志著這個品牌的誕生。隨著技術的不斷發展,公司在1940年代成為獨立公司,并開始專注于磁鐵技術的研發。到了1950年代,Eclipse Magnetics在技術上取得了重大突破,他們將磁鐵涂上紅色,并設計了與公司顏色相匹配的馬蹄形標志,這一設計不僅提升了品牌形象,也成為了國際通用標記。這一時期的Eclipse Magnetics,以其獨特的技術和產品,開始在電子行業中嶄露頭角。
- 航空航天領域的應用與拓展
隨著航空航天技術的不斷發展,Eclipse Magnetics看到了磁鐵技術在該領域的巨大潛力。公司開始投入大量資源,研發適用于航空航天領域的磁性解決方案。通過不斷的技術創新和產品優化,Eclipse Magnetics成功地為航空航天領域提供了高性能、高可靠性的磁鐵產品,并在這一領域樹立了良好的口碑。
- 與制藥工業的深入合作
除了航空航天領域,Eclipse Magnetics還與制藥工業建立了深入的合作關系。在制藥過程中,磁鐵技術可以用于磁選機,有效地去除原料中的雜質,提高藥品的純度。Eclipse Magnetics根據制藥工業的特殊需求,定制了多款磁選機產品,并提供了全面的技術支持和售后服務。通過與制藥工業的深入合作,Eclipse Magnetics不僅拓展了市場,也提升了自身的技術實力。
- 在汽車制造行業的應用
隨著汽車制造業的快速發展,Eclipse Magnetics也看到了磁鐵技術在該領域的廣闊前景。公司針對汽車制造中的各個環節,研發了多款適用于不同場景的磁性解決方案。例如,在齒輪箱軸制造過程中,Eclipse Magnetics的磁性過濾器可以保持冷卻液的清潔,提高生產效率和產品質量。這些解決方案不僅滿足了汽車制造業的需求,也進一步鞏固了Eclipse Magnetics在電子行業中的地位。
- 創新研發與可持續發展
作為一家專注于磁性技術的公司,Eclipse Magnetics始終將創新作為發展的核心動力。公司不斷投入研發資源,推動磁鐵技術的不斷進步。同時,Eclipse Magnetics也關注可持續發展問題,致力于研發環保、高效的磁性產品。通過創新研發和可持續發展戰略的實施,Eclipse Magnetics在電子行業中保持了領先地位,并為未來的發展奠定了堅實的基礎。
請注意,以上內容僅為故事線索的概括描述,具體的故事細節和數據需要根據Eclipse Magnetics公司的實際情況進行補充和完善。
面對國內外市場變化及成本增長的壓力,燦科盟在2012年決定在江西省九江市設立新的生產基地。這一基地主要負責產品的生產組裝,有效降低了生產成本,提高了交貨速度。同時,公司也加強了與當地供應商的合作,確保原材料的穩定供應。
近年來,隨著物聯網和人工智能技術的快速發展,智能化物流成為了電子行業的新趨勢。Bomar公司敏銳地捕捉到了這一市場機遇,開始將業務范圍拓展至智能化物流領域。通過與深蘭科技等公司的合作,Bomar公司成功推出了智能化物流、倉儲裝備以及清潔機器人等產品,并成功銷往歐洲市場。這些產品的推出不僅提升了Bomar公司的市場競爭力,也為公司的未來發展開辟了新的增長點。
在1991年,德立電子(DDY)在惠州市創立,以生產電感為核心產品,開啟了其在電子行業的征程。當時,公司規模雖小,但憑借對技術的執著追求和對市場敏銳的洞察力,德立電子迅速在汽車電子、色環電感等領域取得突破。公司引進美國、日本、臺灣等地的先進機械設備及檢測儀器,確保產品質量,贏得了客戶的信賴。
技術創新是德崧電子持續發展的核心動力。公司不斷加大研發投入,引進先進的生產設備和技術人才,致力于開發具有競爭力的新產品。通過不斷的技術創新,德崧電子在電子開關行業中取得了多項重要成果。例如,公司成功研發出了具有自動感應功能的智能開關,實現了對燈光、溫度等環境因素的自動調節。這一技術的推出不僅提高了產品的智能化水平,也為公司贏得了更多的市場份額。
在激烈的市場競爭中,德崧電子始終堅持品質為先的經營理念。公司從原材料采購到生產加工,再到成品檢驗,每一個環節都嚴格把控,確保產品質量。這種對品質的堅守不僅贏得了客戶的信任,也為公司贏得了良好的口碑。正是憑借著過硬的產品質量和優質的服務,德崧電子在電子開關行業中樹立了良好的品牌形象。
我想找些V型MEMS熱微執行器在實際應用中有關[url=http://bbs.eeworld.com.cn/thread-75155-1-1.html]驅動[/url]力和[url=http://bbs.eeworld.com.cn/thread-75155-1-1.html]驅動[/url]位移的具體數據,網上一直沒找到,在這希望各位幫幫忙,謝謝咯~ ...… 查看全部問答∨ |
DSP+BUILDER與VHDL混合設計方法實現DDS信號源 本帖最后由 paulhyde 于 2014-9-15 08:55 編輯 DSP+BUILDER與VHDL混合設計方法實現DDS信號源 … 查看全部問答∨ |
我用MSP430的spi口控制cc1100。數據已經寫到spi口的緩沖區內。請問怎么知道數據應經通過cc1100發送出去? void main(void) { INT8U txBuffer[4]; &nbs ...… 查看全部問答∨ |
|
我在定制好CE6.0的平臺后,建立了一個MFC Smart Deviece Application 。選的Dialog其他的沒有設置。然后進去了。我想看看是否有錯,創建完之后我就build solution一下,但是報出了57個錯誤和11個警告。我都瘋了。會不會是因為我的SDK沒有定制好? ...… 查看全部問答∨ |
特意設計了一款MJ經典造型的帽子臺燈,將MJ表演時常帶的帽子作為臺燈燈罩,內置,而巧妙之處在于就是傾斜帽子的角度,將帽子向上掀起臺燈就會亮起,相反將帽子向下壓臺燈就會熄滅。 加上這款LED科技的星光浴缸Nirvana,能使你洗 ...… 查看全部問答∨ |
TI目前提供了書序庫下載,配合CCS使用。16位的MCU畢竟是有其性能上限的,目前的這個庫提供的浮點計算可以提高26倍的計算性能(來自介紹說明)。 不過還沒有驗證過,但是數學庫的提供明顯更方便使用了。 目前僅支持:5系列、6系列和FRAM系列,附件 ...… 查看全部問答∨ |