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

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

3天內不再提示

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

茶話(huà)MCU ? 來(lái)源:茶話(huà)MCU ? 2024-03-25 09:15 ? 次閱讀

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

UART2的基本參數配置跟前面一樣,不重復貼圖了。下面是有關(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 )建工程,添加必要代碼即可驗證結果。結果就是UART2每收到10個(gè)數據后立即通過(guò)DMA方式回顯在串口終端。見(jiàn)下面截圖:

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

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

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

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

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

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

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

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

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

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




審核編輯:劉清

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

    關(guān)注

    4

    文章

    1306

    瀏覽量

    61156
  • STM32
    +關(guān)注

    關(guān)注

    2247

    文章

    10691

    瀏覽量

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

    關(guān)注

    1

    文章

    131

    瀏覽量

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

    關(guān)注

    1

    文章

    43

    瀏覽量

    12165
  • stm32cubemx
    +關(guān)注

    關(guān)注

    5

    文章

    269

    瀏覽量

    14505

原文標題:STM32 DMAMUX應用示例

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

收藏 人收藏

    評論

    相關(guān)推薦

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

    用過(guò)不帶DMAMUXSTM32芯片的DMA模塊的人可能會(huì )問(wèn),之前沒(méi)這個(gè)模塊,不是照樣用嗎?外設申請DMA請求,DMA控制器做出應答響應后即可實(shí)現DMA傳輸。為什么后面推出的
    的頭像 發(fā)表于 06-18 09:49 ?1.1w次閱讀
    <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

    請問(wèn)STM32L4R5ZI的DMA/DMAMUX是怎么管理請求?

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

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

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

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

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

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

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

    STM32多個(gè)ADC模塊同時(shí)采樣轉換的應用示例

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

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

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

    STM32單片機雨滴模塊

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

    STM32DAC講解及代碼示例

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

    STM32F1復習筆記一

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

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

    概述 游戲服務(wù)kit安卓示例代碼集成了華為游戲服務(wù)的眾多API,提供了示例代碼程序供您參考和使用,下面是對示例
    發(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示例代碼生成工具用戶(hù)手冊

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

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

    Q A 問(wèn): Arduino Uno的函數示例 我決定自己編寫(xiě)函數示例代碼,因為這應該是Arduino中的基本示例。網(wǎng)絡(luò )上確實(shí)有關(guān)于使用函數
    的頭像 發(fā)表于 11-16 16:05 ?271次閱讀
    自己編寫(xiě)函數<b class='flag-5'>示例</b><b class='flag-5'>代碼</b>很難嗎?分享幾個(gè)<b class='flag-5'>示例</b>!
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看