关于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

继续阅读
意法半导体与Virscient携手合作,加大对Telemaco3P汽车应用处理器的开发支持,缩短网联汽车系统交付周期

中国,2019年3月4日 - 意法半导体 与软硬件开发服务提供商Virscient合作,为汽车制造商使用意法半导体Telemaco3P车载信息连接处理器开发汽车解决方案提供支持服务。Virscient为采用意法半导体的模块化车载信息处理平台(MTP)开发和交付先进汽车应用的客户提供支持服务。MTP是一个多功能的开发演示平台...

意法半导体推出STM32MP1,支持Linux,加快物联网和智能工业创新

中国,2019年2月26日 – 横跨多重电子应用领域的全球领先的半导体供应商意法半导体 利用多年积累的Arm® Cortex® 研发知识扩大STM32 MCU的功能,使这一市场领先的微控制器产品组合覆盖到处理性能和资源要求更高且需要大型开源软件的应用领域。新推出的STM32MP1多核微处理器系列具有计算和图形处理能力...

意法半导体发布多合一在线工具,简化STM32和STM8 微控制器电机控制设计流程

中国,2019年2月19日 — 意法半导体ST-MC-SUITE可轻松获取STM32和STM8微控制器电机控制应用开发全部资源的入口。该工具允许用户收集教程和文档,存储项目设置(硬件和软件),获取软件解决方案下载链接,包括最新的X-CUBE-MCSDK软件包,以及在线购买评估硬件。

ARM急剧扩张,力求5年内开始取得回报

腾讯科技讯 1月14日消息,据外媒报道,近来,半导体知识产权 (IP) 提供商ARM正在以令人难以置信的速度急剧扩张,即使其联合创始人迈克·穆勒(Mike Muller)要使用自己的办公室也得提前预订。

意法半导体在CES 2019上展示下一代先进应用技术和解决方案

中国,2019年1月9日 – 意法半导体将为1月8日 - 10日拉斯维加斯国际消费电子展带来一场非常特别的技术展会。在邀请主要客户和合作伙伴参加的贵宾专场展会上,意法半导体将发布各种产品技术用例,让客户能够开发最有用和最有价值的下一代汽车、工业、个人电子和基础设施应用。