1. 程式人生 > >STM32F0xx IAP實現之中斷向量表重定義

STM32F0xx IAP實現之中斷向量表重定義

在STM32F103等cortex-m3/m4核心的微控制器上可以通過設定SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET;該暫存器的值來實現中斷向量表的重定義。但在STM32F0xx系列以cortex-m0為核心的微控制器中卻怎麼也找不到這個設定中斷向量表的暫存器,可以通過以下方法來實現中斷向量表重定義。 基本思想: 1、將中斷向量表放入到RAM的起始地址(只需要在應用程式中保留RAM其實地址的0x100大小不使用即可)。 2、在bootload中將應用程式的中斷向量表從Flash中拷貝到RAM中。 3、設定STM32F0xx中斷向量表位於RAM中,主要用到的暫存器如下:


具體實現程式碼如下: /*
*  Function: void JumpToApp(void)
* Parameter: none
*    Return: none
*/
static void JumpToApp(void)
{
  ApplicationAddress = APP_FLASHADDR;
  if (((*(uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)
  {
    /* Jump to user application */
    m_JumpAddress = *(uint32_t*) (ApplicationAddress + 4);  /*最開頭4個位元組存放MSP的初始值,從這之後的4個位元組存放                                                                                       ResetHandler中斷向量*/
    JumpToApplication = (FunVoidType) m_JumpAddress;

    /* Initialize user application's Stack Pointer */
    __set_MSP(*(uint32_t*) ApplicationAddress);
    JumpToApplication();
  }
} /*
*  Function: void clock_init(void)
* Parameter: none
*    Return: none
*/
int main(void)
{
  memcpy((void*)0x20000000, (void*)APP_FLASHADDR, 0x100);
  SYSCFG->CFGR1 |= 0x03;
 
  JumpToApp();
  while (1);
}

相關推薦

STM32F0xx IAP實現中斷向量定義

在STM32F103等cortex-m3/m4核心的微控制器上可以通過設定SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET;該暫存器的值來實現中斷向量表的重定義。但在STM32F0xx系列以cortex-m0為核心的微控制器中卻怎麼也找

關於STM32的中斷向量對映的問題

1  為什麼要對中斷向量表進行重新對映?               COREM3權威指南上講“然而,為了動態重分發中斷, CM3 允許向量表重定位——從其它地址處開始定位各異常向量。    這些地址對應的區域可以是程式碼區,但也可以是 RAM 區。在 RAM區就可以修改向

中斷向量

i/o primary 網絡接口 line 安全 mar 地址 自舉 lsp 內存地址(十六進制) 對應向量號(十六進制) 中斷用途 BASIC中斷向量 0x3C4 - 0x3FF F1-FF 未使用 0x218 - 0x3C3 86-F0 BASIC程序

9.2 中斷向量的結構

存放位置 line 用途 com cloud 偏移地址 一段 中斷 組成 計算機組成 9 中斷和異常 9.2 中斷向量表的結構 我現在已經知道了,在運算的時候 一旦遇到了異常情況,就翻到第一頁的第一行開始寫的這些操作的指示,開始往下執行。開始往下執行,這就能解決問題了。但

STM32中斷向量偏移地址配置方法

1------------------------------------------------------------------------- from:   https://blog.csdn.net/gengyiping18/article/details/5073

LINUX-核心-中斷分析-中斷向量(2)-mips

mips中斷概念 在《MIPS體系結構透視》的第5章說到,在MIPS中,中斷、陷阱、系統呼叫和任何可以中斷程式正常執行流的情況全被都被稱為異常。 以上這種統一到“異常”的概念及其邏輯當然會體現在MIPS的異常入口點的設計中,特別如MIPS中斷入口點的引出。

【STM32】NVIC中斷優先順序管理(中斷向量

STM32F1xx官方資料:《STM32中文參考手冊V10》-第9章 中斷和事件Cortex-M3核心支援256箇中斷,其中包含了16個核心中斷(異常)和240個外部中斷,並且具有256級的可程式設計中斷設定。但是,STM32並沒有使用CM3核心的全部東西,而是隻用了它的一部

Dubbo原理實現代理接口的定義

inf extc apt ride pan hand i++ rri ada   Dubbo有很多的實現采用了代碼模式,Dubbo由代理工廠ProxyFactory對象創建代理對象。   ProxyFactory接口的定義如下: @SPI("javassist") pub

數據結構-鏈、棧的實現及題目

mem nod 習題 cell class find sla turn creat GitHub : https://github.com/hanxloop/c_dev_library 前幾天碼了鏈表和棧,棧有數組實現和鏈表實現,自己跑了書上的示例,能跑的通,開心,接口、

劍指offer五十六刪除鏈復的結點

string opened get spl size java nod ger 劍指offer 一、題目   在一個排序的鏈表中,存在重復的結點,請刪除該鏈表中重復的結點,重復的結點不保留,返回鏈表頭指針。 例如,鏈表1->2->3->3->4-&g

數據結構動態順序(C實現)

int 隊列 destroy element 類型 for str ttr def 線性表有2種,分為順序表和鏈表。 順序表: 采用順序存儲方式,在一組地址連續的存儲空間上存儲數據元素的線性表(長度固定) 鏈表: 有3種,單鏈表、雙向鏈表、循環鏈表(長度不固定)

ARM異常 中斷以及他們的向量分析

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

【轉】STM32F030Cxxx 沒有SCB->VTOR,如何定位向量

原為地址:http://www.51hei.com/bbs/dpj-40235-1.html 最近使用了一款Cortex-M0核心的晶片STM32F030CC,發現它中斷向量表的重對映方法與STM32F10x系列的有所區別,在這裡記錄與分享一下。   &n

資料結構鏈式實現--單鏈(C語言)

學習參考: 嚴蔚敏: 《資料結構-C語言版》 基本操作: 單鏈表的建立 新增結點(頭插法) 新增結點(尾插法) 單鏈表的輸出 單鏈表的修改 單鏈表的插入 單鏈表的刪除 單鏈表按

資料結構鏈式實現--單向迴圈連結串列(C語言)

 學習參考: 嚴蔚敏: 《資料結構-C語言版》 單向迴圈連結串列的基本操作 單向迴圈連結串列的建立 單向迴圈連結串列新增結點(頭插法) 單向迴圈連結串列新增結點(尾插法) 單向迴圈連結串列

演算法學習旅-線性及其實現

目錄 (2)查詢 1、順序儲存實現(陣列) 1.1、定義 typedef struct LNode *List; struct LNode{ ElementType Data[MAXSIZ

STM32 IAP韌體更新,bootloader起始地址偏移後,程式碼中還需設定中斷向量的偏移。

在 stm32f10x_flash.icf 中設定ROM的起始結束地址 /*-Specials-*/ define symbol __ICFEDIT_intvec_start__ = 0x08004000; /*-Memory Regions-*/ define symbo

SpringBoot防止重複請求,重複單提交超級簡單的註解實現四(終極版)

前言:上篇文章有的童鞋說不行啊,怎麼不能防止重複提交呢! 首先需要說明的是之前的防止重複提交是指:一次請求完成之前防止重複提交,當然擴充套件下就可以做到會話間防止重複提交,還可以擴充套件為某個時間段或者永久防止重複提交(這個我就不實現了),下面我來擴充套件一下相同會話防止重

(二)單鏈接實現從尾部插入節點

(二)單鏈接表的實現之從尾部插入節點 從尾部插入節點構建一個簡單的列表什麼是頭節點 從尾部插入節點 從尾部插入節點   如上圖所示,只要將建立的節點的pNext指標指向下一節點地址即可:pHeader->pNext = New;   從尾部插入節點分成兩個步驟:  

C++中動多型實現虛擬函式與虛指標

1、靜多型與命名傾軋,動多型與虛擬函式: (1)概述: 我們知道,C++的多型有靜多型(Static polymorphism)與動多型(Dynamic polymorphism)之分,靜多型是依靠函式過載(function overloading)實現的,