首页 > 解决方案 > 如何在应用程序(stm32f4 HAL)中更改 SCB->VTOR?

问题描述

我为 STM32F4 构建引导加载程序并构建用户应用程序,并在 system_stm32f4xx.c 文件中手动更改 SCB->VTOR 的 VECT_TAB_OFFSET 值,但如果我在应用程序中执行此操作。它不能正常工作。

我在 main() 的开头调用了 SCB->VTOR = 0x8040000 但它不起作用。自举程序 用户应用程序

标签: cembeddedstm32bootloaderstm32f4

解决方案


STM32启动代码调用SystemInit()之前main()SystemInit()设置SCB->VTOR值(除其他外)。 SystemInit()在供应商提供的文件中实现system_stm32f4xx.cSCB-VTOR您可以通过编辑 的值来自定义分配给的值VECT_TAB_OFFSET,该值也在 中定义system_stm32f4xx.c。(您的项目文件夹中应该有一个副本system_stm32f4xx.c,您可以为您的项目自定义。)

如果您VECT_TAB_OFFSET的引导程序和应用程序需要不同的值,那么您可以使用这样的预处理器语句。(这允许引导程序和应用程序使用相同的 . 副本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

推荐阅读