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