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

时间:2013-02-07 12:02:26

标签: arm cortex-m3 keil

我正在使用STM32F107皮质m3控制器。我正在为项目使用uvision IDE。我有一个在启动位置正常运行的应用程序,即0x0800 0000.如果我将起始位置更改为0x0800 4000,则应用程序无法正常工作。我使用此函数更改了向量表位置 NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x8004000)即将SCB-> VTOR = 0x8004000改变为该位置。 但即使这样做,中断也不会发生。我应该做些什么来使这个项目有效吗?

此致 苏拉杰

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

在HAL_Init();

之后添加以下指令

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

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

定义符号 ICFEDIT_intvec_start = 0x08004000;

答案 2 :(得分:-1)

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