stm32 內部sram大小_在SRAM、FLASH中調試代碼的配置方法(附詳細步驟)

聊天界面發送嵌入式大雜燴獲取1TB大雜燴資料包

STM32的FLASH擦寫次數有限(大概為1萬次),所以為了延長FLASH的使用時間,我們平時調試時可以選擇在SRAM中進行硬件調試。除此之外,SRAM 存儲器的寫入速度比在內部 FLASH 中要快得多,所以下載程序到SRAM中的速度較快。

所以我們很有必要建立兩個版本的工程配置,在SRAM中調試程序完畢后,再把代碼下載到FLASH中即可。這篇筆記主要分享在keil5中配置FLASH調試與SRAM調試的詳細配置方法及如何切換兩種配置。

本篇筆記以STM32F103ZET6為例。其FLASH大小為512KB,SRAM的大小為64KB。FLASH基地址為0x08000000,SRAM基地址為0x20000000。在STM32F10XXX里,可以通過BOOT1、BOOT0引腳來選擇三種不同的模式:

a21d13d414b497319ddf4f161ae6409f.png

我們要在FLASH中進行硬件仿真調試還是在RAM中進行硬件仿真調試需要對這兩個boot腳進行對應的設置以及程序下載的地址進行設置。

在FLASH中進行硬件仿真調試

1、硬件設置

BOOT0配置為0,BOOT1隨意設置。

2、keil設置

本文以keil5為例。步驟如下:

(1)點擊如下按鈕,修改target的名稱:

43f5454ccdc12105e1c7f7c6411b7c1c.png

78edaa8928db881b220e3c5821f43400.png

target的名稱是可以隨意更改的,這里我們改為FLASH。

(2)點擊Project->Options for Target Flash...(也可以點擊魔術棒那個圖標)進行配置。首先對Target選項卡設置:

faf7377005b7fe1a95d9f108da5e5762.png

設置IROM1的起始地址為0x8000000,大小為0x80000,即FLASH的基地址與大小。設置IRAM1為0x20000000,大小為0x10000,即SRAM的基地址與大小。

(3)Debug選項設置:

e638e8ae8628275bb8b2e921d3d073b5.png

調試器根據實際進行選擇,我們這里使用的調試器是ULINK2。其它的按默認設置即可,然后點擊Settings:

a9041c5e8c3d7729899e85f7dc893e27.png

8bd71dbe5e41bb347f6bd096abc51b1f.png

0c1232c88f67e73b190b77a69033c3d0.png

2a8d0c6cc5462be5535b7fe7b6969d13.png

(4)編譯,然后按Ctrl+F5進入調試界面:

44789fa79553400307add04cdcf277fc.png

然后點擊全速運行:

0f9444639c7b433e4075014a2a9dee7f.png

在Disassembly窗口中可看到地址為0x0800xxxx,說明代碼燒進了FLASH中,這時候就可以像使用其他C語言IDE調試C語言程序一樣打斷點、單步運行我們的STM32程序啦。

在SRAM中進行硬件仿真調試

在SRAM的仿真調試配置比FLASH中的配置要麻煩一點~

1、硬件設置

BOOT0配置為1,BOOT1配置為1。

2、keil設置

(1)新建一個target,并修改名稱為SRAM:

55c0e8c556677970474d6e39fe70b125.png

(2)切換至SRAM Target

4e7c06090acf99318c2bf213e91f3a0b.png

(3)點擊Project->Options for Target SRAM ...(也可以點擊魔術棒那個圖標)Target選項卡設置:

cdc566084bc634dadd8613dbeb33b04a.png

設置IROM1的起始地址為0x2000000,大小為0x8000(32KB);設置IRAM1的起始地址為0x2008000,大小為0x8000(32KB)。即把64KB的SRAM分為32KB的FLASH(當然這是SRAM虛擬出來的FLASH,掉電易失)和32KB的RAM。

(4)C/C++選項設置:

2dce079e4d42c62913f7fef3328cd61f.png

為什么在RAM中調試要設置這個宏而在FLASH中調試卻不需要?這是因為我們的中斷向量表默認位于FLASH中,而此時我們要在RAM中進行調試,所以需要把中斷向量表拷貝到RAM中,相關代碼在system_stm32f10x.cSystemInit函數中:

11aa2c3a9b4060d09e07a6dbb863ed9b.png

其實system_stm32f10x.c文件中也有宏VECT_TAB_SRAM相關的代碼:

72b5ab7ef15b65ed4fb4b21be285fce4.png

把這行代碼打開即可把中斷向量表拷貝到RAM中。但是這里選擇在C/C++選項選項里添加宏,因為這樣可以保證SRAM版本與FLASH版本代碼的一致性。

(5)Debug設置:

與在FLASH中調試不同的是,這里需要加入.ini文件:

e7755562605200c366c494ba3574ae21.png

這個.ini可以自己創建(也可以在芯片支持包里找到),這里我們建為Dbg_RAM.ini。文件里的內容如下:

d8f0f6c7112ab9bece4cc5bb668bc3f4.png

其中這里的第11行是需要根據實際進行修改的,需要把工程編譯得出的.axf格式文件的路徑及其文件名填到這里。這里因為我們這里的的.ini文件在.axf的上一級目錄:

b912eca3ad859b419b5daf0c336818d9.png

所以此處以./Objects來表示。如果覺得麻煩的話,可以把.axf文件與.ini放在同一個目錄下。

其它的按默認設置即可,然后點擊Settings,并進行如下設置:

ddb4f54c4da187786097bb218efbc572.png

圖中我們需要勾選Verify Code DownloadDownload to FLASH選項,也就是說點擊調試按鈕后,本工程的程序會被下載到內部 SRAM 中,只有勾選了這兩個選項才能正常仿真。(至于為什么 FLASH 版本的程序不需要勾選,不太清楚) 。

f38b498f5d6d9cb94346334c4cf233a7.png

Download Function中的擦除選項配置為Do not Erase。這是因為數據寫入到內部 SRAM 中不需要像 FLASH 那樣先擦除后寫入。Programming Algorithm 的地址要與我們Target選項卡里設置的地址一致,否則可能會出現如下錯誤:

93b41482dff8c79856ea2696f87e9df9.png

(6)編譯,然后按Ctrl+F5進入調試界面,然后點擊全速運行:

3b29f99bf1f440bbcc9eab5efc714725.png

在Disassembly窗口中可看到地址為0x2000xxxx,說明代碼燒進了SRAM中,這時候就可以像使用其他C語言IDE調試C語言程序一樣打斷點、單步運行我們的STM32程序啦。

以上就是在FLASH中調試與在SRAM中調試的設置方法,調試代碼時可以選擇SRAM版本的配置,調試完成再切換回FLASH版本的配置,把程序下載到FLASH中。切換方法:

4e7c06090acf99318c2bf213e91f3a0b.png

在RAM中調試的優缺點

以下來自《【野火】零死角玩轉STM32—F429挑戰者V2.pdf》。

優點:

1、載程序非常快。RAM 存儲器的寫入速度比在內部 FLASH 中要快得多,且沒有擦除過程,因此在 RAM 上調試程序時程序幾乎是秒下的,對于需要頻繁改動代碼的調試過程,能節約很多時間,省去了煩人的擦除與寫入 FLASH 過程。另外,STM32 的內部 FLASH 可擦除次數為 1 萬次,雖然一般的調試過程都不會擦除這么多次導致 FLASH 失效,但這確實也是一個考慮使用 RAM 的因素。

2、不改寫內部 FLASH 的原有程序。

3、對于內部 FLASH 被鎖定的芯片,可以把解鎖程序下載到 RAM 上,進行解鎖。

缺點:

1、存儲在 RAM 上的程序掉電后會丟失,不能像 FLASH 那樣保存。

2、SRAM空間較小。

以上就是本次分享的關于RAM調試與FLASH調試的筆記,更多的相關原理、細節可查閱《【野火】零死角玩轉STM32—F429挑戰者V2.pdf》。

可在本公眾號聊天界面回復關鍵字:調試,進行獲取本筆記對應的keil工程及《【野火】零死角玩轉STM32—F429挑戰者V2.pdf》。本篇筆記如有錯誤歡迎指出!謝謝

猜你喜歡:

STM32的ISP下載的原理是什么呢?

STM32串口IAP分享

C語言代碼優化的一些技巧(四)

【DSP筆記】TI官方例程中切換RAM、FLASH工程版本的方法

我的個人博客:

https://zhengnianli.github.io

等你來撩:

聊天界面發送嵌入式大雜燴獲取1T大雜燴資料包

聊天界面發送m獲取往期筆記目錄

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371866.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371866.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371866.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring Profile模式示例

最近,我們介紹了Spring Profiles的概念。 此概念是針對不同部署環境的輕松配置區分符。 直接的用例(已提出)是對相關類進行注釋,以便Spring根據活動的配置文件加載適當的類。 但是,這種方法可能并不總是適用于常見的…

Android 樣式 (style) 和主題(theme)

轉載:https://gold.xitu.io/post/58441c48c59e0d0056a30bc2 樣式和主題 樣式是指為 View 或窗口指定外觀和格式的屬性集合。樣式可以指定高度、填充、字體顏色、字號、背景色等許多屬性。 樣式是在與指定布局的 XML 不同的 XML 資源中進行定義。 Android 中的樣式與…

自定義控件_VIewPager顯示多個Item

一直以來想搞明白這個不完全的VIewPager是怎么做到的&#xff0c;有幸看到這片篇文章 有二種實現方法 1.設置的屬性 1.clipChildren屬性 2.setPageMargin 3.更新Item外界面 2.重寫getPageWidth public class MultiplePagerAdapter extends PagerAdapter { private List<I…

華為怎么改輸入法皮膚_微信和QQ個性鍵盤皮膚

hello大家好&#xff0c;今天是2019年1月1號&#xff0c;祝大家新年快樂今天是新年的第一天&#xff0c;所以說給大家介紹一個好玩的&#xff0c;微信和QQ都能設置的個性的鍵盤皮膚&#xff0c;看下圖&#xff0c;這樣的個性的鍵盤主題怎么設置呢&#xff1f;其實很簡單&#x…

EasyMock教程–入門

在本文中&#xff0c;我將向您展示EasyMock是什么&#xff0c;以及如何使用它來測試Java應用程序。 為此&#xff0c;我將創建一個簡單的Portfolio應用程序&#xff0c;并使用JUnit&#xff06;EasyMock庫對其進行測試。 在開始之前&#xff0c;讓我們首先了解使用EasyMock的需…

synchronized內置鎖

synchronized內置鎖&#xff0c;如果發生阻塞&#xff0c;無法被中斷&#xff0c;除非關閉jvm.因此不能從死鎖中恢復。轉載于:https://www.cnblogs.com/paulbai/p/6163250.html

如何加快Json 序列化?有哪些方法?

1、使用阿里的fastjson 2、可以通過去除不必要屬性加快序列化。如person對象&#xff0c;有id&#xff0c;name&#xff0c;address&#xff0c;我json需要用戶姓名&#xff0c;此時序列化的時候就只序列化name&#xff0c;id和address不序列化。轉載于:https://www.cnblogs.co…

用金萬維怎么設置路由器_家用路由器怎么設置 家庭路由器設置方法【圖文】...

這里以TP-link的無線路由器為例&#xff0c;教一下怎么調試路由器上網。準備工具:網線兩條&#xff0c;電腦或者手機&#xff0c;用手機的話就不需要用網線了1、用網線連接光纖貓與路由器&#xff0c;光貓的LAN1口與路由器的WAN相連。路由器的LAN任意一個口用網線連接電腦。2、…

Liferay –簡單主題開發

實際上&#xff0c;Liferay的6.1版本已經走了很長一段路&#xff0c;該版本完全支持JSF和IceFaces。 我的目標是使它成為我們團隊中的標準協作工具&#xff0c;因此我仍在嘗試學習它的精髓。 好的軟件應用程序可以解決問題&#xff0c;但是好的軟件應用程序不僅可以解決問題&am…

springmvc初步配置

導包/添加依賴&#xff1a;<dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>4.0.2.RELEASE</version> </dependency> <dependency> <groupId>org.springfram…

獲取用戶地理位置

1、利用h5 屬性獲取用戶地理位置 h5的新增屬性是支持用戶獲取地理位置的特別是手機&#xff0c;支持的情況會更好。具體寫法如下 // 定位功能getLocation () {if (navigator.geolocation) {navigator.geolocation.getCurrentPosition(showPosition, showError);} else {alert(瀏…

行號 設置vim_在VSCode里面配置Vim正確姿勢(細節解析)

一、導論對于不用vim的人來說&#xff0c;vim簡直是個噩夢&#xff0c;復雜的指令、丑陋的界面、令人頭痛的配置文件&#xff0c;任何一項都足以勸退一大波人&#xff0c;但是對于已經習慣了使用vim的人來說&#xff0c;vim簡直就是馬良神筆&#xff0c;似乎vim除了生孩子什么都…

使用Spring 3 MVC處理表單驗證

本文是有關Spring 3的系列文章的一部分。該系列的早期文章是使用Spring 3 MVC的Hello World和使用Spring 3 MVC的 Handling Forms 。 現在讓我們更深入地研究Spring。 在本文中&#xff0c;我們將學習驗證從表單中獲取的數據。 讓我們更仔細地看一下驗證任務。 場景1 &#xf…

當事人角色 變更映射策略引起的問題

IBeamMDAA V2版本中&#xff0c;由于變更了 當事人角色 的繼承機制&#xff0c;在添加 當事人角色時&#xff0c;為了 構建 當事人-當事人角色之間的關系&#xff0c;代碼如下&#xff1a;//if (party.PartyRoles ! null && !party.PartyRoles.Contains(sysUser))//{//…

vs xxxxx nuget配置無效

重啟vs轉載于:https://www.cnblogs.com/zinan/p/7080668.html

巡回沙龍_美浮特全國巡回沙龍第一期結束撒花!

科技美膚&#xff0c;無齡煥變。美浮特2019全國美膚巡回沙龍第一期活動圓滿結束&#xff01;優秀的小伙伴&#xff0c;雅致的茶歇環境&#xff0c;精美的甜點小食&#xff0c;理論與體驗并行的膚感測試課堂……不知道是哪一個環節給大家留下了深刻的印象呢&#xff1f;首先讓我…

Spring與網關的集成

這是有關Spring Integration系列的第二篇文章。 本文以我們介紹Spring Integration的第一篇文章為基礎。 上下文設置 在第一篇文章中&#xff0c;我們創建了一個簡單的Java應用程序&#xff0c;其中 通過頻道發送了一條消息&#xff0c; 它被服務&#xff08;即POJO&#xf…

UIAutomation識別UI元素

MS UI Automation&#xff08;Microsoft User Interface Automation&#xff1a;UIA&#xff09;是隨.net framework3.0一起發布的&#xff0c;雖然在如今這個幾乎每天都有各種新名詞、新技術出來的所謂的21世紀&#xff0c;它顯得已經有些過時了。前些日子&#xff0c;正好一個…

【C++第一個Demo】---控制臺RPG游戲3【登陸菜單樹】

【登陸系統--樹結構】 1 首先我這里設計&#xff0c;由一個基類MainMenu構建樹結構&#xff0c;并實現控制臺上菜單之間的切換和返回操作 1 #ifndef _UI_BASE_H_2 #define _UI_BASE_H_3 4 #include <string>5 #include <vector>6 #include"..//Marco.h"7…

不存在_施文忠 | ”存在“與“不存在”——巴蜀文明概論

海德格爾有句名言&#xff1a;“存在者存在&#xff0c;不存在者不存在&#xff01;”四川&#xff0c;一個偉大的存在&#xff0c;偏偏存在于四川的口頭禪卻是“不存在”。在不存在中追求存在&#xff0c;在存在中擺脫存在。六月白鹿鎮&#xff0c;書院學習了《李白與海德格爾…