日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 單片機
[導讀]引言  MDK軟件在模擬仿真時,不能很好地支持各種STM32系列芯片,目前對STM32F103系列芯片支持模擬仿真,但對于其他系列芯片不支持或只是部分支持。主要存在的問題是:PC和SP不能自動裝載,存儲器不能訪問,中斷服務

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

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


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

在嵌入式開發(fā)中,STM32的時鐘系統(tǒng)因其靈活性和復雜性成為開發(fā)者關注的焦點。然而,看似簡單的時鐘配置背后,隱藏著諸多易被忽視的陷阱,輕則導致系統(tǒng)不穩(wěn)定,重則引發(fā)硬件損壞。本文從時鐘源選擇、PLL配置、總線時鐘分配等關鍵環(huán)...

關鍵字: STM32 時鐘系統(tǒng)

在嵌入式系統(tǒng)開發(fā)中,STM32系列微控制器的內部溫度傳感器因其低成本、高集成度特性,廣泛應用于設備自檢、環(huán)境監(jiān)測等場景。然而,受芯片工藝差異和電源噪聲影響,其原始數據存在±1.5℃的固有誤差。本文從硬件配置、校準算法、軟...

關鍵字: STM32 溫度傳感器

在能源效率與智能化需求雙重驅動下,AC-DC轉換器的數字控制技術正經歷從傳統(tǒng)模擬方案向全數字架構的深刻變革?;赟TM32微控制器的PFM(脈沖頻率調制)+PWM(脈沖寬度調制)混合調制策略,結合動態(tài)電壓調整(Dynam...

關鍵字: AC-DC STM32

當前智能家居產品需求不斷增長 ,在這一背景下 ,對現(xiàn)有澆花裝置缺陷進行了改進 ,設計出基于STM32單片機的全 自動家用澆花機器人。該設計主要由機械結構和控制系統(tǒng)構成 ,機械結構通過麥克納姆輪底盤與噴灑裝置的結合實現(xiàn)機器...

關鍵字: STM32 麥克納姆輪 安全可靠 通過性強

用c++編程似乎是讓你的Arduino項目起步的障礙嗎?您想要一種更直觀的微控制器編程方式嗎?那你需要了解一下Visuino!這個圖形化編程平臺將復雜電子項目的創(chuàng)建變成了拖動和連接塊的簡單任務。在本文中,我們將帶您完成使...

關鍵字: Visuino Arduino ESP32 STM32

基于STM32與LoRa技術的無線傳感網絡憑借其低功耗、廣覆蓋、抗干擾等特性,成為環(huán)境監(jiān)測、工業(yè)自動化等場景的核心解決方案。然而,如何在復雜電磁環(huán)境中實現(xiàn)高效休眠調度與動態(tài)信道優(yōu)化,成為提升網絡能效與可靠性的關鍵挑戰(zhàn)。本...

關鍵字: STM32 LoRa

在實時控制系統(tǒng)、高速通信協(xié)議處理及高精度數據采集等對時間敏感的應用場景中,中斷響應延遲的優(yōu)化直接決定了系統(tǒng)的可靠性與性能上限。STM32系列微控制器憑借其靈活的嵌套向量中斷控制器(NVIC)、多通道直接內存訪問(DMA)...

關鍵字: STM32 DMA

數字電源技術向高功率密度、高效率與高動態(tài)響應方向加速演進,STM32微控制器憑借其基于DSP庫的算法加速能力與對LLC諧振變換器的精準控制架構,成為優(yōu)化電源動態(tài)性能的核心平臺。相較于傳統(tǒng)模擬控制或通用型數字控制器,STM...

關鍵字: STM32 數字電源

STM32微控制器憑借其針對電機控制場景的深度優(yōu)化,成為高精度、高可靠性驅動系統(tǒng)的核心選擇。相較于通用型MCU,STM32在電機控制領域的核心優(yōu)勢集中體現(xiàn)在FOC(磁場定向控制)算法的硬件加速引擎與PWM死區(qū)時間的動態(tài)補...

關鍵字: STM32 電機控制

無線充電技術加速滲透消費電子與汽車電子領域,基于Qi協(xié)議的無線充電發(fā)射端開發(fā)成為智能設備能量補給的核心課題。傳統(tǒng)模擬控制方案存在響應滯后、參數調整困難等問題,而基于STM32的數字PID控制結合FOD(Foreign O...

關鍵字: STM32 無線充電
關閉