有人使用STM32H743芯片做應(yīng)用開(kāi)發(fā),遇到個(gè)比較奇怪的事情。事情是這樣的,他使用ST公司的圖形化配置工具STM32CubeMx進(jìn)行基本配置后,如果基于ARMMDK IDE創(chuàng)建工程并組織代碼,編譯除錯(cuò)后運(yùn)行一切正常。但如果他基于IARIDE創(chuàng)建工程并使用相同的用戶代碼時(shí),發(fā)現(xiàn)程序沒(méi)法正常運(yùn)行,同時(shí)還沒(méi)有任何報(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é)果沒(méi)有被搬運(yùn)到內(nèi)存。借助調(diào)試可以確認(rèn),ADC外設(shè)確實(shí)啟動(dòng)了、DMA配置也沒(méi)有問(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開(kāi)始的地方,而在IAR環(huán)境下內(nèi)存地址被安排在0x20000084開(kāi)始的地方。難道問(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是沒(méi)法訪問(wèn)DTCM的。DTCM只能被內(nèi)核或MDMA訪問(wèn)。
上圖中的短橫杠表示不可訪問(wèn)。原來(lái)是這樣,難怪編譯過(guò)程中沒(méi)有任何報(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ū).
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
相關(guān)推薦
` 出現(xiàn)這種警告,不能創(chuàng)建工程這是另一個(gè)程序,同樣的警告。但就可以創(chuàng)建工程--------------------------------------懵逼了這是啥情況????怎么解決.
發(fā)表于 07-21 17:26
和project_location后,點(diǎn)擊GNERATE CODE,有時(shí)候會(huì)彈出這樣的窗口:過(guò)一會(huì)兒又會(huì)提示創(chuàng)建工程有問(wèn)題:而且我在使用CubeMx有時(shí)候可以成功地建工程,有時(shí)候又不能。通過(guò)多次不同地...
發(fā)表于 08-24 07:31
如何利用STM32實(shí)現(xiàn)跑馬燈程序和創(chuàng)建工程?
發(fā)表于 11-04 06:41
目錄一. 固件庫(kù)下載二. IAR新建工程三. 工程配置一. 固件庫(kù)下載下載地址:STM32固件庫(kù)下載進(jìn)入官網(wǎng)下載根據(jù)你stm32芯片對(duì)應(yīng)的型號(hào)選擇此處我選擇的是STM32F1x系列,進(jìn)入之后下載下載
發(fā)表于 01-27 08:21
STM32CUBE_IDE_創(chuàng)建工程1、個(gè)人理解是stm32_cube_ide是集成了stm32_cube_mx和keil的功能2、簡(jiǎn)化來(lái)講就是具有圖形化配置和代碼編輯器的功能3、下面開(kāi)始正題,首先
發(fā)表于 01-27 06:29
在 IAR 開(kāi)發(fā)環(huán)境中可以使用兩種方法新建工程。一是 開(kāi)發(fā)環(huán)境中可以使用兩種方法新建工程。一是 新建 創(chuàng)建法, 新建 創(chuàng)建法是在空 白
發(fā)表于 09-25 14:52
?31次下載
用于創(chuàng)建新固件應(yīng)用程序的軟件工具Keil IDE
發(fā)表于 06-06 08:09
?4次下載
一、單片機(jī)程序執(zhí)行流程:1、startup_stm32f10x_md.s啟動(dòng)系統(tǒng)2、system_stm32f10x.c進(jìn)行系統(tǒng)初始化3、最后通過(guò)引導(dǎo)程序將程序引導(dǎo)至主函數(shù)開(kāi)始執(zhí)行二、keil
發(fā)表于 11-11 10:51
?3次下載
個(gè)軟件都默認(rèn)安裝; 在MPLAB X IDE 中添加X(jué)C8編譯器(如果已經(jīng)存在,則不用修改);3.創(chuàng)建工程注:時(shí)鐘源根據(jù) 自己的開(kāi)發(fā)板選擇(芯片內(nèi)部沒(méi)有時(shí)鐘源,外部一定要有時(shí)鐘電路,不然調(diào)試會(huì)出現(xiàn)錯(cuò)誤!!!)(錯(cuò)誤提示:目標(biāo)器件.
發(fā)表于 11-16 17:51
?9次下載
華大HC32-(01)-創(chuàng)建工程模板
發(fā)表于 11-24 12:51
?2次下載
STM32CUBE_IDE_創(chuàng)建工程1、個(gè)人理解是stm32_cube_ide是集成了stm32_cube_mx和keil的功能2、簡(jiǎn)化來(lái)講就是具有圖形化配置和代碼編輯器的功能3、下面開(kāi)始正題,首先
發(fā)表于 12-03 15:21
?9次下載
STM32CubeMX 創(chuàng)建工程模板
發(fā)表于 12-08 20:06
?20次下載
本篇文章,主要面向初次接觸CCS的朋友,你可以學(xué)到:如何創(chuàng)建工程及選擇芯片如何燒錄程序如何調(diào)試程序如何創(chuàng)建工程及選擇芯片點(diǎn)擊File->New->CCS Project
發(fā)表于 12-16 16:56
?24次下載
,編譯除錯(cuò)后運(yùn)行一切正常。但如果他基于IAR IDE創(chuàng)建工程并使用相同的用戶代碼時(shí),發(fā)現(xiàn)程序沒(méi)法正常運(yùn)行
發(fā)表于 07-24 15:30
?699次閱讀
AWTK是基于C語(yǔ)言開(kāi)發(fā)的跨平臺(tái)GUI框架。本系列文章介紹如何從0開(kāi)始創(chuàng)建AWTK應(yīng)用程序,包括搭建開(kāi)發(fā)調(diào)試環(huán)境、使用AWTK創(chuàng)建Hello工程并在模擬器上
發(fā)表于 12-01 08:24
?526次閱讀
評(píng)論