6

我正在使用 STM32F107 cortex m3 微控制器。我正在为该项目使用 Keil uvision IDE。我有一个在起始位置正常运行的应用程序,即0x0800 0000. 如果我将起始位置更改0x0800 4000为应用程序无法正常工作。我使用此函数对向量表位置进行了更改,如下所示:

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8004000)

即更改SCB->VTOR = 0x8004000为这个位置。

但即使在做了这个中断之后也没有发生。我应该做更多的事情来使这个项目工作吗?

4

3 回答 3

9

你不应该使用NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8004000),使用NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x4000)。第二个参数是“偏移量”,而不是绝对地址。

于 2013-08-01T05:04:45.943 回答
0

在 HAL_Init() 之后添加以下指令;

SCB->VTOR = (FLASH_BASE | 0x4000);

您还需要更新 STM32F1xc_flash.icf 文件中的中断向量地址,如下所示。

定义符号ICFEDIT_intvec_start = 0x08004000;

于 2015-03-26T07:20:20.537 回答
-1

我为我的 STM32L496 做了这个,在调用 HAL_Init() 之前设置新的向量表很重要,因为它调用了 HAL_MspInit(),它可能在设置一些外设时使用 SysTick 来测量超时。

于 2018-08-01T18:18:10.297 回答