色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

STM32F0芯片內不同程序區的跳轉問題交流與介紹

茶話MCU ? 來源:未知 ? 作者:李倩 ? 2018-07-16 14:30 ? 次閱讀

??對于STM32用戶,經常會涉及到通過用戶啟動程序實現對用戶應用程序的更新升級。一般來講,用戶啟動程序主要用來跟外界通信,獲取新的用戶程序代碼并實現對用戶代碼區的應用程序升級。用戶應用程序是指實現各種用戶功能的代碼。在這個過程中,往往需要做從用戶引導程序區到用戶應用程序區的跳轉,有時可能還需實現從用戶應用程序區跳回到用戶啟動程序區,或者不同用戶程序區的互相跳轉等操作。在這些跳轉過程中,往往有人在此遇到阻礙,破費周折,尤其是在使用基于cortex M0內核的STM32F0做IAP應用時,這個過程跟其它基于CORTEX M3/M4/M7內核的STM32系列相比,操作上不太一樣,實現起來稍微復雜些。

這里就STM32F0芯片內不同程序區的跳轉問題做些交流與介紹,限于篇幅,僅直接介紹具體操作和注意事項,不做過多拓展。相關知識點可閱讀STM32芯片參考手冊、STM32相關ARM內核編程手冊。

?下面介紹中提及的集成編譯環境是指ARM MDK,硬件基于STM32F072RB Nucleo開發板。后面我將逐一介紹從BOOT區【用戶啟動程序區】跳轉到APP區【用戶應用程序區】,從APP區跳轉到另外新APP區以及從APP區跳回BOOT區的基本流程及注意事項。

一般來講,不同區段的執行代碼我們通過建立不同的工程項目來實現,最終將不同區段執行代碼寫入芯片。這里假定用戶BOOT區對應的內部FLASH地址段為0x8000000—0x8004000, 用戶APP1區對應的內部FLASH地址段為0x8004000—0x8008000, APP2區對應的內部FLASH地址段為0x8008000—0x800C000.

一、從用戶啟動程序區【BOOT區】到用戶應用程序區【APP區】的跳轉

先說從BOOT區跳轉到APP區。跳轉代碼比較簡潔、簡單,注意跳轉前要關閉剛才程序區開啟過的所有中斷使能,保證所有中斷請求位都被清除,不要只是簡單的關閉總中斷,否則往往隱患多多。BOOT區相關跳轉代碼如下:

這個從BOOT區到APP區的跳轉最終能否成功,關鍵取決于APP區代碼相關配置及準備工作。假設這里的APP區是上面提到的APP1區,內部FLASH地址段為0x8004000—0x8008000,那么在MDK的option項里的memory配置板塊要做正確配置,即flash空間與ram空間的配置,如下圖所示:

IROM1的配置就是APP1代碼擺放的起始空間地址及長度。IRAM的配置要注意先保留48個字的空間用來存放中斷矢量表的內容。因為stm32F0芯片的中斷矢量表的大小就是48個字【即0xc0字節】。至于剩下的內部RAM空間大小由芯片本身的RAM容量決定。【這里是基于STM32F072RB芯片,其內部RAM總容量為0x4000】。

另外一件很重要的事情就是做中斷矢量表的拷貝。在APP1區的main()程序開頭部分,將放在flash程序空間起始部分的連續48個中斷矢量地址表拷貝到內部RAM的起始地址段。即將矢量表從0x8004000地址開始拷到0x20000000開始的連續48個字空間。

基于MDK環境的相關參考代碼如下:

上面代碼中綠色語句就是實現中斷矢量表從內部flash到內部RAM的拷貝,而紅色語句則是為了實現程序0地址執行域的重映射,即將程序運行的0地址從內部flash的0x8000000通過重映射機制切換到0x20000000,為的是在APP1區發生中斷時CPU能從正確的地方準確獲取相應中斷矢量地址去執行中斷服務程序。

到此,從BOOT區到APP1區的跳轉就算完成了。

二、從一用戶應用程序區【APP區】到另一用戶應用程序區【APP區】的跳轉

那么,如果想從APP1區跳轉到另外APP2代碼區呢?這個跟從BOOT區跳轉到APP1區類似。在APP1區的跳轉代碼這里就不說了,地址給對、代碼寫對就好。APP2區的代碼也同樣必須做中斷矢量表的拷貝和0地址域的重映射。這里因為在APP1代碼里已經做過了0地址的重映射,所以就不必重復做重映射了,只需做拷貝操作,即將從0x8008000開始的48個字拷貝進0x20000000開始的RAM空間。

假定APP2代碼區的內部flash空間安排在為0x8008000—0x800C000。MDK環境里memory布局配置如下:

三、從用戶應用程序區【APP區】到用戶啟動程序區【BOOT區】的跳轉

有時我們還希望或需要程序能從APP區跳回用戶BOOT區,那如何操作呢?對于STM32F0芯片而言,程序執行區從APP區跳回BOOT區跟從BOOT區跳到APP區還不太一樣,經常有人在這個跳轉過程中卡殼。

假設從APP2區跳回BOOT區,在APP2區做跳轉準備時除了給定正確的跳轉地址外,另一個要做的就是再次通過重映射操作將0地址映射空間從內部SRAM切換回內部flash區。實際應用中,往往因為忽視了這點,跳回去后一碰到中斷就問題來了。另外,從APP區跳回BOOT區無須矢量表的拷貝操作。所以在APP2區執行跳轉前只需將0地址重映射回內部flash空間,通過運行如下庫代碼完成:__HAL_SYSCFG_REMAPMEMORY_FLASH();

小結:

1、從BOOT區跳轉到APP區,在APP區要做中斷矢量表的拷貝和將0地址映射空間從內部flash切換到內部SRAM起始地址。

2、從APP區跳轉到其它新的APP區,需在新的APP區的代碼里再做中斷矢量表的拷貝,并保證相關存儲配置的正確。

3、從APP區跳回BOOT區,該過程無矢量表的拷貝,只需將0地址映射空間重新映射回內部flash區。

4、不論從什么區跳往什么區,跳轉前禁用當前用戶打開過的所有中斷使能、并確保無未處理的中斷請求存在。

5、以上操作流程主要針對基于ARM Cortex M0內核的STM32F0系列芯片。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 芯片
    +關注

    關注

    456

    文章

    51155

    瀏覽量

    426301
  • RAM
    RAM
    +關注

    關注

    8

    文章

    1369

    瀏覽量

    114897
  • STM32F0
    +關注

    關注

    0

    文章

    61

    瀏覽量

    17117

原文標題:STM32F0 IAP應用中不同代碼區的跳轉話題

文章出處:【微信號:stmcu832,微信公眾號:茶話MCU】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    STM32F0不同代碼跳轉時總失敗…這些操作你做對了嗎?

    STMCU官網更新了一則實戰經驗文件,文章以STM32F0為例,就芯片【從BOOT跳轉到APP
    發表于 06-25 15:28

    STM32F0技術介紹及對比

    STM32F0技術介紹及對比手中有利器,方為真英雄。
    發表于 04-29 16:50 ?17次下載

    STM32F0硬件開發入門

    分享一份STM32F0的硬件開發資料
    發表于 12-16 17:23 ?27次下載

    STM32F0系列產品簡介

    STM32F0系列產品簡介
    發表于 09-29 15:13 ?22次下載

    STM32F0系列概覽

    STM32F0系列是基于Cortex-M0內核的32位入門級產品系列,沿用現有STM32優異基因,針對8位MCU市場,為成本敏感型應用而設計的。 STM32F0 總覽
    發表于 11-29 18:13 ?4586次閱讀
     <b class='flag-5'>STM32F0</b>系列概覽

    使用Coocox建立STM32F0項目

    使用Coocox建立基于STM32F0 Discovery的項目
    的頭像 發表于 07-06 02:09 ?3319次閱讀
    使用Coocox建立<b class='flag-5'>STM32F0</b>項目

    關于STM32F0講座:內核

    STM32F0產品技術講座:第一節 內核
    的頭像 發表于 07-05 00:15 ?3961次閱讀

    STM32F0—電源控制

    STM32F0—電源控制(開關電源技術與設計 潘永雄pdf)-電源控制 PWR
    發表于 09-29 18:29 ?50次下載
    <b class='flag-5'>STM32F0</b>—電源控制

    stm32f0 discovery開發包

    stm32f0 discovery開發包分享
    發表于 09-07 15:30 ?11次下載

    AN5145_從STM32F0系列到 STM32G0 系列的應用移手冊

    AN5145_從STM32F0系列到 STM32G0 系列的應用移手冊
    發表于 11-21 17:06 ?13次下載
    AN5145_從<b class='flag-5'>STM32F0</b>系列到 <b class='flag-5'>STM32G0</b> 系列的應用移手冊

    AN4088_STM32F1和STM32F0系列微控制器之間的芯片替換

    AN4088_STM32F1和STM32F0系列微控制器之間的芯片替換
    發表于 11-21 17:06 ?0次下載
    AN4088_<b class='flag-5'>STM32F</b>1和<b class='flag-5'>STM32F0</b>系列微控制器之間的<b class='flag-5'>芯片</b>替換

    AN4617_從STM32F0STM32L0的軟件移植

    AN4617_從STM32F0STM32L0的軟件移植
    發表于 11-21 17:06 ?5次下載
    AN4617_從<b class='flag-5'>STM32F0</b>到<b class='flag-5'>STM32L0</b>的軟件移植

    UM1779_STM32CubeF0入門之STM32F0系列

    UM1779_STM32CubeF0入門之STM32F0系列
    發表于 11-22 08:22 ?9次下載
    UM1779_<b class='flag-5'>STM32CubeF0</b>入門之<b class='flag-5'>STM32F0</b>系列

    STM32F0—電源控制

    電子發燒友網站提供《STM32F0—電源控制.pdf》資料免費下載
    發表于 07-31 14:56 ?0次下載
    <b class='flag-5'>STM32F0</b>—電源控制

    為什么STM32F0系列芯片里面沒有VTOR

    為什么基于STM32G0STM32L0系列芯片里有VTOR而STM32F0系列又沒有? 用過STM32G0
    的頭像 發表于 09-09 15:40 ?1608次閱讀
    為什么<b class='flag-5'>STM32F0</b>系列<b class='flag-5'>芯片</b>里面沒有VTOR
    主站蜘蛛池模板: bt成人社区 | 一级毛片免费下载 | 国产精品久久久久a影院 | 野花韩国高清完整版在线观看5 | 99精品中文字幕在线观看 | 日本艳妓BBW高潮一19 | 97亚洲狠狠色综合久久久久 | 在线观看中文字幕码2021不用下载 | 亚洲伊人久久一次 | 婷婷色色狠狠爱 | 日韩欧美一区二区中文字幕 | 久久久97丨国产人妻熟女 | 电影内射视频免费观看 | 2018三级网站免费观看 | 中文字幕国产视频 | 有码 亚洲 制服 国产 在线 | 九色PORNY真实丨国产免费 | 黑人巨茎大战白人女40CMO | 亚洲视频91 | 日本人吃奶玩奶虐乳 | 亚洲国产精品无码2019 | 晚夜免费禁用十大亏亏 | 4虎影院午夜在线观看 | 日本美女阴道 | 国产盗摄一区二区三区 | 超级碰碰青草久热国产 | 欧美成ee人免费视频 | 日产日韩亚洲欧美综合搜索 | 任你躁精品一区二区三区 | 儿子好妈妈的HD3中字抢劫 | 国产成人高清精品免费5388密 | 校花娇喘呻吟校长陈若雪视频 | 亚洲乱亚洲乱妇13p 亚洲乱色视频在线观看 | 全黄H全肉禁乱公 | 亚洲伊人精品 | 无码日韩人妻精品久久蜜桃免费 | 人妻激情综合久久久久蜜桃 | 受喷汁红肿抽搐磨NP双性 | 夜色爽爽爽久久精品日韩 | 亚洲视频国产在线精品 | 成人精品亚洲 |