chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32F0芯片內(nèi)不同程序區(qū)的跳轉(zhuǎn)問(wèn)題交流與介紹

茶話(huà)MCU ? 來(lái)源:未知 ? 作者:李倩 ? 2018-07-16 14:30 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

??對(duì)于STM32用戶(hù),經(jīng)常會(huì)涉及到通過(guò)用戶(hù)啟動(dòng)程序?qū)崿F(xiàn)對(duì)用戶(hù)應(yīng)用程序的更新升級(jí)。一般來(lái)講,用戶(hù)啟動(dòng)程序主要用來(lái)跟外界通信,獲取新的用戶(hù)程序代碼并實(shí)現(xiàn)對(duì)用戶(hù)代碼區(qū)的應(yīng)用程序升級(jí)。用戶(hù)應(yīng)用程序是指實(shí)現(xiàn)各種用戶(hù)功能的代碼。在這個(gè)過(guò)程中,往往需要做從用戶(hù)引導(dǎo)程序區(qū)到用戶(hù)應(yīng)用程序區(qū)的跳轉(zhuǎn),有時(shí)可能還需實(shí)現(xiàn)從用戶(hù)應(yīng)用程序區(qū)跳回到用戶(hù)啟動(dòng)程序區(qū),或者不同用戶(hù)程序區(qū)的互相跳轉(zhuǎn)等操作。在這些跳轉(zhuǎn)過(guò)程中,往往有人在此遇到阻礙,破費(fèi)周折,尤其是在使用基于cortex M0內(nèi)核的STM32F0做IAP應(yīng)用時(shí),這個(gè)過(guò)程跟其它基于CORTEX M3/M4/M7內(nèi)核的STM32系列相比,操作上不太一樣,實(shí)現(xiàn)起來(lái)稍微復(fù)雜些。

這里就STM32F0芯片內(nèi)不同程序區(qū)的跳轉(zhuǎn)問(wèn)題做些交流與介紹,限于篇幅,僅直接介紹具體操作和注意事項(xiàng),不做過(guò)多拓展。相關(guān)知識(shí)點(diǎn)可閱讀STM32芯片參考手冊(cè)、STM32相關(guān)ARM內(nèi)核編程手冊(cè)。

?下面介紹中提及的集成編譯環(huán)境是指ARM MDK,硬件基于STM32F072RB Nucleo開(kāi)發(fā)板。后面我將逐一介紹從BOOT區(qū)【用戶(hù)啟動(dòng)程序區(qū)】跳轉(zhuǎn)到APP區(qū)【用戶(hù)應(yīng)用程序區(qū)】,從APP區(qū)跳轉(zhuǎn)到另外新APP區(qū)以及從APP區(qū)跳回BOOT區(qū)的基本流程及注意事項(xiàng)。

一般來(lái)講,不同區(qū)段的執(zhí)行代碼我們通過(guò)建立不同的工程項(xiàng)目來(lái)實(shí)現(xiàn),最終將不同區(qū)段執(zhí)行代碼寫(xiě)入芯片。這里假定用戶(hù)BOOT區(qū)對(duì)應(yīng)的內(nèi)部FLASH地址段為0x8000000—0x8004000, 用戶(hù)APP1區(qū)對(duì)應(yīng)的內(nèi)部FLASH地址段為0x8004000—0x8008000, APP2區(qū)對(duì)應(yīng)的內(nèi)部FLASH地址段為0x8008000—0x800C000.

一、從用戶(hù)啟動(dòng)程序區(qū)【BOOT區(qū)】到用戶(hù)應(yīng)用程序區(qū)【APP區(qū)】的跳轉(zhuǎn)

先說(shuō)從BOOT區(qū)跳轉(zhuǎn)到APP區(qū)。跳轉(zhuǎn)代碼比較簡(jiǎn)潔、簡(jiǎn)單,注意跳轉(zhuǎn)前要關(guān)閉剛才程序區(qū)開(kāi)啟過(guò)的所有中斷使能,保證所有中斷請(qǐng)求位都被清除,不要只是簡(jiǎn)單的關(guān)閉總中斷,否則往往隱患多多。BOOT區(qū)相關(guān)跳轉(zhuǎn)代碼如下:

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

IROM1的配置就是APP1代碼擺放的起始空間地址及長(zhǎng)度。IRAM的配置要注意先保留48個(gè)字的空間用來(lái)存放中斷矢量表的內(nèi)容。因?yàn)閟tm32F0芯片的中斷矢量表的大小就是48個(gè)字【即0xc0字節(jié)】。至于剩下的內(nèi)部RAM空間大小由芯片本身的RAM容量決定?!具@里是基于STM32F072RB芯片,其內(nèi)部RAM總?cè)萘繛?x4000】。

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

基于MDK環(huán)境的相關(guān)參考代碼如下:

上面代碼中綠色語(yǔ)句就是實(shí)現(xiàn)中斷矢量表從內(nèi)部flash到內(nèi)部RAM的拷貝,而紅色語(yǔ)句則是為了實(shí)現(xiàn)程序0地址執(zhí)行域的重映射,即將程序運(yùn)行的0地址從內(nèi)部flash的0x8000000通過(guò)重映射機(jī)制切換到0x20000000,為的是在APP1區(qū)發(fā)生中斷時(shí)CPU能從正確的地方準(zhǔn)確獲取相應(yīng)中斷矢量地址去執(zhí)行中斷服務(wù)程序。

到此,從BOOT區(qū)到APP1區(qū)的跳轉(zhuǎn)就算完成了。

二、從一用戶(hù)應(yīng)用程序區(qū)【APP區(qū)】到另一用戶(hù)應(yīng)用程序區(qū)【APP區(qū)】的跳轉(zhuǎn)

那么,如果想從APP1區(qū)跳轉(zhuǎn)到另外APP2代碼區(qū)呢?這個(gè)跟從BOOT區(qū)跳轉(zhuǎn)到APP1區(qū)類(lèi)似。在APP1區(qū)的跳轉(zhuǎn)代碼這里就不說(shuō)了,地址給對(duì)、代碼寫(xiě)對(duì)就好。APP2區(qū)的代碼也同樣必須做中斷矢量表的拷貝和0地址域的重映射。這里因?yàn)樵贏PP1代碼里已經(jīng)做過(guò)了0地址的重映射,所以就不必重復(fù)做重映射了,只需做拷貝操作,即將從0x8008000開(kāi)始的48個(gè)字拷貝進(jìn)0x20000000開(kāi)始的RAM空間。

假定APP2代碼區(qū)的內(nèi)部flash空間安排在為0x8008000—0x800C000。MDK環(huán)境里memory布局配置如下:

三、從用戶(hù)應(yīng)用程序區(qū)【APP區(qū)】到用戶(hù)啟動(dòng)程序區(qū)【BOOT區(qū)】的跳轉(zhuǎn)

有時(shí)我們還希望或需要程序能從APP區(qū)跳回用戶(hù)BOOT區(qū),那如何操作呢?對(duì)于STM32F0芯片而言,程序執(zhí)行區(qū)從APP區(qū)跳回BOOT區(qū)跟從BOOT區(qū)跳到APP區(qū)還不太一樣,經(jīng)常有人在這個(gè)跳轉(zhuǎn)過(guò)程中卡殼。

假設(shè)從APP2區(qū)跳回BOOT區(qū),在APP2區(qū)做跳轉(zhuǎn)準(zhǔn)備時(shí)除了給定正確的跳轉(zhuǎn)地址外,另一個(gè)要做的就是再次通過(guò)重映射操作將0地址映射空間從內(nèi)部SRAM切換回內(nèi)部flash區(qū)。實(shí)際應(yīng)用中,往往因?yàn)楹鲆暳诉@點(diǎn),跳回去后一碰到中斷就問(wèn)題來(lái)了。另外,從APP區(qū)跳回BOOT區(qū)無(wú)須矢量表的拷貝操作。所以在APP2區(qū)執(zhí)行跳轉(zhuǎn)前只需將0地址重映射回內(nèi)部flash空間,通過(guò)運(yùn)行如下庫(kù)代碼完成:__HAL_SYSCFG_REMAPMEMORY_FLASH();

小結(jié):

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

2、從APP區(qū)跳轉(zhuǎn)到其它新的APP區(qū),需在新的APP區(qū)的代碼里再做中斷矢量表的拷貝,并保證相關(guān)存儲(chǔ)配置的正確。

3、從APP區(qū)跳回BOOT區(qū),該過(guò)程無(wú)矢量表的拷貝,只需將0地址映射空間重新映射回內(nèi)部flash區(qū)。

4、不論從什么區(qū)跳往什么區(qū),跳轉(zhuǎn)前禁用當(dāng)前用戶(hù)打開(kāi)過(guò)的所有中斷使能、并確保無(wú)未處理的中斷請(qǐng)求存在。

5、以上操作流程主要針對(duì)基于ARM Cortex M0內(nèi)核的STM32F0系列芯片。

聲明:本文內(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)注

    關(guān)注

    462

    文章

    53500

    瀏覽量

    458609
  • RAM
    RAM
    +關(guān)注

    關(guān)注

    8

    文章

    1398

    瀏覽量

    119773
  • STM32F0
    +關(guān)注

    關(guān)注

    0

    文章

    61

    瀏覽量

    17736

原文標(biāo)題:STM32F0 IAP應(yīng)用中不同代碼區(qū)的跳轉(zhuǎn)話(huà)題

文章出處:【微信號(hào):stmcu832,微信公眾號(hào):茶話(huà)MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    STM32F0不同代碼區(qū)跳轉(zhuǎn)時(shí)總失敗…這些操作你做對(duì)了嗎?

    STMCU官網(wǎng)更新了一則實(shí)戰(zhàn)經(jīng)驗(yàn)文件,文章以STM32F0為例,就芯片內(nèi)【從BOOT區(qū)跳轉(zhuǎn)到APP區(qū)
    發(fā)表于 06-25 15:28

    STM32F0技術(shù)介紹及對(duì)比

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

    STM32F0硬件開(kāi)發(fā)入門(mén)

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

    STM32F0系列產(chǎn)品簡(jiǎn)介

    STM32F0系列產(chǎn)品簡(jiǎn)介
    發(fā)表于 09-29 15:13 ?22次下載

    STM32F0系列概覽

    STM32F0系列是基于Cortex-M0內(nèi)核的32位入門(mén)級(jí)產(chǎn)品系列,沿用現(xiàn)有STM32優(yōu)異基因,針對(duì)8位MCU市場(chǎng),為成本敏感型應(yīng)用而設(shè)計(jì)的。 STM32F0 總覽
    發(fā)表于 11-29 18:13 ?4819次閱讀
     <b class='flag-5'>STM32F0</b>系列概覽

    使用Coocox建立STM32F0項(xiàng)目

    使用Coocox建立基于STM32F0 Discovery的項(xiàng)目
    的頭像 發(fā)表于 07-06 02:09 ?3809次閱讀
    使用Coocox建立<b class='flag-5'>STM32F0</b>項(xiàng)目

    關(guān)于STM32F0講座:內(nèi)核

    STM32F0產(chǎn)品技術(shù)講座:第一節(jié) 內(nèi)核
    的頭像 發(fā)表于 07-05 00:15 ?4496次閱讀

    STM32F0—電源控制

    STM32F0—電源控制(開(kāi)關(guān)電源技術(shù)與設(shè)計(jì) 潘永雄pdf)-電源控制 PWR
    發(fā)表于 09-29 18:29 ?50次下載
    <b class='flag-5'>STM32F0</b>—電源控制

    stm32f0 discovery開(kāi)發(fā)包

    stm32f0 discovery開(kāi)發(fā)包分享
    發(fā)表于 09-07 15:30 ?11次下載

    AN5145_從STM32F0系列到 STM32G0 系列的應(yīng)用移手冊(cè)

    AN5145_從STM32F0系列到 STM32G0 系列的應(yīng)用移手冊(cè)
    發(fā)表于 11-21 17:06 ?14次下載
    AN5145_從<b class='flag-5'>STM32F0</b>系列到 <b class='flag-5'>STM32G0</b> 系列的應(yīng)用移手冊(cè)

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

    AN4088_STM32F1和STM32F0系列微控制器之間的芯片替換
    發(fā)表于 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的軟件移植
    發(fā)表于 11-21 17:06 ?5次下載
    AN4617_從<b class='flag-5'>STM32F0</b>到<b class='flag-5'>STM32L0</b>的軟件移植

    UM1779_STM32CubeF0入門(mén)之STM32F0系列

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

    STM32F0—電源控制

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

    為什么STM32F0系列芯片里面沒(méi)有VTOR

    為什么基于STM32G0STM32L0系列芯片里有VTOR而STM32F0系列又沒(méi)有? 用過(guò)STM32G0
    的頭像 發(fā)表于 09-09 15:40 ?2432次閱讀
    為什么<b class='flag-5'>STM32F0</b>系列<b class='flag-5'>芯片</b>里面沒(méi)有VTOR