目录​​​​​​​

概述

1 向量表的结构和作用

2 中断向量表实例说明


概述

STM32向量表是存储在微控制器内部Flash起始地址处的一个特殊的数据结构,它是基于ARM Cortex-M系列内核的STM32微控制器的一种硬连线机制,用于确定中断服务程序(Interrupt Service Routines, ISR)的入口地址。在STM32中,向量表实质上是一个数组,数组中的每个元素是一个32位地址,指向相应的中断服务程序。

1 向量表的结构和作用

在STM32中,当发生中断时,处理器会根据中断类型和优先级查找到向量表中的相应地址,然后跳转到该地址执行中断服务程序。向量表的排列顺序和内容遵循ARM Cortex-M内核的规定。

例如,假设STM32向量表的起始地址是0x08000000(不同型号的STM32可能略有不同),向量表的第一个4字节(即地址0x08000000处)通常存放的是复位向量地址,即复位后程序执行的第一条指令地址。接下来的几个位置依次存放的是NMI(不可屏蔽中断)、硬fault、总线fault等各种内核级别的异常和中断向量。

对于外设中断,STM32的NVIC(Nested Vectored Interrupt Controller)会管理中断优先级和向量分配。在向量表的特定位置,会存放由NVIC分配的各个外设中断服务程序的入口地址。

2 中断向量表实例说明

假设STM32的UART1发送完成了中断请求,当该中断被处理器接受并激活时,处理器会根据NVIC的设置找到UART1中断在向量表中的位置,并从中取出该位置存放的地址,然后跳转到这个地址执行UART1的中断服务程序。

向量表的结构如下所示(简化示例):
0x08000000: Reset_Handler
0x08000004: NMI_Handler
0x08000008: HardFault_Handler

0x08000080: UART1_IRQHandler  // 这里是假设UART1中断对应的向量位置
 

这里的每个字符串(如`Reset_Handler`)实际上代表的是一个函数地址,实际存储的是该函数在内存中的偏移地址。当相应的中断发生时,处理器会跳转到这个地址执行相应的中断服务程序。

作者:小蘑菇二号

物联沃分享整理
物联沃-IOTWORD物联网 » STM32中断向量表详解

发表回复