c - 如何在应用程序(stm32f4 HAL)中更改 SCB->VTOR?
问题描述
我为 STM32F4 构建引导加载程序并构建用户应用程序,并在 system_stm32f4xx.c 文件中手动更改 SCB->VTOR 的 VECT_TAB_OFFSET 值,但如果我在应用程序中执行此操作。它不能正常工作。
解决方案
STM32启动代码调用SystemInit()
之前main()
。 SystemInit()
设置SCB->VTOR
值(除其他外)。 SystemInit()
在供应商提供的文件中实现system_stm32f4xx.c
。SCB-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
推荐阅读
- jasmine - 无法在自定义 jasmine 报告器中写出量角器网络/性能日志
- c# - 如何设置图像的 200x200 背景?
- leaflet - 来自标记的多个弹出窗口
- memory-management - Dask drop 重复内存错误 split_out
- python - 使用 pandas read_csv 时随机打印笑脸?
- python - 使用 networkx 快速生成大型无标度图
- python - 如何在 Python 中实现 KS-Test
- python - 将变量传递给另一个函数python定义的参数
- java - 设置在鼠标按下时移动
- java - Java Date to Epoch,受 Java7 的 Api 21 (Android) 限制