單獨使能PA的多個IO口中斷,中斷能正常觸發(fā),程序運行也正常;
先使能PA的IO口中斷,再使能PB口的PIN12中斷時,PA口的中斷不能觸發(fā),PB口的中斷可以正常觸發(fā),但觸發(fā)后,退出中斷處理后,程序好象死機了。
請問? ?1、PA、PB是否可以同時使能IO口中斷?
????????? 2、PB 12的中斷處理是否有什么需要特別注意的地方?
單獨使能PA的多個IO口中斷,中斷能正常觸發(fā),程序運行也正常;
先使能PA的IO口中斷,再使能PB口的PIN12中斷時,PA口的中斷不能觸發(fā),PB口的中斷可以正常觸發(fā),但觸發(fā)后,退出中斷處理后,程序好象死機了。
請問? ?1、PA、PB是否可以同時使能IO口中斷?
????????? 2、PB 12的中斷處理是否有什么需要特別注意的地方?
void HAL_SleepInit(void)
{
#if(defined(HAL_SLEEP)) && (HAL_SLEEP == TRUE)
? GPIOA_ModeCfg( GPIO_Pin_4 |GPIO_Pin_8 |GPIO_Pin_13, GPIO_ModeIN_PU );? ? ? ? ? ? ? ? //初始化IO狀態(tài)
? GPIOA_ITModeCfg( GPIO_Pin_4 |GPIO_Pin_8 |GPIO_Pin_13, GPIO_ITMode_FallEdge );? ? ? ? // 設置下降沿喚醒
? PFIC_EnableIRQ( GPIO_A_IRQn );? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //開啟GPIO中斷 PA口
? GPIOB_ModeCfg( GPIO_Pin_12, GPIO_ModeIN_PU );? ? ? ? ? ? ? ? //初始化IO狀態(tài)
? GPIOB_ITModeCfg( GPIO_Pin_12, GPIO_ITMode_FallEdge );? ? ? ? // 設置下降沿喚醒
? PFIC_EnableIRQ( GPIO_B_IRQn );? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //開啟GPIO中斷 PA口
? PWR_PeriphWakeUpCfg( ENABLE, RB_SLP_GPIO_WAKE, Long_Delay );//開啟GPIO喚醒使能
#if 0
? ? sys_safe_access_enable();
? ? R8_SLP_WAKE_CTRL |= RB_SLP_RTC_WAKE; // RTC喚醒
? ? sys_safe_access_enable();
? ? R8_RTC_MODE_CTRL |= RB_RTC_TRIG_EN;? // 觸發(fā)模式
? ? sys_safe_access_disable();? ? ? ? ? ? ? //
? ? PFIC_EnableIRQ(RTC_IRQn);
#endif
#endif
}
__INTERRUPT
__HIGH_CODE
void GPIOA_IRQHandler( void )
{
? GPIOA_ClearITFlagBit( GPIO_Pin_4 |GPIO_Pin_8 |GPIO_Pin_13 );? //GPIO喚醒會進中斷,要清除GPIO中斷
}
void GPIOB_IRQHandler( void )
{
? GPIOB_ClearITFlagBit( GPIO_Pin_12 );? //GPIO喚醒會進中斷,要清除GPIO中斷
}
從貼出的程序來看,PB中斷缺少
__INTERRUPT __HIGH_CODE
應該是:
__INTERRUPT __HIGH_CODE void?GPIOB_IRQHandler(?void?) { ??GPIOB_ClearITFlagBit(?GPIO_Pin_12?);??//GPIO喚醒會進中斷,要清除GPIO中斷 }
非常感謝您的回復,您的建議,稍后我會測試。
但PA中斷為什么不會觸發(fā)呢?在添加PB中斷配置之前,PA中斷觸發(fā)、響應都是正常的
添加PB中斷喚醒對PA是沒有影響的,可以將代碼修改后再測試看看,