天天看點

程式能正常下載下傳,但是無法執行,卡在NVIC_Configuration

問題描述:

程式能下正常載到RAM中,但是隻要在主程式中添加了NVIC_Configuration()這條中斷配置語句,就不能執行,單步運作也會一直卡在這裡,若将其注釋掉,整個程式又可以運作了。

解決辦法:

這個問題是中斷向量表沒有寫入到RAM中,因為調試的時候,都是将整個程式下載下傳到RAM中,而中斷向量表并沒有下載下傳進去,是以隻要涉及到中斷的操作都沒有辦法執行完成(可能因為MDK版本不一樣,有的可以通過設定就可起效,但有的版本就不可以)。

隻需要在NVIC_Configuration函數中添加一NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);問題就可以完美解決

例子:

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 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);

}

繼續閱讀