如何使用uvision(Keil)重新定位向量表并更改cortexm3中的起始地址?

问题描述 投票:0回答:3

我使用的是 STM32F107 cortex m3 微控制器。我在该项目中使用 Keil uvision IDE。我有一个在起始位置正常运行的应用程序,即

0x0800 0000
。如果我将起始位置更改为
0x0800 4000
,应用程序将无法正常工作。我使用此函数对向量表位置进行了更改,如下所示:

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8004000)

即更改

SCB->VTOR = 0x8004000
至此位置。

但即使执行此操作后,中断也不会发生。我应该做更多的事情来让这个项目成功吗?

arm cortex-m keil
3个回答
9
投票

您不应该使用

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


1
投票

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

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

否则

您可以如下更新STM32F1xc_flash.icf文件中的中断向量地址。

定义符号 ICFEDIT_intvec_start = 0x08004000;


-1
投票

我为我的 STM32L496 执行了此操作,在调用 HAL_Init() 之前设置新向量表非常重要,因为它调用 HAL_MspInit(),这可能会在设置某些外设时使用 SysTick 来测量超时。

© www.soinside.com 2019 - 2024. All rights reserved.