0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

關(guān)于STM32 DMAMUX模塊具體的應(yīng)用示例代碼

茶話MCU ? 來源:茶話MCU ? 2024-03-25 09:15 ? 次閱讀

有人通過公眾號(hào)微信留言,詢問是否有關(guān)于STM32 DMAMUX模塊具體的應(yīng)用示例代碼。同時(shí),個(gè)人也發(fā)現(xiàn),雖然STM32片內(nèi)的DMAMUX不是什么新模塊,似乎還是很多人并不太熟悉。這里借機(jī)聊聊這方面的內(nèi)容,重點(diǎn)演示相關(guān)功能的實(shí)現(xiàn),以供參考。

其實(shí),DMAMUX作為一個(gè)外設(shè)模塊,操作它并不需要添加太多用戶代碼,尤其是當(dāng)我們基于STM32CubeMx進(jìn)行配置時(shí)。它的主要功能就是為各種DMA請(qǐng)求做DMA傳輸通道的靈活調(diào)度與安排,并配合DMA使用,我們可以把它看成DMA控制器的前端拓展。

DMAMUX模塊大體上由DMA請(qǐng)求轉(zhuǎn)發(fā)通道和DMA請(qǐng)求發(fā)生器組成,其中每個(gè)DMA請(qǐng)求轉(zhuǎn)發(fā)通道還配有同步控制單元。DMA請(qǐng)求發(fā)生器可以基于某些事件產(chǎn)生DMA請(qǐng)求申請(qǐng)DMA傳輸。至于同步控制單元,可以簡(jiǎn)單理解為每個(gè)DMA請(qǐng)求最終是否被轉(zhuǎn)發(fā)出去的一個(gè)控制開關(guān),就像蓄勢(shì)待發(fā)的田徑選手有時(shí)還得等信號(hào)槍響一樣。

1eed29d4-ea3e-11ee-a297-92fbcf53809c.png

上圖是DMAMUX與DMA功能關(guān)聯(lián)示意圖,供理解參考。關(guān)于STM32 DMAMUX的基本功能及特性,可以閱讀本公眾號(hào)的另外一篇分享筆記《STM32芯片中的DMAMUX是干啥用的?》,這里就不對(duì)其功能原理及特性贅述了。

下面使用STM32G0系列Nucleo板重點(diǎn)演示其主要功能的實(shí)現(xiàn)。實(shí)驗(yàn)會(huì)用到PC13的外部中斷功能,LPTIM1的輸出功能、USART2外設(shè)和USART1外設(shè)基于DMA方式的通信功能。

1efdff48-ea3e-11ee-a297-92fbcf53809c.png

我們先看看DMAMUX的路由轉(zhuǎn)發(fā)功能。

DMAMUX對(duì)DMA請(qǐng)求做路由轉(zhuǎn)發(fā)是其基本功能,應(yīng)該也是設(shè)計(jì)它的初衷。我們平常使用該功能時(shí)是沒啥明顯感覺的,就像我們通過HUB讓USB設(shè)備跟PC通信一樣,尤其是在基于STM32CubeMx進(jìn)行配置時(shí)。如果說,你之前用過其它不帶DMAMUX的STM32系列的DMA功能,再來使用帶DMAMUX的DMA功能時(shí),使用STM32CubeMx工具做DMA配置,會(huì)發(fā)現(xiàn)DMA可選通道突然變多且可隨意選擇。不妨看看下圖基于STM32F4【不帶DMAMUX】和STM32G0系列【內(nèi)置DMAMUX】對(duì)UART2接收進(jìn)行DMA配置時(shí)的情形,差別一目了然。

1fd1a596-ea3e-11ee-a297-92fbcf53809c.png

說到這里,順便介紹下目前內(nèi)置DMAMUX模塊的STM32系列。我從ST官方應(yīng)用筆記AN5224截圖過來,下面這些系列都內(nèi)置了DMAMUX。后面我以STM32G0芯片演示相關(guān)功能的實(shí)現(xiàn)。

1fe54196-ea3e-11ee-a297-92fbcf53809c.png

我們接下來來看看DMAMUX的第2個(gè)功能---DMA請(qǐng)求生成功能。它能基于某些特定事件產(chǎn)生DMA請(qǐng)求,請(qǐng)求的個(gè)數(shù)可以從1~32之間。這里的特定事件主要是指各種外部中斷事件和少數(shù)幾個(gè)路由通道的DMA事件以及LPTIM的輸出事件。

這里使用STM32G071的PC13外部中斷功能。每次按鍵事件經(jīng)DMAMUX的DMA generator申請(qǐng)10個(gè)DMA請(qǐng)求,讓DMA將內(nèi)存字符數(shù)據(jù)傳輸?shù)経ART2的數(shù)據(jù)發(fā)送寄存器,最終在串口終端顯示字符串“Key In!”。下面是有關(guān)PC13外部中斷和DMAMUX generator的配置?!咀ⅲ合旅娲a都是基于HAL庫(kù)的】

1ff3eb1a-ea3e-11ee-a297-92fbcf53809c.png

使用UART2將字符串輸出到串口終端,UART2的基本配置如下:

20085cd0-ea3e-11ee-a297-92fbcf53809c.png

創(chuàng)建工程,添加下面用戶代碼【基于HAL庫(kù)】后即可驗(yàn)證結(jié)果:

201efe0e-ea3e-11ee-a297-92fbcf53809c.png

現(xiàn)在繼續(xù)看看DMAMUX的同步功能。針對(duì)該功能,這里再做兩個(gè)小演示。

第一個(gè)演示,用DMA傳輸完成產(chǎn)生觸發(fā)事件去觸發(fā)另一個(gè)DMA傳輸操作。具體來說,我開啟UART2的DMA方式收、發(fā)功能,從串口終端發(fā)送數(shù)據(jù)給UART2,UART2通過DMA方式收到數(shù)據(jù)后,基于DMAMUX產(chǎn)生DMA事件,觸發(fā)UART2將剛才收到的數(shù)據(jù)回顯到串口終端。從串口終端發(fā)送數(shù)據(jù)到再回顯于串口終端一氣呵成,無須CPU參與。

UART2的基本參數(shù)配置跟前面一樣,不重復(fù)貼圖了。下面是有關(guān)UART2 DMA接收的配置:

202ea3d6-ea3e-11ee-a297-92fbcf53809c.png

在上面UART2 DMA接收配置中,使能了DMA 事件功能。該事件將作為UART2 DMA發(fā)送的同步事件。下圖是有關(guān)UART2 DMA發(fā)送的配置,啟用了同步觸發(fā)功能。

20446586-ea3e-11ee-a297-92fbcf53809c.png

基于上面配置創(chuàng)建工程,添加必要代碼即可驗(yàn)證結(jié)果。結(jié)果就是UART2每收到10個(gè)數(shù)據(jù)后立即通過DMA方式回顯在串口終端。見下面截圖:

206292c2-ea3e-11ee-a297-92fbcf53809c.png

最后再演示一個(gè)DMAMUX同步功能的實(shí)現(xiàn)案例。使用LPTIM的輸出產(chǎn)生周期性的觸發(fā)事件,作為UART1 DMA發(fā)送的同步事件。每次LPTIM產(chǎn)生觸發(fā)事件,UART1就通過DMA發(fā)送一串字符出去。這里使用UART1自發(fā)自收來驗(yàn)證。顯然,UART1每發(fā)送一串字符出去也同時(shí)收到同一串字符。下面是LPTIM1的參數(shù)配置,沒啥過多解釋的.

20741f38-ea3e-11ee-a297-92fbcf53809c.png

下面是有關(guān)UART1 DMA方式收發(fā)功能的配置,重點(diǎn)關(guān)注其DMA發(fā)送的配置。開啟UART1 DMA發(fā)送的同步觸發(fā),LPTIM輸出的上沿作為其同步事件。至于UART1 DMA接收功能保持常規(guī)配置即可,不做同步也不產(chǎn)生DMA輸出事件。

208559d8-ea3e-11ee-a297-92fbcf53809c.png

基于上面配置,添加幾行用戶代碼即可驗(yàn)證結(jié)果。參看下面截圖:

209be202-ea3e-11ee-a297-92fbcf53809c.png

基于上面配置,如果我們不啟動(dòng)LPTIM1的話,可以發(fā)現(xiàn)UART1永遠(yuǎn)不會(huì)發(fā)送數(shù)據(jù),自然它也接收不到任何數(shù)據(jù)。

關(guān)于STM32 DMAMUX的應(yīng)用演示就介紹到這里。不難看出,使用DMAMUX相關(guān)功能及特性時(shí),所需應(yīng)用代碼不多也不復(fù)雜,關(guān)鍵在原理及配置。DMAMUX有時(shí)會(huì)給我們的應(yīng)用帶來一些意想不到的方便,可以善加利用。

好,就此打住,下次再聊~!




審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 發(fā)生器
    +關(guān)注

    關(guān)注

    4

    文章

    1387

    瀏覽量

    62307
  • STM32
    +關(guān)注

    關(guān)注

    2281

    文章

    10976

    瀏覽量

    360741
  • 外部中斷
    +關(guān)注

    關(guān)注

    1

    文章

    132

    瀏覽量

    16022
  • DMA控制器
    +關(guān)注

    關(guān)注

    1

    文章

    43

    瀏覽量

    12500
  • stm32cubemx
    +關(guān)注

    關(guān)注

    5

    文章

    286

    瀏覽量

    15821

原文標(biāo)題:STM32 DMAMUX應(yīng)用示例

文章出處:【微信號(hào):stmcu832,微信公眾號(hào):茶話MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    DMAMUX模塊的大致原理及基本框架

    用過不帶DMAMUXSTM32芯片的DMA模塊的人可能會(huì)問,之前沒這個(gè)模塊,不是照樣用嗎?外設(shè)申請(qǐng)DMA請(qǐng)求,DMA控制器做出應(yīng)答響應(yīng)后即可實(shí)現(xiàn)DMA傳輸。為什么后面推出的
    的頭像 發(fā)表于 06-18 09:49 ?1.2w次閱讀
    <b class='flag-5'>DMAMUX</b><b class='flag-5'>模塊</b>的大致原理及基本框架

    STM32L4R5的DMAMUX異常原因?

    __HAL_RCC_DMA1_CLK_ENABLE(); __HAL_RCC_DMAMUX1_CLK_ENABLE(); /*##-3- Configure the DMA
    發(fā)表于 04-19 06:36

    請(qǐng)問STM32L4R5ZI的DMA/DMAMUX是怎么管理請(qǐng)求?

    原來的STM32系列,比如F1,是沒有DMAMUX這個(gè)東西的,DMA1的1通道2通道具體對(duì)應(yīng)什么樣的請(qǐng)求,有一個(gè)專門的對(duì)應(yīng)表。但是現(xiàn)在的DMAMUX加進(jìn)來以后,對(duì)于89個(gè)外設(shè)請(qǐng)求,并沒
    發(fā)表于 04-28 06:19

    LabVIEW關(guān)于USRPRIO的示例代碼

    LabVIEW關(guān)于USRPRIO的示例代碼 USRPRIO 通常以兩種方式使用: 1 基于 FPGA 的編程 對(duì)于希望修改USRP上的底層FPGA代碼以添加自定義DSP
    發(fā)表于 11-16 20:22

    STM32 M4 時(shí)鐘配置示例代碼和工程文件免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是STM32 M4 時(shí)鐘配置示例代碼和工程文件免費(fèi)下載。
    發(fā)表于 01-03 16:22 ?7次下載
    <b class='flag-5'>STM32</b> M4 時(shí)鐘配置<b class='flag-5'>示例</b>源<b class='flag-5'>代碼</b>和工程文件免費(fèi)下載

    關(guān)于STM32浮點(diǎn)運(yùn)算單元FPU的應(yīng)用示例

    有人利用STM32芯片做些DSP處理,在啟用FPU單元進(jìn)行調(diào)試、驗(yàn)證過程中可能會(huì)遇到些小問題、小困惑,這里通過STM32F4芯片一個(gè)具體的應(yīng)用示例簡(jiǎn)單分享下,希望順便能給同仁提供些幫助
    的頭像 發(fā)表于 01-02 18:09 ?8914次閱讀
    <b class='flag-5'>關(guān)于</b><b class='flag-5'>STM32</b>浮點(diǎn)運(yùn)算單元FPU的應(yīng)用<b class='flag-5'>示例</b>

    STM32多個(gè)ADC模塊同時(shí)采樣轉(zhuǎn)換的應(yīng)用示例

    STM32多個(gè)ADC模塊同時(shí)采樣轉(zhuǎn)換的應(yīng)用示例(深圳市普德新星電源技術(shù)有限公司怎么樣)-本文重點(diǎn)介紹利用含有3個(gè)ADC模塊STM32F4、
    發(fā)表于 08-04 18:47 ?67次下載
    <b class='flag-5'>STM32</b>多個(gè)ADC<b class='flag-5'>模塊</b>同時(shí)采樣轉(zhuǎn)換的應(yīng)用<b class='flag-5'>示例</b>

    簡(jiǎn)單介紹有關(guān)STM32DMAMUX模塊

    目前STM32家族中的很多系列,比如STM32G0/STM32G4/STM32L4+/STM32H7等都內(nèi)置了
    的頭像 發(fā)表于 08-14 15:10 ?5267次閱讀
    簡(jiǎn)單介紹有關(guān)<b class='flag-5'>STM32</b>的<b class='flag-5'>DMAMUX</b><b class='flag-5'>模塊</b>

    STM32單片機(jī)雨滴模塊

    STM32單片機(jī)雨滴模塊功能實(shí)現(xiàn)一、設(shè)備說明單片機(jī):STM32f103zet6雨滴模塊片描述二、部分關(guān)鍵代碼1.初始化ADC采集
    發(fā)表于 11-18 20:36 ?48次下載
    <b class='flag-5'>STM32</b>單片機(jī)雨滴<b class='flag-5'>模塊</b>

    STM32DAC講解及代碼示例

    DAC轉(zhuǎn)換STM32的DAC模塊主要特點(diǎn)有:① 2個(gè)DAC轉(zhuǎn)換器:每個(gè)轉(zhuǎn)換器對(duì)應(yīng)1個(gè)輸出通道② 8位或者12位單調(diào)輸出③ 12位模式下數(shù)據(jù)左對(duì)齊或者右對(duì)齊④ 同步更新功能⑤ 噪聲波形生成⑥ 三角波形
    發(fā)表于 12-27 18:26 ?16次下載
    <b class='flag-5'>STM32</b>DAC講解及<b class='flag-5'>代碼</b><b class='flag-5'>示例</b>

    STM32F1復(fù)習(xí)筆記一

    去年疫情在家學(xué)的,現(xiàn)在忘完了。。就準(zhǔn)備把一些非常常見的模塊功能的使用方法給記錄這里,一來寫一遍代碼有個(gè)印象,二來也方便查閱。主要是整理正點(diǎn)原子的開發(fā)指南我用得到的地方STM32復(fù)習(xí)筆記一STM
    發(fā)表于 01-17 09:36 ?1次下載
    <b class='flag-5'>STM32</b>F1復(fù)習(xí)筆記一

    華為游戲服務(wù)示例代碼教程案例

    概述 游戲服務(wù)kit安卓示例代碼集成了華為游戲服務(wù)的眾多API,提供了示例代碼程序供您參考和使用,下面是對(duì)示例
    發(fā)表于 04-11 11:09 ?4次下載

    UM1549 STM32示例代碼生成工具

    UM1549 STM32示例代碼生成工具
    發(fā)表于 11-22 19:12 ?0次下載
    UM1549 <b class='flag-5'>STM32</b><b class='flag-5'>示例</b><b class='flag-5'>代碼</b>生成工具

    UM1550 STM32示例代碼生成工具用戶手冊(cè)

    UM1550 STM32示例代碼生成工具用戶手冊(cè)
    發(fā)表于 11-22 19:12 ?0次下載
    UM1550 <b class='flag-5'>STM32</b><b class='flag-5'>示例</b><b class='flag-5'>代碼</b>生成工具用戶手冊(cè)

    自己編寫函數(shù)示例代碼很難嗎?分享幾個(gè)示例!

    Q A 問: Arduino Uno的函數(shù)示例 我決定自己編寫函數(shù)示例代碼,因?yàn)檫@應(yīng)該是Arduino中的基本示例。網(wǎng)絡(luò)上確實(shí)有關(guān)于使用函數(shù)
    的頭像 發(fā)表于 11-16 16:05 ?678次閱讀
    自己編寫函數(shù)<b class='flag-5'>示例</b><b class='flag-5'>代碼</b>很難嗎?分享幾個(gè)<b class='flag-5'>示例</b>!

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品