某STM32用戶反映,他目前使用STM32F407VE的芯片開發(fā)產(chǎn)品,在使用CubeMx做初始化配置時(shí)發(fā)現(xiàn)沒法給UART5配置基于該外設(shè)事件的DMA請求。他覺得很奇怪,堅(jiān)信UART5是可以申請DMA傳輸?shù)模宜€基于早期CubeMx 版本配置過、使用過。
他剛好最近對(duì)CubeMx升級(jí)到5.5.0了,懷疑是不是STM32CubeMx5.5以上版本的bug。
說到這里,可能有人還不是沒完全明白具體怎么回事。我們結(jié)合他給過來得截圖一起來看看。他在對(duì)uart5做配置時(shí)出現(xiàn)的界面是下面這樣的,連那個(gè)DMA配置的菜單都沒有。
基于他的反饋,我用目前最新的CubeMX版本5.6.1進(jìn)行驗(yàn)證,同樣對(duì)STM32F407VE的UART5進(jìn)行配置并試著為其申請DMA傳輸。經(jīng)過測試并沒有碰到他所說的問題。
那問題出在哪兒呢?
我的測試工程只是單純使用到UART5,并未使用其它外設(shè)及相關(guān)DMA應(yīng)用。我結(jié)合他反饋過來的配置截圖,隱約發(fā)現(xiàn)他的工程應(yīng)用中并不僅僅使用一個(gè)UART5外設(shè),還用到了其它外設(shè)。會(huì)不會(huì)是他在配置其它外設(shè)并申請DMA請求時(shí),把UART5可以申請的DMA流占用了呢?
我們先不妨打開STM32F4系列參考手冊的DMA章節(jié),看看有關(guān)外設(shè)事件與DMA傳輸流的映射關(guān)系圖。從手冊中我們可以看到,UART5的TX/RX事件能申請DMA毫無疑問,但只能申請DMA1_S0和DMA1_S7。
然而呢,可以申請DMA1_S0和DMA1_S7的外設(shè)事件又有很多,比方TIM4_CH1和TIM4_CH3就可以分別申請DMA1_S0和DMA1_S7。如果說,在做UART5事件的DMA配置之前,若有別的外設(shè)事件已經(jīng)將DMA1_S0和DMA1_S7申請走了,這時(shí)UART5就應(yīng)該沒得申請了。
基于上面分析,我們可以進(jìn)一步驗(yàn)證下。
我們使用上面提到得TIM4_CH1和TIM4_CH3先將DMA1_S0和DMA1_S7申請走,再來嘗試為UART5申請DMA,看看會(huì)怎么樣。結(jié)果CubeMX提示該外設(shè)請求無效,不能申請DMA了。如下圖所示:
提示界面跟客戶反饋的不太一樣,應(yīng)該是CubeMx版本的差異所致。表達(dá)的基本意思還是相同的,即此時(shí)沒法為UART5事件申請DMA傳輸。
到此,客戶反饋的問題原因也基本清晰。像這種情況,由于UART5的TX/RX事件要申請的DMA流固定了,我們可以看看目前占用uart5欲申請的DMA流的外設(shè),他們是否可以做調(diào)整去申請別的DAM流,從而避免競爭。因?yàn)橛行┩庠O(shè)事件可能申請的DMA流不只一條,當(dāng)然這要結(jié)合具體的芯片。以STM32F4芯片為例,下圖中的TIM1_CH1,SPI1_RX,SPI1_TX可申請的DMA傳輸流都不只一條。
或許有人知道,STM32家族中有些系列支持DMAMUX,如果有它做DMA配置就更方便、高效。但不管怎樣,DMA請求事件肯定要遠(yuǎn)遠(yuǎn)多于具體實(shí)施傳輸?shù)腄MA流,所以具體應(yīng)用中并不能保證有申請DMA資格的事件就一定申請得到相應(yīng)的DMA傳輸。就像你有錢也有資格坐飛機(jī)坐高鐵,但并不能保證你時(shí)刻可以買到你期望的機(jī)票或火車票而成行。
再結(jié)合到本案例,遇到兩個(gè)外設(shè)事件對(duì)一個(gè)DMA傳輸流發(fā)生競爭不可避免的時(shí)候,若兩個(gè)外設(shè)對(duì)DMA的使用在時(shí)間上可以錯(cuò)開的話,也還是有辦法解決的。我們可以使用CubeMx分別基于兩個(gè)外設(shè)的DMA請求事件生成兩套配置,然后手動(dòng)調(diào)整代碼,需要使用哪個(gè)外設(shè)事件的DMA傳輸時(shí)就啟用相應(yīng)的DMA配置及應(yīng)用函數(shù)。總之,搞清了怎么回事,結(jié)合具體應(yīng)用靈活處理就好。
最后小結(jié)下。針對(duì)上面的客戶問題,如果對(duì)CubeMx工具的使用不熟或者說只是機(jī)械地使用該工具做配置,心里沒有些基本原理做支撐的話,遇到該問題時(shí)恐怕一時(shí)也的確難以找到方向。在此分享,權(quán)作提醒。
-
芯片
+關(guān)注
關(guān)注
456文章
51192瀏覽量
427352 -
uart
+關(guān)注
關(guān)注
22文章
1243瀏覽量
101776 -
dma
+關(guān)注
關(guān)注
3文章
566瀏覽量
100969
原文標(biāo)題:使用CubeMx怎么配置不了UART的DMA?
文章出處:【微信號(hào):stmcu832,微信公眾號(hào):茶話MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評(píng)論請先 登錄
相關(guān)推薦
評(píng)論