为什么通常的STM32启动使用比参考手册中更少的条目定义向量表?

为什么通常的STM32启动使用比参考手册中更少的条目定义向量表?,stm32,Stm32,我正在学习STM32的底层细节。我对向量表的设置感到困惑 在表63中,列出了STM32F103C8的矢量表。它从0x00000000到0x0000030。但是,如果您查看从STM32CubeMX生成的文件(如startup_stm32f103xb.s),您会注意到它只列出了在0x00000108之前的条目,并且在这个地址是幻数0xF108F85F,我最终找到了关于它的信息 为什么生成代码的向量表的条目比参考手册的向量表少?最后的几个条目是否没有被实际使用,或者它们可以被忽略而不产生后果?位置0x

我正在学习STM32的底层细节。我对向量表的设置感到困惑

在表63中,列出了STM32F103C8的矢量表。它从
0x00000000
0x0000030
。但是,如果您查看从STM32CubeMX生成的文件(如startup_stm32f103xb.s),您会注意到它只列出了在
0x00000108
之前的条目,并且在这个地址是幻数
0xF108F85F
,我最终找到了关于它的信息

为什么生成代码的向量表的条目比参考手册的向量表少?最后的几个条目是否没有被实际使用,或者它们可以被忽略而不产生后果?位置0x108应该是中断“TIM5全局中断”的处理程序。我不知道这是什么,但为什么上面的神奇数字会出现在这里,而不是实际的处理器



它引出了一个相关但不同的问题,即在一些裸机STM32代码中,向量表中定义的唯一条目是堆栈指针和重置处理程序。没有其他处理程序。这里发生了什么?默认情况下是否禁用这些中断?或者,由于这些处理程序未定义,如果这些中断发生,则mcu行为将未定义,并且代码仅假设这些中断不会发生?

链接的参考手册适用于一大系列设备,即STM32F10xxx,该系列中的每个目标/mcu变体将具有不同的硬件外围模块和功能。目标支持的可屏蔽中断的数量随可用外围数据块的不同而不同。因此,如果该系列中的特定设备具有减少的外围设备子集,则向量表可以被减少为针对该系列设备列出的表的子集。因此,向量表后面的所有内容都向上移动

具体而言,通过查找STM32F103C8,对应于缺失向量的外围块(如下所列)不可用于给定目标

  • TIM5
  • UART4
  • UART5
  • TIM6
  • TIM7
  • DMA2
有关可用外围模块的概述,请参见产品数据表中的表2