keil环境下stm32f030R8 APP程序中断向量的重映射

发布者:HarmonySpirit最新更新时间:2018-07-10 来源: eefocus关键字:keil环境  stm32f030R8  APP程序  中断向量  重映射 手机看文章 扫描二维码
随时随地手机看文章

1、理论基础:

        Stm32f030R8 有64KFlash + 8KSram

      





Stm32f0系列MCU中断矢量表的定位跟STM32其它系列相比有点差异,即M0系列没有像其它M3/M4/M0+系列所具备的中断矢量表重定位寄存器,其中断矢量表不能借助矢量重定位寄存器简单修改实现。所以Stm32f0 IAP的过程会跟其它系列的STM32芯片的IAP动作有所不同。

我们知道,做IAP往往需要两部分代码,一部分是用来升级的IAP程序,一部分用来运行用户实际应用功能的应用程序APP代码。

IAP程序及自身的中断向量表放在内部FLASH的低端地址区。对于STM32 MCU而言,就是从0X0800 0000处开始放IAP代码。APP程序代码及自身中断矢量表存放在离0X0800 0000某个地址偏移量【offset】的地方,即从0x0800 0000+offset的地址开始存放APP代码及中断矢量。显然那个【offset】要大于IAP的程序空间。假设这里OFFSET为0x4000,即APP程序的起始地址为0x08004000。为了APP程序能正常相应中断,这里需要做2个步骤:

1、将APP的中断向量表拷贝到SRAM里面去。M0的中断向量表由48个有序字(32bit)组成,把它们从flash区0x08004000开始的中断向量表拷贝到0x2000 0000的SRAM区。




2、做存储地址的映射,即把SRAM映射到代码执行区的地址0X00处。


[c++] view plain copy

  1. #define FLASH_BOOTLOADER_SIZE       (uint32_t)(0x4000)  

  2. #define APPLICATION_ADDRESS         (uint32_t)(0x08000000+FLASH_BOOTLOADER_SIZE)  

  3.   

  4. #if   (defined ( __CC_ARM ))  

  5.  __IO uint32_t VectorTable[48] __attribute__((at(0x20000000)));  

  6. #elif (defined (__ICCARM__))  

  7. #pragma location = 0x20000000  

  8.  __no_init __IO uint32_t VectorTable[48];  

  9. #elif defined   (  __GNUC__  )  

  10.  __IO uint32_t VectorTable[48] __attribute__((section(".RAMVectorTable")));  

  11. #elif defined ( __TASKING__ )  

  12.  __IO uint32_t VectorTable[48] __at(0x20000000);  

  13. #endif  

  14.   

  15. //做中断向量表的拷贝  

  16. for(i = 0; i < 48; i++)  

  17. {  

  18.    VectorTable[i] = *(__IO uint32_t*)(APPLICATION_ADDRESS + (i<<2));  

  19. }  

  20. /* Enable the SYSCFG peripheral clock*/  

  21. RCC_APB2PeriphResetCmd(RCC_APB2Periph_SYSCFG, ENABLE);   

  22. /* Remap SRAM at 0x00000000 */  

  23. SYSCFG_MemoryRemapConfig(SYSCFG_MemoryRemap_SRAM);  





经过上述操作步骤后,当APP里发生中断时,内核就从地址0x00处的向量表取相应中断的入口地址,即相当于从0x2000 0000处的向量表取中断入口地址,当然也相当于从0x08003000处的向量表取中断入口地址,然后去执行相应中断程序。

关于STM32F0的IAP,ST官方有套参考代码,即STM32F0xx_AN4065_FW_V1.0.0例程。


关键字:keil环境  stm32f030R8  APP程序  中断向量  重映射 引用地址:keil环境下stm32f030R8 APP程序中断向量的重映射

上一篇:STM32F030 Nucleo-多样的SPI通信之Master标准模式-SPIFlash读写
下一篇:keil环境下IAP使用中 stm32中M0 M3中断偏移对比

推荐阅读最新更新时间:2024-03-16 16:08

【STM32F103攻城笔记】STM32之MDK(Keil环境搭建(二)
继续上面的操作,我们打开keil,是空的! 点击project - New uVision Project 选择工程的位置并命名工程名字 保存后,选择你对应的芯片, OK后,一个空的环境搭好了! 下一步建立一个代码文件夹, 先说明我们要用的文件有哪些: 然后将上面的文件分配到建立的文件代码,分配方式为 CORE 文件夹: LIB文件夹: 最后在APP里建个main.c文件! 这样我们基本完成了代码的分配! 下面我们只需要将这代码加载到上面keil搭建的环境里就可以了! 打开刚才的环境,为了方便区分,和代码建立相同的文件结构,如图 下一步,我们通过加载文件,将代码文
[单片机]
【STM32F103攻城笔记】STM32之MDK(<font color='red'>Keil</font>)<font color='red'>环境</font>搭建(二)
ATmega32 中断向量
本节描述ATmega32的中断处理。更一般的AVR中断处理请参见P11“复位与中断处理” 。 (点击图片放大) Notes: 1. 熔丝位BOOTRST被编程时,MCU复位后程序跳转到Boot Loader。请参见 P228 “支 持引导装入程序 – 在写的同时可以读(RWW, Read-While-Write)的自我编程能力 ” 。 2. 当寄存器GICR的IVSEL置位时,中断向量转移到Boot区的起始地址。此时各个中断向 量的实际地址为表中地址与Boot 区起始地址之和。 Table 19给出了不同的BOOTRST/IVSEL设置下的复位和中断向量的位置。如果程序永远不使能中断,中断向量就没有意义。用户可以在此直接写
[单片机]
ATmega32 <font color='red'>中断向量</font>
Keil C51单片机集成开发环境编程与调试教程
同 VC 之类的通用 C 语言集成开发环境(IDE)一样,Keil 也采用“工程” (Project)的方式管理源代码及相关文件,这种管理方式为由多个源代码文件组 成的大型程序开发提供了方便。不管是最简单的 C51程序,还是复杂的多文件 程序都需要以下步骤: 1)先建立新的工程文件; 2)在工程中新建源代码文件,或是将已经存在的源代码文件加入工程; 3)编译; 4)调试,修正错误再编译; 5)将生成的二进制文件*.hex 烧入单片机。 本教程重点介绍上述前 4 个步骤。 二、Keil中新建工程的步骤 1. 单击菜单“Project——New uVision Project……” 出现新建工程对话框: 在此对话框中选择存
[单片机]
<font color='red'>Keil</font> C51单片机集成开发<font color='red'>环境</font>编程与调试教程
为何小程序目前难以取代App
   微信小程序也已经推出了一段时间了,在小程序面世伊始,有观点认为它能够取代手机App,给用户带来更清爽的体验。所谓的微信小程序,指的是依托在微信作为平台运行的程序,它主要由HTML代码构成。得益于微信提供的API,它拥有比普通Web应用更多的权限,能够实现类似App的功用。然而,它是否能取代App、让为微信成为掌管一切的霸道总裁?现在看来,并不能。 微信小程序似乎并没有如同一些观点那样,取代App   虽然微信小程序仍在蓬勃发展,小程序的数量也与日俱增,但似乎依然没人因为小程序的存在,把App们通通赶出手机。小程序目前来看,似乎仍只是轻度使用的工具,没法负担起整个应用生态的重责。为何小程序目前难以取代App?今天就来谈谈这个问
[手机便携]
keil编程环境中遇到几种常见警告分析
keil中常见的几种警告,固然,相对于错误的,警告的程度不及错误的严重性,有时候忽略,会出现意想不到的错误。先看看常见的几种错误,分析出来现的原因。 1. Warning 280: i :unreferenced local variable 说明 局部变量 i 在函数中未作任何的存取操作 解决方法 消除函数中 i变量的宣告 2 Warning 206: Music3 :missing function-prototype 说明 Music3( )函数未作宣告 或未作外部宣告 所以无法给其他函数调用 解决方法 将叙述void Music3(void)写在程序的最前端作宣告 如果是其他文件的函数则要写成 extern void
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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