程序能正常下载,但是无法执行,卡在NVIC_Configuration

问题描述:

程序能下正常载到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);

}

你可能感兴趣的:(中断,stm32,中断导致程序卡主)