有人使用STM32H743芯片做應用開發,遇到個比較奇怪的事情。事情是這樣的,他使用ST公司的圖形化配置工具STM32CubeMx進行基本配置后,如果基于ARM MDK IDE創建工程并組織代碼,編譯除錯后運行一切正常。但如果他基于IAR IDE創建工程并使用相同的用戶代碼時,發現程序沒法正常運行,同時還沒有任何報錯。頗為奇怪。
經進一步了解。他的代碼要實現的一個主要功能就是ADC,并利用通用DMA將ADC結果搬運到內存。現在最明顯的問題就是,當把IDE從MDK切換到IAR后,ADC的結果沒有被搬運到內存。借助調試可以確認,ADC外設確實啟動了、DMA配置也沒有問題,那到底怎么回事呢?兩個環境下的外設配置及用戶應用代碼是完全一樣的。
借助調試,在調試過程中無意發現了一點點差異。那就是兩個IDE分別為存放ADC結果的內存安排的地址不一樣。下面兩幅截圖來自ARM MDK和IAR環境下存放ADC結果的內存地址。
不難看到,在MDK環境下,內存地址安排在0x2400008c開始的地方,而在IAR環境下內存地址被安排在0x20000084開始的地方。難道問題就出在這個地方?
------正是!
我們先查看STMH7參考手冊,看看上面2個地址位于哪些內存區。
也就是說,IAR默認將存放ADC結果的內存安排在DTCM區,而MDK將其安排在AXI SRAM區。我們可以查看手冊得知,H7系列的通用DMA1或DMA2是沒法訪問DTCM的。DTCM只能被內核或MDMA訪問。
上圖中的短橫杠表示不可訪問。原來是這樣,難怪編譯過程中沒有任何報錯提示,只是所選DMA硬件上不支持對DTCM的訪問而已。
既然知道了原因,問題就好解決了。我們可以在IAR環境里直接給定存儲地址,能讓DMA訪問到就行。或者在IAR調試環境下修改內存使用的默認地址于AXI SRAM區【參考下面截圖示意操作】。
OK,今天的話題就分享到這里。這里多分享一點,愿君少跳一次坑。下次再聊。
審核編輯:湯梓紅
-
adc
+關注
關注
99文章
6671瀏覽量
548708 -
IDE
+關注
關注
0文章
349瀏覽量
47632 -
程序
+關注
關注
117文章
3825瀏覽量
82676 -
dma
+關注
關注
3文章
576瀏覽量
102868 -
STM32H743
+關注
關注
0文章
24瀏覽量
2259
原文標題:程序換個IDE就不運行了?
文章出處:【微信號:stmcu832,微信公眾號:茶話MCU】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
STM8程序脫機后就不能運行的原因?
第一次使用軟件仿真,我寫了個調試程序,在開發板上可以運行,但在PROTEUS上就不行了,為什么呢
請問一下,STM32 boot0和boot1兩個都懸空的話程序是不是就不會運行了?
STC同樣的程序換個芯片就不能運行
為什么程序運行到OSStatInit()時就不在運行了?
為什么單片機斷電重啟以后程序就不運行了?怎么解決?
使用VISUALDSP++5.0,為什么一選擇指令和數據cache程序就不能運行了?
基于IAR IDE創建工程程序不能運行怎么解決

評論