关于STM32中断向量表的位置 、重定向问题

分享到:

首先我们需要跳到main函数,这个就不多说了。那么,中断发生后,又是怎么跑到中断入口地址的呢?
从stm32f10x.s可以看到,已经定义好了一大堆的中断响应函数,这就是中断向量表,标号__Vectors,表示中断向量表入口地址,例如:
AREA    RESET, DATA, READONLY ; 定义只读数据段,实际上是在CODE区(假设STM32从FLASH启动,则此中断向量表起始地址即为0x8000000)
                EXPORT  __Vectors
                IMPORT OS_CPU_SysTickHandler
                IMPORT OS_CPU_PendSVHandler

__Vectors   DCD     __initial_sp                    ; Top of Stack
                  DCD     Reset_Handler              ; Reset Handler
                  DCD     NMI_Handler                ; NMI Handler
                  DCD     HardFault_Handler        ; Hard Fault Handler
                  DCD     MemManage_Handler  ; MPU Fault Handler
                  DCD     BusFault_Handler          ; Bus Fault Handler
                  DCD     UsageFault_Handler      ; Usage Fault Handler

这个向量表的编写是有讲究的,跟硬件一一对应不能乱写的,CPU找入口地址就靠它了,bin文件开头就是他们的地址,参考手册RM0008的10.1.2节可以看到排列。

我们再结合CORTEX-M3的特性,他上电后根据boot引脚来决定PC位置,比如boot设置为flash启动,则启动后PC跳到0x08000000。此时CPU会先取2个地址,第一个是栈顶地址,第二个是复位异常地址,故有了上面的写法,这样就跳到reset_handler。

那么这个reset_handler的实际地址是多少.?下面的一堆例如Nmi_handler地址又是多少呢?发生中断是怎么跑到这个地址的呢?下面挨个讲解。

1、我们可以通过反向来得知这些入口地址,查看工程下的map文件就可以看到了,这个地址跟keil里面设置的target->flash起始地址息息相关,实际上我们不太需要关心,让编译器分配,中断向量表放的就是他们的地址。
2、对比ARM7/ARM9内核,Cortex-M3内核则是固定了中断向量表的位置而起始地址是可变化的。
3、进到C语言后会先配置NVIC,NVIC_SetVectorTable()里面可以配置中断向量表的起始地址和偏移,主要是告诉CPU该向量表是位于Flash还是Ram,偏移是多少。例如设置为位于Flash内,偏移就是烧入的程序地址,可在Keil target中设置。这样CPU就知道入口地址了。

4、发生中断后,CPU找到中断向量表地址,然后根据偏移(对号入座)再找到中断地址,这样就跳过去了。
我们截一个图说明一下,map文件:

41

对应的bin文件,看是不是放的上面地址:

42

显然,200039c0就是栈顶地址,而08006F21就是reset_handler地址!

如何定位?以放到0x20000000为例

1、keil设置ram起始为0x20000100,我们在0x20000000~0x20000100放中断向量表,其他给程序用

2、设置NVIC_SetVectorTable(NVIC_VectTab_FLASH,0);

3、跳到C时把中断向量表拷贝到0x20000000

STM32单片机中文官网
意法半导体/ST/STM

继续阅读
ARM数据中心:智能卸载芯片为服务器指明道路

ARM在今年的开发者大会上把智能卸载处理器置于聚光灯之下,作为其实现其数据中心建设野心的起跳板。日本软银(SoftBank)早在2016年斥巨资收购ARM,为这家芯片设计商有朝一日成为半导体行业巨擘下了押注,对于该公司的芯片设计者而言,云计算领域成为他们的最新目标。

STM32天猫旗舰店双11特价来啦!

STM32官方旗舰店 已于2018年9月入驻天猫商城,并开启线上销售。在这里,您可以购买多款STM32开发板及芯片。在双11这个买买买的日子,STM32官方旗舰店开启特价活动,三重钜惠,快点来抢!

意法半导体推出超低功耗的工业资产管理Sigfox Monarch解决方案,让全球物联网设备实现无缝连接

中国,北京,2018年10月23日- 横跨多重电子应用领域、全球领先的半导体供应商意法半导体是第一家开发、销售经过相关行业标准认证的全球无缝接入、超低功耗、远距离无线物联网连接解决方案,并支持全球领先的物联网服务提供商Sigfox的Monarch全球跟踪和定位服务的芯片制厂商 。

意法半导体推出更快、更灵活的探针,简化STM8和STM32案上及现场代码烧写流程

中国,2018年10月10日——意法半导体推出了STLINK-V3下一代STM8 和STM32微控制器代码烧写及调试探针,进一步改进代码烧写及调试灵活性,提高效率。STLINK-V3支持大容量存储,具有虚拟COM端口和多路桥接功能,烧写性能是上一代探针的三倍,产品价格具市场竞争力,节省应用开发时间,简化设备现场重新编程流程。

RISC-V可以撼动ARM的芯片宝座吗

作为嵌入式生态和移动端芯片的武林盟主,ARM公司自1990年成立以来,一直保持低调。然而最近,ARM因为与RISC-V的纠纷让这家IP巨头成为焦点。事情得从6月份说起,ARM在6月底建立了RISC-BASICS.COM的网站,以“设计系统芯片之前需要考虑的五件事”为主题从成本...