为什么通常的STM32起步定义vectortable比参考手册上的条目少?

Why do the usual STM32 start ups define the vector table with fewer entries than in the reference manual?

我正在学习 STM32 的底层细节。我对矢量 table 的设置方式感到困惑。

reference manual, table 63, it lists the STM32F103C8's vector table. It goes from 0x00000000 through 0x00000130. However, if you look at the generated files from STM32CubeMX (like startup_stm32f103xb.s), you notice it only lists entries until 0x00000108, and at this address is the magic number 0xF108F85F, which I eventually found information about .

为什么生成代码的向量 table 的条目少于参考手册的向量 table?最后几个条目是否没有实际使用,或者它们可以以某种方式省略而不会产生任何后果?位置 0x108 应该是中断“TIM5 全局中断”的处理程序。我不知道这是什么,但为什么上面的幻数可以在这里而不是实际的处理程序?


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

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

具体查看 STM32F103C8 的 product datasheet,对应于缺失向量的外设块(如下所列) 可用于给定目标。

  • TIM5
  • UART4
  • UART5
  • TIM6
  • TIM7
  • DMA2

有关可用外围模块的概述,请参阅产品数据表中的 table 2。