在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

STM32CubeMx的初始配置順序是怎么影響DMA功能的

茶話MCU ? 來源:茶話MCU ? 作者:茶話MCU ? 2022-10-13 10:14 ? 次閱讀

?經常有STM32開發者基于STM32CubeMx進行配置并生成基于HAL庫的初始化代碼,當涉及到DMA功能時,發現DMA功能無效,但從配置操作及代碼本身又似乎找不出原因來的情況。此情此景 往往挺令人抓狂的。

比方曾有人反饋,他使用STM32F4系列芯片進行產品開發,通過STM32CubeMx配置并生成初始化代碼,使用了UART的DMA傳輸。但他發現DMA根本不工作。后來他無意中發現,是因為他在用戶代碼里不經意地調整過UART外設和DMA外設初始化代碼的前后順序,當他重新調整二者的先后順序后就一切正常了【此時DMA初始化代碼在前,UART初始化代碼在后】。他想知道這個順序是怎么影響DMA功能的。

我順手拿了塊STM32F334的Nucleo板,開啟UART1/UART3的數據通信功能,使用DMA進行數據的循環傳輸。UART1發送數據,UART3接收數據。基于STM32CubeMx配置后生成初始化代碼,添加用戶代碼。如下圖所示:

4f3cb8c8-4a23-11ed-a3b6-dac502259ad0.png

經測試驗證,發現基于UART1/3的DMA傳輸功能是正常的。

結合客戶的反饋,我將DMA與UART初始化順序前后調換下,如下圖:

4f58a6e6-4a23-11ed-a3b6-dac502259ad0.png

果真發現DMA不工作了,UART1/UART3之間也沒有數據通信。UART1/3的數據寄存器內容維持0值而沒有任何變化,尤其作為發送端的UART1的數據寄存器也毫無動靜。

看來,DMA和UART的初始化代碼的順序的確影響到了二者的功能,也就是說如果代碼是基于現有CubeMX生成的初始化代碼,二者的初始化順序不能隨意調整,那到底怎么回事呢?

首先查看這兩個初始化代碼內容,試圖找到蛛絲馬跡。很遺憾,并未很快發現原因。后來,當再次查看DMA初始化函數MX_DMA_Init();的具體內容時,發現代碼其實很簡單,就兩個動作:

4f68620c-4a23-11ed-a3b6-dac502259ad0.png

一個動作是開啟DMA外設的時鐘,另一個就是使能DMA相關的中斷矢量控制。

既然這樣,我嘗試將該DMA初始化函數體位置依然保持放在UART初始化代碼的后面,但將DMA初始化函數里的那句開啟DMA外設時鐘的代碼提取出來,并移至UART初始化代碼之前,據此進行驗證。這次,結果就一切正常了。

看來,基于現有初始化代碼,這個DMA時鐘的開啟要放在UART初始化代碼之前,那是為什么呢?感覺UART的配置跟DMA時鐘沒有啥關系啊。

繼續挖掘原因!

再回頭細看UART的初始化代碼,在UART初始化函數的一個子函數HAL_UART_MspInit()那里發現了端倪。

MX_USART1_UART_Init()==》HAL_UART_Init()==》HAL_UART_MspInit();

因為我們開啟了跟UART傳輸事件相關的DMA功能,在HAL_UART_MspInit();函數里不僅有對與UART相關的GPIO的復用功能配置,而且,還有跟UART事件相關的DMA配置。看來UART的初始化還是跟DMA有關聯的。

4f7e0e04-4a23-11ed-a3b6-dac502259ad0.png

結合上面DMA初始化函數里的那句開啟DMA外設時鐘代碼,到這里基本明白怎么回事了。

因為我們在UART初始化代碼里要做跟DMA有關的配置,如果不事先將DMA外設的時鐘開啟,加上UART初始化函數里也沒有開啟DMA外設時鐘的代碼,那么,在UART初始化代碼進行有關DMA的配置操作就沒法保證有效。

到此,開篇中提到的因為DMA和UART初始化代碼順序影響DMA功能的原因應該說揭曉了。

在做嵌入式開發過程中,很多的初始化配置都是基于硬件本身的,有些初始化順序可能有硬件方面的時序要求。關于這些,各芯片手冊中一般都會有明確描述和說明。我們在編寫初始化代碼時須遵循相關規定。當然,有些配置順序可能還得結合具體應用,實際體會后而做靈活調整。

回到文中案例,一般來說,STM32CubeMx在生成初始化代碼時已經考慮到初始化時序這點了,只是用戶在整理代碼過程中可能無意調整了二者的初始化順序而不自知,再加上我們對初始化代碼本身缺乏足夠的了解而可能一度陷入困境。

據個人體驗,在實際應用中,當我們基于CubeMx來回調整配置時,這個順序也可能會被打亂。請注意這點。說實在的,這個地方非常隱蔽,即使知道有這么回事也還是可能忘記或忽略。當因此而出現DMA傳輸異常時,如果不是基于代碼做跟蹤調試或閱讀是很難找到問題癥結的,因為配置操作和所調用的庫函數代碼本身是沒有問題的。核心問題就是初始化代碼的執行順序。

比方這兩天連續有人反饋,他們使用STM32芯片的ADC并啟用DMA傳輸時,都是因為這個原因使得ADC數據無法被DMA取走而產生異常。總之,在現有情況下, 保證DMA初始化代碼放在其它與DMA有關的各個外設初始化之前就不會有類似問題。比方就像下面的樣子:

4fa40d02-4a23-11ed-a3b6-dac502259ad0.png

關于這個話題,三年前我已經在此分享過了。這個過程中,依然陸續也有人會遇到這個問題,我覺得有必要再分享之,所以在這里再分享一遍,以資提醒,愿君在開發過程中少一份坎坷。

三年,算來沒完沒了的新冠疫情也持續近三年了,真難啊!我在此放一首加油曲在下方,愿一切盡快正常起來!

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • STM32
    +關注

    關注

    2282

    文章

    10986

    瀏覽量

    361062
  • uart
    +關注

    關注

    22

    文章

    1250

    瀏覽量

    102738
  • dma
    dma
    +關注

    關注

    3

    文章

    569

    瀏覽量

    101979
  • STM32F4
    +關注

    關注

    3

    文章

    194

    瀏覽量

    28700
  • stm32cubemx
    +關注

    關注

    5

    文章

    286

    瀏覽量

    15837

原文標題:STM32CubeMx的初始配置順序與DMA傳輸異常之提醒

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

收藏 人收藏

    評論

    相關推薦

    使用STM32CubeMX進行配置USB的時候,有哪些小的需要注意的細節?

    在使用STM32CubeMX進行配置USB的時候,是參照例程進行的配置,自己配置的就是沒有成功,例程就滅有問題,總感覺哪里沒有打開?有人遇到過需要注意的小細節嗎?
    發表于 04-23 06:54

    STM32開發入門進階必備!《STM32嵌入式系統開發—基于STM32CubeMX和HAL庫》新書發布!

    近日,由華清遠見教育科技集團精心編撰的教育部高等學校電子信息類專業教學指導委員會規劃教材、普通高等教育電子信息類專業系列教材——《STM32嵌入式系統開發—基于STM32CubeMX和HAL庫》重磅
    的頭像 發表于 04-03 14:54 ?351次閱讀
    <b class='flag-5'>STM32</b>開發入門進階必備!《<b class='flag-5'>STM32</b>嵌入式系統開發—基于<b class='flag-5'>STM32CubeMX</b>和HAL庫》新書發布!

    STM32CubeMX生成STM32mp135D的USART1,2,3,6代碼初始化是空的,為什么?

    STM32CubeMX生成STM32mp135D的USART1,2,3,6代碼初始化是空的,參考其他代碼做了初始化操作,可以通過HAL_USART_Transmit接口發送數據,但是
    發表于 03-07 07:48

    STM32CubeMX用于STM32配置初始化C代碼生成

    電子發燒友網站提供《STM32CubeMX用于STM32配置初始化C代碼生成.pdf》資料免費下載
    發表于 02-26 17:32 ?656次下載

    工程師開發利器:STM32CubeMX 與 eDesignSuite 的協同開發

    的核心功能與優勢STM32CubeMX 是 ST 官方推出的圖形化配置工具,專為簡化 STM32 微控制器開發流程而設計。以下是其核心功能
    的頭像 發表于 02-26 14:07 ?524次閱讀
    工程師開發利器:<b class='flag-5'>STM32CubeMX</b> 與 eDesignSuite 的協同開發

    STM32CubeMX生成的代碼,是怎樣的HAL架構?

    需要注意,CubeMX只是一個初始化工具,它只是幫你完成了HAL庫外設和時鐘的初始化,具體程序的編寫還需要查閱HAL庫的說明,使用相關函數實現你想實現的功能
    的頭像 發表于 01-01 21:01 ?523次閱讀
    <b class='flag-5'>STM32CubeMX</b>生成的代碼,是怎樣的HAL架構?

    STM32CubeMX的菜單介紹

    個項目工程,你可以基于此項目進行項目開發。下圖是菜單欄的功能介紹:具體用法請參考付費視頻。原文標題:STM32CubeMX的菜單介紹文章出處:【微信公眾號:撞上電
    的頭像 發表于 12-25 21:03 ?337次閱讀
    <b class='flag-5'>STM32CubeMX</b>的菜單介紹

    STM32CUBEMX(3)--ADC通過DMA方式采樣,USART打印

    的優先級。 本篇文章主要介紹如何使用STM32CubeMX實現ADC在DMA下快速采集,并且打印出去。 QQ群:615061293。 非DMA接收請查看: https://blog.csdn.net
    發表于 09-04 14:08

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

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

    stm32用串口燒錄怎么設置

    準備工作 確保您擁有STM32開發板和相應的硬件設備,如USB轉串口模塊。 安裝STM32CubeMXSTM32CubeProgrammer軟件,這些是ST官方提供的工具,用于配置
    的頭像 發表于 08-22 09:33 ?2565次閱讀

    STM32CubeMX中使用F103ZET6怎么配置LCD?

    STM32CubeMX中使用F103ZET6怎么配置LCD
    發表于 06-04 10:22

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

    求教stm32L051用cubemx配置不了CMOP? 我用STM32CUBEMX配置了COMP1,程序里運行了
    發表于 05-06 07:07

    STm32cubeMX生成STM32F412RGT6-USB_CDC工程初始化失敗的原因?

    請教用STm32cubeMX生成STM32F412RGT6-USB_CDC工程初始化失敗
    發表于 04-28 06:56

    STM32CubeMx使用GUI_DrawGradientH GUI_DrawGradientV繪制一直顯示黑色,是哪里出錯?

    使用STM32CubeMx配置 LTDC + DMA2D + FMC + GRAPHICS STemWin(開啟CRC),直接使用STM32CubeMx生成代碼,未進行手動修改。 問
    發表于 04-26 06:38

    使用stm32CubeMx時,設置DMA為Circular模式會被HAL_ADC_Start_DMA阻塞為什么?

    在使用stm32CubeMx時遇到一個問題,我在用DMA方式獲取ADC數據時,設置DMA為Circular模式會被HAL_ADC_Start_DMA阻塞,不懂為什么會這樣,后來換了F1
    發表于 04-25 08:12
    主站蜘蛛池模板: 欧美激情一欧美吧 | 免费一级毛片视频 | 一级毛片西西人体44rt高清 | 欧美性爽xxxⅹbbbb | 在线中文天堂 | 日本特黄特色大片免费看 | 日本欧美强乱视频在线 | 一二三区乱码一区二区三区码 | 香港经典a毛片免费观看爽爽影院 | 久久怡红院 | 天堂网在线www资源在线 | 国产主播在线看 | 91九色麻豆 | xxxx曰本 | 欧美香蕉视频 | 天天色天天拍 | 国内真实实拍伦视频在线观看 | 五月天激激婷婷大综合丁香 | 九九视频热 | 色成人综合 | 亚洲成人在线免费观看 | 国产成人精品免费视频大全可播放的 | 亚洲网站在线观看 | 538porm在线看国产亚洲 | 国产伦一区二区三区免费 | 6969精品视频在线观看 | 888午夜不卡理论久久 | 欧美三级第一页 | 日韩免费精品一级毛片 | 男人天堂综合网 | 国产在线免 | 日本网站免费 | 中文在线资源链接天堂 | 美国一级大黄香蕉片 | 精品一区视频 | 色播欧美| 欧美黄色录像 | 日本黄大片在线观看 | 濑亚美莉vs黑人欧美视频 | 黄页网站在线播放 | 欧美三级成人 |