有人使用STM32H743芯片做應用開發,遇到個比較奇怪的事情。事情是這樣的,他使用ST公司的圖形化配置工具STM32CubeMx進行基本配置后,如果基于ARMMDK IDE創建工程并組織代碼,編譯除錯后運行一切正常。但如果他基于IARIDE創建工程并使用相同的用戶代碼時,發現程序沒法正常運行,同時還沒有任何報錯。頗為奇怪。
經進一步了解。他的代碼要實現的一個主要功能就是ADC,并利用通用DMA將ADC結果搬運到內存。現在最明顯的問題就是,當把IDE從MDK切換到IAR后,ADC的結果沒有被搬運到內存。借助調試可以確認,ADC外設確實啟動了、DMA配置也沒有問題,那到底怎么回事呢?兩個環境下的外設配置及用戶應用代碼是完全一樣的。
借助調試,在調試過程中無意發現了一點點差異。那就是兩個IDE分別為存放ADC結果的內存安排的地址不一樣。下面兩幅截圖來自ARMMDK和IAR環境下存放ADC結果的內存地址。
不難看到,在MDK環境下,內存地址安排在0x2400008c開始的地方,而在IAR環境下內存地址被安排在0x20000084開始的地方。難道問題就出在這個地方?
------正是!
我們先查看STMH7參考手冊,看看上面2個地址位于哪些內存區。
也就是說,IAR默認將存放ADC結果的內存安排在DTCM區,而MDK將其安排在AXISRAM區。我們可以查看手冊得知,H7系列的通用DMA1或DMA2是沒法訪問DTCM的。DTCM只能被內核或MDMA訪問。
上圖中的短橫杠表示不可訪問。原來是這樣,難怪編譯過程中沒有任何報錯提示,只是所選DMA硬件上不支持對DTCM的訪問而已。
既然知道了原因,問題就好解決了。我們可以在IAR環境里直接給定存儲地址,能讓DMA訪問到就行。或者在IAR調試環境下修改內存使用的默認地址于AXISRAM區.
-
芯片
+關注
關注
456文章
50936瀏覽量
424670 -
adc
+關注
關注
98文章
6512瀏覽量
545016 -
STM32
+關注
關注
2270文章
10906瀏覽量
356560
發布評論請先 登錄
相關推薦
警告 工程無法創建 不能編譯
如何去解決STM32CubeMx生成KEIL或IAR工程出現的問題
IAR新建工程的方法
創建STM32CUBE_IDE_工程的方法
Kinetis實戰開發--用IAR創建工程
keil創建工程及單片機程序執行流程
![keil<b class='flag-5'>創建工程</b>及單片機<b class='flag-5'>程序</b>執行流程](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
PIC16F877A 創建工程 (MPLAB X IDE @XC8)
![PIC16F877A <b class='flag-5'>創建工程</b> (MPLAB X <b class='flag-5'>IDE</b> @XC8)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
STM32CUBE_IDE_創建工程
![STM32CUBE_<b class='flag-5'>IDE</b>_<b class='flag-5'>創建工程</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
初識CCS,創建工程、選擇芯片、簡單調試及燒錄
![初識CCS,<b class='flag-5'>創建工程</b>、選擇芯片、簡單調試及燒錄](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
【從0開始創建AWTK應用程序】創建應用程序并在模擬器運行
![【從0開始<b class='flag-5'>創建</b>AWTK應用<b class='flag-5'>程序</b>】<b class='flag-5'>創建</b>應用<b class='flag-5'>程序</b>并在模擬器<b class='flag-5'>運行</b>](https://file.elecfans.com/web2/M00/50/DA/pYYBAGLH6TyAB71EAAAPQ7KgtYA038.png)
評論