問題描述:
程式能下正常載到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);
}