3
如何,我可以通過下面這段代碼有2箇中斷,帶一個處理器:STM32中斷HANDELING如果條件
SYSCFG->EXTICR[0] |= SYSCFG_EXTICR1_EXTI0_PB | SYSCFG_EXTICR1_EXTI1_PC;
EXTI->IMR = EXTI_IMR_MR0 | EXTI_IMR_MR1;
EXTI->RTSR = EXTI_RTSR_TR0| EXTI_RTSR_TR1;
/* Configure NVIC for External Interrupt */
/* (6) Enable Interrupt on EXTI0_1 */
/* (7) Set priority for EXTI0_1 */
NVIC_EnableIRQ(EXTI0_1_IRQn); /* (6) */
NVIC_SetPriority(EXTI0_1_IRQn,0); /* (7) */
這是處理程序excecute代碼:
void EXTI0_1_IRQHandler(void)
{
if ((EXTI->PR & EXTI_PR_PR1) == EXTI_PR_PR1) /* Check line 1 has triggered the IT */
{
EXTI->PR = EXTI_PR_PR1; /* Clear the pending bit */
GPIOC->ODR |= 1<<0;
}
if ((EXTI->PR & EXTI_PR_PR0) == EXTI_PR_PR0) /* Check line 0 has triggered the IT */
{
EXTI->PR = EXTI_PR_PR0; /* Clear the pending bit */
GPIOC->ODR &= ~(1<<0);
}
}
的代碼工作正常時,點擊連接到PC1的按鈕,指示燈亮起,當我點擊連接到PB0的按鈕時,指示燈熄滅。 在我的if結構中,我檢查哪一行處於活動狀態,但我也希望僅通過單擊PC1打開LED,而不是單擊第一行上的另一個引腳,這與第0行相同,但我不知道如何才能改變if結構的條件。
微控制器是STM32F091。
所以你說,你打開這條線GPIOC-> ODR LED &=〜(1 << 0); ? –
我對此抱有懷疑&&(GPIOB-> IDR&GPIO_IDR_0)。 –
對不起,這是我嘗試過的東西,但我刪除了代碼的一部分,是否有任何建議,我可以使用?我在我的問題中編輯代碼;) – Sandeerius