當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]引言  MDK軟件在模擬仿真時(shí),不能很好地支持各種STM32系列芯片,目前對(duì)STM32F103系列芯片支持模擬仿真,但對(duì)于其他系列芯片不支持或只是部分支持。主要存在的問(wèn)題是:PC和SP不能自動(dòng)裝載,存儲(chǔ)器不能訪問(wèn),中斷服務(wù)

引言
  MDK軟件在模擬仿真時(shí),不能很好地支持各種STM32系列芯片,目前對(duì)STM32F103系列芯片支持模擬仿真,但對(duì)于其他系列芯片不支持或只是部分支持。主要存在的問(wèn)題是:PC和SP不能自動(dòng)裝載,存儲(chǔ)器不能訪問(wèn),中斷服務(wù)程序不能執(zhí)行或觸發(fā),外設(shè)寄存器不能修改或觀察。要解決上述問(wèn)題,必須通過(guò)相應(yīng)的設(shè)置和相關(guān)的操作,才能完成模擬仿真。
1 模擬仿真的實(shí)現(xiàn)及PC和SP的自動(dòng)裝載
  在MDK軟件中,只有部分STM32芯片支持模擬仿真(如STM32F103),大部分芯片都不支持模擬仿真。主要的問(wèn)題是,當(dāng)進(jìn)入調(diào)試界面后,R15 (PC)的值為0x00000000,不能進(jìn)行調(diào)試操作(如單步、全速等)。要能對(duì)STM32進(jìn)行模擬仿真,必須使PC的值不能為0。通過(guò)分析STM32芯片的存儲(chǔ)器結(jié)構(gòu)可知,在存儲(chǔ)器地址0x00000000處保存的是堆棧指針SP的值,程序加載時(shí)自動(dòng)把該值送給SP,在存儲(chǔ)器地址0x00000004處保存的是程序指針PC的值,程序加載時(shí)自動(dòng)把該值送給PC,程序從該P(yáng)C值取指令執(zhí)行程序,而不是從地址0x00000000處執(zhí)行程序。而STM32芯片的Flash程序存儲(chǔ)器地址是從0x08000000處開(kāi)始的,當(dāng)進(jìn)入模擬仿真時(shí),MDK軟件不能把Flash的地址送給PC和SP??赏ㄟ^(guò)以下操作步驟完成PC和SP的自動(dòng)裝載。
①打開(kāi)MDK自帶的工程文件,如C:KeilARMBoardsSTSTM3240GEVALBlinkyBlinky.uvproj。
②單擊“編譯”工具欄上面的下拉菜單,選擇“STM32F407 Flash”。
③單擊,打開(kāi)“Options”對(duì)話框,切換到“Output”選項(xiàng)卡,勾選“Debug Information”和“Browse Information”,用以產(chǎn)生調(diào)試信息。再切換到“Debug”選項(xiàng)卡,單擊“Use Simulator”,選擇模擬仿真,確保勾選“Load Application at Startup”,其他為默認(rèn)設(shè)置。
④單擊,編譯程序,并保證編譯成功。
⑤單擊,開(kāi)始調(diào)試,進(jìn)入調(diào)試界面后,觀察“Registers”寄存器選項(xiàng)卡中的R15 (PC)的值,如果值為0,則說(shuō)明不能進(jìn)行模擬仿真,“單步”調(diào)試等無(wú)效,須進(jìn)行步驟⑥的操作,否則可不進(jìn)行步驟⑥的操作。
⑥停止調(diào)試,再次單擊,打開(kāi)“Options”對(duì)話框,切換到“Target”選項(xiàng)卡,將IROM1的值[0x08000000,0x100000]修改為[0x0,0x100000],以使Flash的起始地址從0x0開(kāi)始。單擊重新編譯程序,再次單擊,開(kāi)始調(diào)試,PC的值將不再為0,即可進(jìn)入模擬仿真,“單步”調(diào)試等有效。
2 存儲(chǔ)器的訪問(wèn)
  當(dāng)進(jìn)入模擬仿真界面后,按“全速”F5或“單步”F10調(diào)試鍵后,在“command”窗口中將會(huì)出現(xiàn)類似如下的錯(cuò)誤提示:“***error 65: access violation at 0x40023800 : no ′read′ permission”,意思是在地址0x40023800處訪問(wèn)違例,沒(méi)有“讀”的權(quán)限。地址0x40023800是外設(shè)寄存器地址。要使外設(shè)寄存器地址具有相應(yīng)的“讀”、“寫(xiě)”、“執(zhí)行”權(quán)限,可在命令窗口中輸入MAP命令(不區(qū)分大小寫(xiě))。命令格式為:
  MAP 起始地址,結(jié)束地址 READ WRITE EXEC其中,READ表示“讀”權(quán)限,WRITE表示“寫(xiě)”權(quán)限,EXEC表示“執(zhí)行”權(quán)限,結(jié)束地址與起始地址的空間尺寸不超過(guò)128 MB,即不超過(guò)0x08000000字節(jié)。外設(shè)寄存器的存儲(chǔ)空間分布較廣,不可能在每次調(diào)試時(shí)都通過(guò)命令窗口輸入MAP指令,可通過(guò)如下的操作步驟進(jìn)行。
①新建一個(gè)文本文件,打開(kāi)該文件,執(zhí)行文件菜單命令“另存為”,在打開(kāi)的“另存為”對(duì)話框中,文件名輸入為initmap.ini,保存類型選擇為“所有文件”,并保存。在文件中輸入如下內(nèi)容并保存:
map 0x40000000,0x47ffffffreadwrite
map 0x50000000,0x57ffffffreadwrite
map 0xa0000000,0xa7ffffffreadwrite
map 0xf0000000,0xf7f00000 readwrite
根據(jù)需要,可在該文件中輸入包含所有外設(shè)寄存器的MAP命令,使所有外設(shè)寄存器都具有“讀”、“寫(xiě)”權(quán)限。但注意映射空間不要超過(guò)0x08000000,否則調(diào)試時(shí)會(huì)提示錯(cuò)誤:“***error 129: MapMemmap size truncated to 128MB”。
②單擊,打開(kāi)“Options”對(duì)話框,切換到“Debug”,在“Initialization File”的右邊單擊,打開(kāi)“選擇仿真初始化文件”對(duì)話框,選擇上一步保存的initmap.ini文件。單擊“Edit”按扭,可打開(kāi)文件再次修改。
3 中斷服務(wù)程序的執(zhí)行與觸發(fā)
  當(dāng)解決以上的兩個(gè)問(wèn)題后,可以進(jìn)行模擬仿真調(diào)試。但這時(shí)中斷服務(wù)程序不能執(zhí)行,如系統(tǒng)定時(shí)中斷程序;或者不能觸發(fā)中斷,如不能自動(dòng)觸發(fā)SPI中斷程序等。由于已經(jīng)把Flash存儲(chǔ)器的起始地址調(diào)到了0x00000000處,所以也需要把中斷向量偏移量地址設(shè)為0x00000000,即把SCB-﹥VTOR設(shè)為0??赏ㄟ^(guò)如下方法解決。
①對(duì)于通過(guò)訪問(wèn)SCB-﹥VTOR寄存器來(lái)修改中斷向量的,可通過(guò)“Edit”菜單命令中的“Find in Files”命令查找SCB-﹥VTOR,查找并修改宏定義FLASH_BASE的值為0X00000000。
②如果不能通過(guò)以上的方法修改SCB-﹥VTOR,可以在進(jìn)入仿真界面后,執(zhí)行中斷程序前,選擇“Peripherals”→“Core Peripherals”→“Nested Vectored Interrupt Controller”命令,打開(kāi)中斷向量對(duì)話框,修改VTO的值為0x00000000。當(dāng)然也可以通過(guò)如下的方法完成對(duì)外設(shè)寄存器SCB-﹥VTOR的修改,使它的值為0x00000000:當(dāng)進(jìn)入仿真后,在主函數(shù)main()前設(shè)置一個(gè)斷點(diǎn),全速運(yùn)行程序,程序在斷點(diǎn)處暫停執(zhí)行,通過(guò)下節(jié)介紹的方法把外設(shè)寄存器SCB-﹥VTOR添加到觀察窗口1,修改SCB-﹥VTOR外設(shè)寄存器的值,使它的值為0x00000000即可。
③對(duì)于SysTick定時(shí)器,可以自動(dòng)觸發(fā)中斷,并執(zhí)行中斷程序,但對(duì)于其他的中斷則不能自動(dòng)觸發(fā)中斷??砂慈缦路椒ú僮鳎涸谥袛喑绦蛑性O(shè)一個(gè)斷點(diǎn),并“全速”運(yùn)行程序,通過(guò)選擇“Peripherals”→“Core Peripherals”→“Nested Vectored Interrupt Controller”命令,打開(kāi)中斷向量對(duì)話框,單擊選擇相應(yīng)的中斷,然后勾選Pending復(fù)選框,此時(shí)會(huì)自動(dòng)執(zhí)行相應(yīng)的中斷服務(wù)程序,并在斷點(diǎn)處暫停執(zhí)行程序。
4 外設(shè)寄存器的修改
  在模擬仿真時(shí),一般要對(duì)外設(shè)寄存器進(jìn)行修改,有些外設(shè)寄存器可直接修改,有些外設(shè)寄存器不能直接修改,如只讀位不能直接修改。要實(shí)現(xiàn)對(duì)外設(shè)寄存器的修改,可通過(guò)如下的方法進(jìn)行操作。
①對(duì)于要修改的寄存器,可通過(guò)鼠標(biāo)選擇外設(shè)寄存器,如選擇RCC-﹥CR,然后再鼠標(biāo)右鍵,彈出右鍵菜單,執(zhí)行“Add‘RCC-﹥CR ’to…”→“Watch 1”菜單命令,把RCC-﹥CR外設(shè)寄存器添加到觀察窗口1中,如下所示。
  此時(shí)可在編輯框中修改該外設(shè)寄存器的值。當(dāng)然也可在觀察窗口中,直接輸入外設(shè)寄存器的名稱“RCC-﹥CR”,但此種方法對(duì)某些芯片會(huì)失效。
②用以上方法也不能完成外設(shè)寄存器的修改時(shí),可通過(guò)如下方法完成修改。停止仿真,單擊,打開(kāi)“Options”對(duì)話框,切換到“Target”選項(xiàng)卡,確保特殊功能寄存器(sfr)文件已被添加。然后單擊的下拉箭頭,選擇并添加所要觀察的外設(shè),如RCC等,可添加觀察多個(gè)外設(shè)。單擊添加的外設(shè)寄存器,可在下方顯示該外設(shè)寄存器的存儲(chǔ)器地址,如RCC-﹥CR外設(shè)寄存器的地址為0x40023800。最后再選擇“ View”→“Memory Windows”→“Memory 1”打開(kāi)存儲(chǔ)器觀察窗口,在地址欄中輸入地址“0x40023800”,按回車(chē)鍵確認(rèn)輸入,在數(shù)據(jù)區(qū)雙擊數(shù)據(jù)可直接修改。STM32的存儲(chǔ)器采用小端模式,即低地址存放數(shù)據(jù)的低位,高地址存放數(shù)據(jù)的高位。在存儲(chǔ)器窗口中,可通過(guò)右鍵修改顯示方式。
結(jié)語(yǔ)
  目前最新的MDK版本也未能解決在模擬仿真時(shí)出現(xiàn)的上述問(wèn)題,通過(guò)本文介紹的方法則可以解決,這對(duì)于學(xué)習(xí)STM32,以及使用MDK軟件都有一定的幫助。以上介紹的方法是一個(gè)全面的描述,不是所有的芯片都需要通過(guò)以上步驟來(lái)完成,有的只需要部分操作即可完成。

劉勇軍(講師),主要從事單片機(jī)與嵌入式系統(tǒng)方面的研究與教學(xué);楊選成(講師),主要從事電路系統(tǒng)方面的研究與教學(xué)。


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉