问题描述:
程序能下正常载到RAM中,但是只要在主程序中添加了NVIC_Configuration()这条中断配置语句,就不能执行,单步运行也会一直卡在这里,若将其注释掉,整个程序又可以运行了。
解决办法:
这个问题是中断向量表没有写入到RAM中,因为调试的时候,都是将整个程序下载到RAM中,而中断向量表并没有下载进去,所以只要涉及到中断的操作都没有办法执行完成(可能因为MDK版本不一样,有的可以通过设置就可起效,但有的版本就不可以)。
只需要在NVIC_Configuration函数中添加一NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);问题就可以完美解决
例子:
/* Vector Table is in FLASH at 0x0 */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
/* Vector Table is in RAM at 0x0 */
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //主优先级设置
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //重优先级设置
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //中断使能
NVIC_Init(&NVIC_InitStructure);
}