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

继续阅读
Thread新规格可让物联网设备具备互联互通

这是一个重要的里程碑。Thread Group成功通过ARM、NXP、OpenThread与Silicon Labs的各项测试,Thread新规格不仅要实现一致性,还已具备互操作性。律师这种职业能藉由争辩对法条的不同见解而拿到报酬,可惜工程师没这么幸运──如果有技术规格写得不清不楚,产品设计师最后还可能会因为做出了错误的诠释而付出惨痛代价。

谷歌第一款移动芯片是隐藏在Pixel 2中的图像处理器

谷歌表示,在更新Android Camera API之后,以允许第三方摄像头开发人员使用HDR +和Pixel Visual Core,它们将成为Android Oreo 8.1预览中的开发人员选项。显然,所有这些技术都严格限制在Pixel 2代,排除了当前的Pixel所有者和其他Android用户。该公司显然认识到Pixel2相机系统的独特卖点,它正在努力开发和扩大其领先地位。

中国新超算彻底告别进口CPU 国产芯片已可与国外抗衡

日前,飞腾已经完成FT-2000plus服务器CPU的研制工作,飞腾公司的合作伙伴正在积极研发相应的整机产品。FT-2000plus这款芯片是以FT2000为基础的改进版本,虽然在单核性能上和Intel还存在一定差距,但在多核性能上,已经达到Intel服务器CPU E5 主流产品的水平。

意法半导体(ST)将其独有的开发生态环境与阿里AliOS操作系统完美结合,打造中国第一个云节点物联网平台

2017年10月13日 – 意法半导体今天宣布与阿里巴巴集团旗下阿里云携手合作,为中国市场提供云节点物联网整体解决方案。意法半导体与阿里巴巴的合作项目可以让设计人员通过使用意法半导体的物联网半导体产品,轻松创建物联网节点和网关,并在节点上运行阿里的物联网操作系统AliOS。

全方位对比FD-SOI的性能/制造成本/设计成本

第五届上海FD-SOI论坛昨天在上海召开,在论坛上,各位嘉宾在谈及与竞争对手/工艺的性能对比也没有遮遮掩掩,EDN很轻松的得到了竞争对手之间的性能互怼参数、竞争工艺互怼参数、成本互怼表格等数据……第五届上海FD-SOI论坛9月26日在上海召开,本届论坛是规模最大、重量级嘉宾最多、形势最鼓舞人心、午餐最好吃的一届。