我为 STM32F4 构建引导加载程序,并构建用户应用程序,并在 system_stm32f4xx.c 文件中手动更改 SCB->VTOR 的 VECT_TAB_OFFSET 值,但如果我在应用程序中执行此操作。它无法正常工作。
我在 main() 的开头调用了 SCB->VTOR = 0x8040000 但它不起作用。 BOOTLOADER USER APPLICATION
最佳答案
STM32启动代码在main()
之前调用SystemInit()
。 SystemInit()
设置 SCB->VTOR
值(除其他外)。 SystemInit()
在供应商提供的文件 system_stm32f4xx.c
中实现。您可以通过编辑 VECT_TAB_OFFSET
的值来自定义分配给 SCB-VTOR
的值,该值也在 system_stm32f4xx.c
中定义。 (您的项目文件夹中应该有一个 system_stm32f4xx.c
的副本,您可以为您的项目进行自定义。)
如果您的启动程序和应用程序需要不同的VECT_TAB_OFFSET
值,那么您可以使用这样的预处理器语句。 (这允许 Bootstrap 和应用程序使用 system_stm32fxx.c
的相同副本。或者,您可以为每个程序使用该文件的不同副本。)
#ifdef BOOT
#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field.
This value must be a multiple of 0x200. */
#else
#define VECT_TAB_OFFSET 0x80000
#endif
关于c - 如何在应用程序(stm32f4 HAL)中更改SCB->VTOR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58217994/