小弟做IAP,已经成功了,但是还是有点疑问,按照原子大哥的做法是应该在开头有这么一句
SCB->VTOR = FLASH_BASE | 0x10000; /* Vector Table Relocation in Internal FLASH. 中断偏移*/ (库函数版本),作为偏移地址,
可是后来我在程序中又加入了一个计时器中断,和一个按键中断
void Timer5_NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/* Set the Vector Table base address at 0x08000000 */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x10000);
/* Enable the TIM5 gloabal Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void key1InterruptConfig(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/* Set the Vector Table base address at 0x08000000 */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x10000);
/* Configure the Priority Group to 2 bits */
/* Enable the EXTI Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = GPIO_KEY1_EXTI_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
其中都有NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x10000);
可是在其他的中断,例如
void Timer2_NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //抢占优先级2位(0,1,2,3),响应优先级2位(0,1,2,3)
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; //USART1串口中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //设置抢占优先级,,可以再中断中继续嵌套中断
NVIC_InitStructure.NVIC_IRQChannelSubPriority =3; //设置响应优先级,,抢占优先级相同时,响应优先越高中断越高
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能IRQ通道
NVIC_Init(&NVIC_InitStructure); //按前面设置值初始化NVIC
}
之中。又没有地址,我就有点乱套了,什么时候有地址,什么时候没有地址呢?还是说默认了?
|