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

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

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

使用CubeMx怎么配置不了UART的DMA?

茶話MCU ? 來源:ST MCU 信息交流 ? 2020-07-05 10:34 ? 次閱讀

STM32用戶反映,他目前使用STM32F407VE的芯片開發(fā)產(chǎn)品,在使用CubeMx做初始化配置時(shí)發(fā)現(xiàn)沒法給UART5配置基于該外設(shè)事件的DMA請(qǐng)求。他覺得很奇怪,堅(jiān)信UART5是可以申請(qǐng)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)行配置并試著為其申請(qǐng)DMA傳輸。經(jīng)過測(cè)試并沒有碰到他所說的問題。

那問題出在哪兒呢?

我的測(cè)試工程只是單純使用到UART5,并未使用其它外設(shè)及相關(guān)DMA應(yīng)用。我結(jié)合他反饋過來的配置截圖,隱約發(fā)現(xiàn)他的工程應(yīng)用中并不僅僅使用一個(gè)UART5外設(shè),還用到了其它外設(shè)。會(huì)不會(huì)是他在配置其它外設(shè)并申請(qǐng)DMA請(qǐng)求時(shí),把UART5可以申請(qǐng)的DMA流占用了呢?

我們先不妨打開STM32F4系列參考手冊(cè)的DMA章節(jié),看看有關(guān)外設(shè)事件與DMA傳輸流的映射關(guān)系圖。從手冊(cè)中我們可以看到,UART5的TX/RX事件能申請(qǐng)DMA毫無疑問,但只能申請(qǐng)DMA1_S0和DMA1_S7。

然而呢,可以申請(qǐng)DMA1_S0和DMA1_S7的外設(shè)事件又有很多,比方TIM4_CH1和TIM4_CH3就可以分別申請(qǐng)DMA1_S0和DMA1_S7。如果說,在做UART5事件的DMA配置之前,若有別的外設(shè)事件已經(jīng)將DMA1_S0和DMA1_S7申請(qǐng)走了,這時(shí)UART5就應(yīng)該沒得申請(qǐng)了。

基于上面分析,我們可以進(jìn)一步驗(yàn)證下。

我們使用上面提到得TIM4_CH1和TIM4_CH3先將DMA1_S0和DMA1_S7申請(qǐng)走,再來嘗試為UART5申請(qǐng)DMA,看看會(huì)怎么樣。結(jié)果CubeMX提示該外設(shè)請(qǐng)求無效,不能申請(qǐng)DMA了。如下圖所示:

提示界面跟客戶反饋的不太一樣,應(yīng)該是CubeMx版本的差異所致。表達(dá)的基本意思還是相同的,即此時(shí)沒法為UART5事件申請(qǐng)DMA傳輸。

到此,客戶反饋的問題原因也基本清晰。像這種情況,由于UART5的TX/RX事件要申請(qǐng)的DMA流固定了,我們可以看看目前占用uart5欲申請(qǐng)的DMA流的外設(shè),他們是否可以做調(diào)整去申請(qǐng)別的DAM流,從而避免競(jìng)爭。因?yàn)橛行┩庠O(shè)事件可能申請(qǐng)的DMA流不只一條,當(dāng)然這要結(jié)合具體的芯片。以STM32F4芯片為例,下圖中的TIM1_CH1,SPI1_RX,SPI1_TX可申請(qǐng)的DMA傳輸流都不只一條。

或許有人知道,STM32家族中有些系列支持DMAMUX,如果有它做DMA配置就更方便、高效。但不管怎樣,DMA請(qǐng)求事件肯定要遠(yuǎn)遠(yuǎn)多于具體實(shí)施傳輸?shù)腄MA流,所以具體應(yīng)用中并不能保證有申請(qǐng)DMA資格的事件就一定申請(qǐng)得到相應(yīng)的DMA傳輸。就像你有錢也有資格坐飛機(jī)坐高鐵,但并不能保證你時(shí)刻可以買到你期望的機(jī)票或火車票而成行。

再結(jié)合到本案例,遇到兩個(gè)外設(shè)事件對(duì)一個(gè)DMA傳輸流發(fā)生競(jìng)爭不可避免的時(shí)候,若兩個(gè)外設(shè)對(duì)DMA的使用在時(shí)間上可以錯(cuò)開的話,也還是有辦法解決的。我們可以使用CubeMx分別基于兩個(gè)外設(shè)的DMA請(qǐng)求事件生成兩套配置,然后手動(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)作提醒。

聲明:本文內(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)投訴
  • 芯片
    +關(guān)注

    關(guān)注

    450

    文章

    49636

    瀏覽量

    417224
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1199

    瀏覽量

    100833
  • dma
    dma
    +關(guān)注

    關(guān)注

    3

    文章

    552

    瀏覽量

    99942

原文標(biāo)題:使用CubeMx怎么配置不了UART的DMA?

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    MSPM0 UART通信中DMA和Ring Buffer環(huán)形緩沖的應(yīng)用

    電子發(fā)燒友網(wǎng)站提供《MSPM0 UART通信中DMA和Ring Buffer環(huán)形緩沖的應(yīng)用.pdf》資料免費(fèi)下載
    發(fā)表于 09-05 11:01 ?0次下載
    MSPM0 <b class='flag-5'>UART</b>通信中<b class='flag-5'>DMA</b>和Ring Buffer環(huán)形緩沖的應(yīng)用

    STM32CUBEMX(2)--USART通過DMA方式接收不定長數(shù)據(jù)

    。 本篇文章主要介紹如何使用STM32CubeMX實(shí)現(xiàn)串口DMA讀取,并且打印出去。QQ群:615061293。 硬件準(zhǔn)備 首先需要準(zhǔn)備一個(gè)開發(fā)板,這里我準(zhǔn)備的是NUCLEO-F030R8的開發(fā)板
    發(fā)表于 09-04 11:48

    RL78系列MCU DMAUART中的使用

    對(duì)于RL78系列的MCU,為了提高運(yùn)行效率,減少CPU的占用,建議UART數(shù)據(jù)收發(fā)使用DMA功能。DMA(Direct Memory Access)是RL78 MCU內(nèi)置的一個(gè)控制器,能在支持
    的頭像 發(fā)表于 07-17 14:24 ?336次閱讀
    RL78系列MCU <b class='flag-5'>DMA</b>在<b class='flag-5'>UART</b>中的使用

    想在PWM的中點(diǎn)觸發(fā)ADC采樣,使用Cubemx配置一直實(shí)現(xiàn)不了,為什么?

    您好! 我現(xiàn)在遇到個(gè)問題,就是想在PWM的中點(diǎn)觸發(fā)ADC采樣,使用Cubemx配置一直實(shí)現(xiàn)不了,還請(qǐng)大神指點(diǎn)
    發(fā)表于 06-03 07:47

    stm32L051用cubemx配置不了CMOP是怎么回事?

    求教stm32L051用cubemx配置不了CMOP? 我用STM32CUBEMX配置了COMP1,程序里運(yùn)行了初始化函數(shù)MX_COMP1
    發(fā)表于 05-06 07:07

    STM32F030F4上使用CubeMX配置ADC+DMA循環(huán)采集無法提取數(shù)據(jù)的原因?

    如題,使用STM32CubeMX配置了F030的ADC+DMA循環(huán)采集,ADC啟動(dòng)后OVR一直處于置為狀態(tài),但是DR寄存器輸出的數(shù)據(jù)又是正常的,我使用std庫已經(jīng)配置并實(shí)現(xiàn)了功能,使用
    發(fā)表于 04-16 08:20

    STM32CubeMX配置STM32L4R9ZI的硬件SDMMC缺少DMA Settings配置是怎么回事?

    STM32CubeMX配置STM32L4R9ZI的硬件SDMMC1,缺少DMA Settings配置?
    發(fā)表于 04-08 07:25

    STM32G071串口1無法使用DMA收發(fā)是為什么?

    單片機(jī)有UID(G030沒有UID),所以更換單片機(jī)為G071CB,使用CUBEMX配置,串口1和串口2都使用DMA收發(fā)數(shù)據(jù),結(jié)果串口2的收發(fā)沒有任何問題,串口1發(fā)不出去數(shù)據(jù),也接收不了
    發(fā)表于 04-01 07:46

    使用CubeMX生成STM32F103C8T6的DMA ADC代碼為什么無效?

    請(qǐng)問各位,我使用CubeMX生成STM32F103C8T6的DMA ADC代碼,工程配置請(qǐng)看附件,我運(yùn)行如下代碼為什么無效: /* USER CODE BEGIN Includes
    發(fā)表于 03-29 06:08

    使用CubeMX配置STM32F407VGT6的SPI DMA發(fā)送16位數(shù)據(jù),時(shí)鐘有波形的原因?

    使用CubeMX配置STM32F407VGT6的SPI DMA發(fā)送16位數(shù)據(jù),時(shí)鐘有波形,MOSI無數(shù)據(jù),上電就是高電平,其他CLK有波形的時(shí)候也還是高電平,發(fā)送的數(shù)據(jù)是0x0001和0x0000
    發(fā)表于 03-28 07:40

    關(guān)于STM32L051C8T6芯片LPUART+DMA接收問題求解

    ,其中UART2的接收是能夠回顯的。但是LPUART就無法做到回顯。兩者之間除了中斷優(yōu)先級(jí)之外其他基本都一樣。我也查閱了文檔,看是否是STM32CUBEMX生成程序配置錯(cuò)誤的原因,結(jié)果也不是。 是LPUART不支持
    發(fā)表于 03-28 07:05

    STM32F103使用cubemx配置ADC和DMA導(dǎo)致delay函數(shù)無法使用怎么解決?

    CUBEMX配置完adc和dma后在主函數(shù)中調(diào)用函數(shù)HAL_ADC_Start_DMA( hadc1,(uint32_t *) DMA_v
    發(fā)表于 03-28 06:21

    STM32U575VGT6 standard request mode配置之后用不了是怎么回事?

    這個(gè)standard request mode 配置了之后用不了,會(huì)有hard fault error define printf_dma(...)HAL_UART_Transmit_DMA
    發(fā)表于 03-12 06:19

    STM32F405 uart DMA收發(fā)數(shù)據(jù)輸出亂碼怎么解決?

    利用dma+ldle接收數(shù)據(jù),使用STM32cubemx生成driver,使用hal庫發(fā)現(xiàn)僅能接收一次數(shù)據(jù),然后串口busy無法再次觸發(fā)中斷,然后使用標(biāo)準(zhǔn)庫編寫測(cè)試代碼,數(shù)據(jù)接收問題解決,數(shù)據(jù)輸出
    發(fā)表于 03-08 07:38

    AT32 MCU DMA通道的靈活配置

    AT32 MCU DMA通道的靈活配置
    的頭像 發(fā)表于 10-26 17:51 ?884次閱讀
    AT32 MCU <b class='flag-5'>DMA</b>通道的靈活<b class='flag-5'>配置</b>