有人想使用STM32U5系列的GPDMA的burst【分組、節(jié)拍、突發(fā)】傳輸功能,似乎遇到了點(diǎn)阻礙。我這里嘗試下,稍作演示,僅供參考。
我用TIMER1更新事件觸發(fā)DMA, DMA工作在非循環(huán)模式,DMA將數(shù)據(jù)從源內(nèi)存區(qū)傳輸?shù)侥康膬?nèi)存區(qū)。我先準(zhǔn)備下面兩個(gè)數(shù)組。
當(dāng)兩端訪問(wèn)數(shù)據(jù)寬度設(shè)置一樣,burst大小始終為1時(shí),傳輸是很順暢的,不會(huì)有啥問(wèn)題,結(jié)果符合預(yù)期。
基于上面配置,結(jié)果就很正常。結(jié)果如下圖,也正是我期望的結(jié)果。
當(dāng)我們嘗試使用DMAburst功能時(shí),發(fā)現(xiàn)結(jié)果就不對(duì)勁了,比方我希望源端按字節(jié)讀取,然后基于BURST功能打包,目的端按半字來(lái)提取,發(fā)現(xiàn)結(jié)果跟預(yù)期不一樣。我們一起看看:
顯然,每半個(gè)字的高字節(jié)都是填充的0。那是怎么回事呢?
我們?cè)倏纯丛炊税醋止?jié)讀取,然后基于BURST功能打包,目的端按字來(lái)提取,看看結(jié)果又會(huì)怎么樣?
結(jié)果變成了上面的那個(gè)樣子,顯然結(jié)果嚴(yán)重不符合預(yù)期。
那是怎么回事呢? 經(jīng)過(guò)反復(fù)修改參數(shù),結(jié)合我之前之前玩過(guò)F4系列DMA burst傳輸功能以及對(duì)STM32 DMA burst功能的理解,感覺(jué)這里的BUSRT傳輸應(yīng)該是工作了。對(duì)DMA burst的基本配置以及我的用戶實(shí)現(xiàn)代碼還是比較自信的。而且目前結(jié)果上來(lái)看,有數(shù)據(jù)傳輸,且數(shù)據(jù)結(jié)果是有規(guī)律的,數(shù)據(jù)并不混亂,程序也沒(méi)跑飛,就是感覺(jué)數(shù)據(jù)好像在DMABURST傳輸過(guò)程中被處理過(guò)。
剛好這兩天也就隨機(jī)性瞄了下這塊,隱約記得它是有數(shù)據(jù)處理功能的。【說(shuō)實(shí)話,U5系列DMA好復(fù)雜,比其它M4核STM32的DMA復(fù)雜很多。要沉下心來(lái)細(xì)看真不易!!】
想到這里,不禁自我懷疑。難道配置哪里還有問(wèn)題,沒(méi)做到位?
繼續(xù)查看CubeMx界面下有關(guān)GPDMA的配置,嗯?我看到了一直被我無(wú)視的一個(gè)地方:
難道問(wèn)題是在這里?此處有乾坤?
。。。。。。其實(shí),問(wèn)題真的就在這里。
當(dāng)我將那個(gè)DataHandling 配置由Disable轉(zhuǎn)為Enable基本恍然大悟了。
我們回過(guò)頭去查看手冊(cè),手冊(cè)里面對(duì)GPDMA的數(shù)據(jù)處理功能也做了描述。下圖是相關(guān)描述里的一個(gè)表格截圖。
關(guān)于GPDMA的數(shù)據(jù)處理功能,這里就不解讀了,需要時(shí)我們可以自行研讀手冊(cè)。對(duì)STM32U5的DMA功能,我只能說(shuō):哇塞!功能真強(qiáng)大!
我們還是繼續(xù)回到上面的測(cè)試。當(dāng)我使能Datahandling功能,并選中滿足我當(dāng)前需求的一個(gè)選項(xiàng)后,一切便撥云見(jiàn)日。
注意上面截圖中那個(gè)關(guān)于數(shù)據(jù)對(duì)齊的選項(xiàng)。意思還是比較簡(jiǎn)單明了,當(dāng)源數(shù)據(jù)寬度小于目的端數(shù)據(jù)寬度時(shí),按照目的端數(shù)據(jù)寬度打包擺放。
當(dāng)我在前面BURST配置的前提下,再加上這個(gè)Data Handling配置就能輸出符合預(yù)期的結(jié)果了。
換句話說(shuō),我前面的DMA Burst基本配置是沒(méi)有問(wèn)題的,只是沒(méi)有選擇合適的Data Handling方式導(dǎo)致沒(méi)有呈現(xiàn)我們預(yù)期的效果,這也正是它跟其它系列不一樣的地方。
這里涉及的用戶代碼很簡(jiǎn)單,也干脆貼過(guò)來(lái),供有需要的參考【初始化配置使用CubeMx】:
最后順便提醒一點(diǎn),上面那個(gè)DMA啟動(dòng)函數(shù)里的size變量【箭頭所指的地方】,是按照字節(jié)數(shù)來(lái)算的,這點(diǎn)要注意,這也是跟其它系列不一樣的地方。
審核編輯 :李倩
-
STM32
+關(guān)注
關(guān)注
2293文章
11032瀏覽量
364830 -
dma
+關(guān)注
關(guān)注
3文章
576瀏覽量
103223
原文標(biāo)題:基于STM32U5片內(nèi)GPDMA Burst傳輸應(yīng)用示例
文章出處:【微信號(hào):stmcu832,微信公眾號(hào):茶話MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
請(qǐng)問(wèn)STM32U3系列的定位是怎樣的?
請(qǐng)問(wèn)STM32U3系列的定位是怎樣的?
STM32U5 IWDG的提前喚醒中斷無(wú)法在STOP模式下觸發(fā)怎么解決?
STM32U5?(超低功耗MCU,支持TinyML)全面解析

為什么無(wú)法設(shè)置DMA傳輸大小?
STM32的H5/U5系列處理器內(nèi)置運(yùn)放支持負(fù)壓運(yùn)算嗎?
求助,關(guān)于U575RI的GPDMA_LINKED_list模式的疑問(wèn)求解
STM32U575串口接收+GPDMA波特率不匹配怎么解決?
cubeide的代碼怎么編譯到內(nèi)部+外部FLASH里面去?
STM32項(xiàng)目實(shí)戰(zhàn):基于STM32U5的智能大棚溫控系統(tǒng)(LVGL),附項(xiàng)目教程/源碼

STM32項(xiàng)目實(shí)戰(zhàn):基于STM32U5的火災(zāi)報(bào)警系統(tǒng)(LVGL),附項(xiàng)目教程/源碼

STM32項(xiàng)目實(shí)戰(zhàn):基于STM32U5的智能燈光控制系統(tǒng)(LVGL),附項(xiàng)目教程/源碼

評(píng)論