有人使用STM32H743芯片做應(yīng)用開發(fā),遇到個(gè)比較奇怪的事情。事情是這樣的,他使用ST公司的圖形化配置工具STM32CubeMx進(jìn)行基本配置后,如果基于ARMMDK IDE創(chuàng)建工程并組織代碼,編譯除錯(cuò)后運(yùn)行一切正常。但如果他基于IARIDE創(chuàng)建工程并使用相同的用戶代碼時(shí),發(fā)現(xiàn)程序沒法正常運(yùn)行,同時(shí)還沒有任何報(bào)錯(cuò)。頗為奇怪。
經(jīng)進(jìn)一步了解。他的代碼要實(shí)現(xiàn)的一個(gè)主要功能就是ADC,并利用通用DMA將ADC結(jié)果搬運(yùn)到內(nèi)存。現(xiàn)在最明顯的問(wèn)題就是,當(dāng)把IDE從MDK切換到IAR后,ADC的結(jié)果沒有被搬運(yùn)到內(nèi)存。借助調(diào)試可以確認(rèn),ADC外設(shè)確實(shí)啟動(dòng)了、DMA配置也沒有問(wèn)題,那到底怎么回事呢??jī)蓚€(gè)環(huán)境下的外設(shè)配置及用戶應(yīng)用代碼是完全一樣的。
借助調(diào)試,在調(diào)試過(guò)程中無(wú)意發(fā)現(xiàn)了一點(diǎn)點(diǎn)差異。那就是兩個(gè)IDE分別為存放ADC結(jié)果的內(nèi)存安排的地址不一樣。下面兩幅截圖來(lái)自ARMMDK和IAR環(huán)境下存放ADC結(jié)果的內(nèi)存地址。
不難看到,在MDK環(huán)境下,內(nèi)存地址安排在0x2400008c開始的地方,而在IAR環(huán)境下內(nèi)存地址被安排在0x20000084開始的地方。難道問(wèn)題就出在這個(gè)地方?
------正是!
我們先查看STMH7參考手冊(cè),看看上面2個(gè)地址位于哪些內(nèi)存區(qū)。
也就是說(shuō),IAR默認(rèn)將存放ADC結(jié)果的內(nèi)存安排在DTCM區(qū),而MDK將其安排在AXISRAM區(qū)。我們可以查看手冊(cè)得知,H7系列的通用DMA1或DMA2是沒法訪問(wèn)DTCM的。DTCM只能被內(nèi)核或MDMA訪問(wèn)。
上圖中的短橫杠表示不可訪問(wèn)。原來(lái)是這樣,難怪編譯過(guò)程中沒有任何報(bào)錯(cuò)提示,只是所選DMA硬件上不支持對(duì)DTCM的訪問(wèn)而已。
既然知道了原因,問(wèn)題就好解決了。我們可以在IAR環(huán)境里直接給定存儲(chǔ)地址,能讓DMA訪問(wèn)到就行。或者在IAR調(diào)試環(huán)境下修改內(nèi)存使用的默認(rèn)地址于AXISRAM區(qū).
-
芯片
+關(guān)注
關(guān)注
459文章
52308瀏覽量
437957 -
adc
+關(guān)注
關(guān)注
99文章
6659瀏覽量
548555 -
STM32
+關(guān)注
關(guān)注
2291文章
11019瀏覽量
363062
發(fā)布評(píng)論請(qǐng)先 登錄
警告 工程無(wú)法創(chuàng)建 不能編譯
如何去解決STM32CubeMx生成KEIL或IAR工程出現(xiàn)的問(wèn)題
如何利用STM32實(shí)現(xiàn)跑馬燈程序和創(chuàng)建工程?
IAR新建工程的方法
創(chuàng)建STM32CUBE_IDE_工程的方法
Kinetis實(shí)戰(zhàn)開發(fā)--用IAR創(chuàng)建工程
用于創(chuàng)建新固件應(yīng)用程序的軟件工具Keil IDE

keil創(chuàng)建工程及單片機(jī)程序執(zhí)行流程

PIC16F877A 創(chuàng)建工程 (MPLAB X IDE @XC8)

STM32CUBE_IDE_創(chuàng)建工程

初識(shí)CCS,創(chuàng)建工程、選擇芯片、簡(jiǎn)單調(diào)試及燒錄

程序換個(gè)IDE就不運(yùn)行了?

【從0開始創(chuàng)建AWTK應(yīng)用程序】創(chuàng)建應(yīng)用程序并在模擬器運(yùn)行

評(píng)論