国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

一個因初始化順序而導致異常的話題

發布時間:2020-5-8 17:49    發布者:嵌入式人生17

一個因初始化順序而導致異常的話題
STM32用戶反映,他使用STM32F4系列芯片進行開發,通過STM32CubeMX配置初始化代碼,使用了UARTDMA傳輸。但他發現DMA根本不工作。后來他無意中發現,是因為他在用戶代碼里不經意地調整過UART外設和DMA外設初始化代碼的前后順序,當他重新調整二者的先后順序后就一切正常了。他想知道這個順序是怎么影響DMA功能的。
筆者順手拿了塊STM32F334NUCLEO板,開啟UART1/UART3的數據通信功能,使用DMA進行數據的循環傳輸。UART1 發送數據,UART3接收數據,均配置在異步雙工模式;STM32CubeMX配置后生成初始化代碼,添加用戶代碼。如下圖所示:
file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml14452\wps5.jpg
經測試驗證,發現基于UART1/3DMA傳輸功能是正常的。
結合客戶的反饋,我將DMAUART初始化順序前后調換下,如下圖:
file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml14452\wps6.jpg
果然發現,DMA真的不工作了,UART1/UART3之間沒有發生數據通信。通過調試發現,UART1/3的數據寄存器內容維持0值而沒有任何變化,尤其作為發送端的UART1的數據寄存器也毫無動靜。
看來,DMAUART的初始化代碼的順序的確影響到了二者的功能。也就是說如果代碼是基于現有CubeMX生成的初始化代碼,二者的初始化順序不能隨意調整,那到底怎么回事呢?
首先自然是查看這兩個初始化代碼內容,試圖找到蛛絲馬跡。很遺憾,并未很快發現原因。當再次查看DMA初始化函數MX_DMA_Init();的具體內容時,發現其代碼其實很簡單,就兩個動作,幾行代碼而已:
file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml14452\wps7.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功能,在UART_MspInit();函數里不僅有對與UART相關的GPIO的復用功能配置,還有跟UART事件有關的DMA配置?磥UART的初始化還是跟DMA有關聯的。【見如下截圖】                   
file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml14452\wps8.png
結合前面提到的DMA初始化函數里的那句開啟DMA外設時鐘代碼,到這里基本明白怎么回事了。
因為我們在UART初始化代碼里要做跟DMA有關的配置,如果不事先將DMA外設的時鐘開啟,【UART初始化函數里也沒有開啟DMA外設時鐘的代碼】,那么,在UART初始化代碼進行有關DMA的配置操作就沒法保證有效。
到此,開篇中提到的因為DMAUART初始化代碼順序影響DMA功能的原因應該說揭曉了。
在做嵌入式開發過程中,很多的初始化配置都是基于硬件本身的,有些初始化順序往往有硬件方面的配置時序要求,關于這些各個芯片手冊中一般都會有描述和說明。我們在編寫初始代碼時須遵循相關規定或約定。當然,有些配置順序可能還得結合具體應用,實際體會后而做靈活調整。
具體到文中案例,本來STM32CubeMX在生成初始化代碼時已經考慮到初始化時序這點了,只是用戶在整理代碼過程中無意調整了二者的初始化順序而不自知,再加上我們對CubeMX生成的初始化代碼本身往往缺乏足夠的熟悉度,在開發過程中可能會因此陷入一時的困擾。關于這點,相信未來版本的STM32CubeMX會做進一步的調整與完善。

本文地址:http://m.qingdxww.cn/thread-587953-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 利用SAM E54 Xplained Pro評估工具包演示CAN轉USB橋接器以及基于CAN的主機和自舉程序應用程序
  • 使用SAM-IoT Wx v2開發板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 貿澤電子(Mouser)專區
關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美成人免费在线视频 | 国产精品国产自线拍手机观看 | 五十路亲子中出在线观看 | 国产精品正在播放 | 亚洲欧洲一区二区三区在线观看 | 最新国产一区二区精品久久 | 狠狠干夜夜操 | 久热香蕉精品视频在线播放 | 亚洲日本欧美 | 亚洲第一区精品日韩在线播放 | 99福利网 | 亚洲精品欧洲精品 | 亚洲一区二区中文 | 亚洲成人中文字幕 | 亚洲欧美日韩中文字幕在线一 | 91在线看视频 | 精品国产日韩亚洲一区二区 | 亚洲欧美高清 | 国产精品免费一区二区三区 | 性欧美视频 | 日本私人网站在线观看 | 日日夜夜狠狠 | 香蕉视频免费在线 | 91高清国产经典在线观看 | 欧美日韩一区二区三区视频播 | 国产精品天天看特色大片不卡 | 亚洲午夜视频在线 | 亚洲天堂影院在线观看 | 午夜看黄 | 2021色噜噜狠狠综曰曰曰 | 中文字幕一区2区 | 国产91麻豆视频 | 精品免费视在线观看 | 四虎家庭影院 | www日本色 | 四虎影视在线影院在线观看 | 插吧综合网 | 91av在| 青草青草久热精品视频在线观看 | 色综合久久久高清综合久久久 | 人人干干人人 |