STM32F0xx IAP实现之中断向量表重定义

发布者:DreamySunset最新更新时间:2017-09-11 来源: eefocus关键字: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中。

具体实现代码如下:


  1. /* 

  2. *  Function: void JumpToApp(void) 

  3. * Parameter: none 

  4. *    Return: none 

  5. */  

  6. static void JumpToApp(void)  

  7. {  

  8.   ApplicationAddress = APP_FLASHADDR;  

  9.   if (((*(uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)  

  10.   {  

  11.     /* Jump to user application */  

  12.    /*最开头4个字节存放MSP的初始值,从这之后的4个字节存放ResetHandler中断向量*/  

  13.     m_JumpAddress = *(uint32_t*) (ApplicationAddress + 4);   

  14.     JumpToApplication = (FunVoidType) m_JumpAddress;  

  15.   

  16.     /* Initialize user application's Stack Pointer */  

  17.     __set_MSP(*(uint32_t*) ApplicationAddress);  

  18.     JumpToApplication();  

  19.   }  

  20. }  

  21. /* 

  22. *  Function: void clock_init(void) 

  23. * Parameter: none 

  24. *    Return: none 

  25. */  

  26. int main(void)  

  27. {  

  28.   memcpy((void*)0x20000000, (void*)APP_FLASHADDR, 0x100);  

  29.   SYSCFG->CFGR1 |= 0x03;  

  30.    

  31.   JumpToApp();  

  32.   while (1);  

  33. }  



关键字:STM32F0xx  IAP实  中断向量表  重定义 引用地址:STM32F0xx IAP实现之中断向量表重定义

上一篇:关于STM32软件复位代码编写
下一篇:关于STM32的中断向量表的重映射的问题

小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved