STM32F0(3)EXTI 外部中斷配置
// 引腳 PA0 的外部中斷配置
void Key_GPIO_Init(void)
{
// 設(shè)置 PA0 口為上拉輸入模式
RCC->AHBENR |= RCC_AHBENR_GPIOAEN; // 打開該引腳的GPIO時鐘
GPIOA->MODER &= ~GPIO_MODER_MODER0_1; // 設(shè)置為輸入模式
GPIOA->MODER &= ~GPIO_MODER_MODER0_0;
GPIOA->PUPDR &= ~GPIO_PUPDR_PUPDR0_1; //上拉 == 相當(dāng)于設(shè)置初始電平為 1
GPIOA->PUPDR |= GPIO_PUPDR_PUPDR0_0; // 如果設(shè)置為下拉的話,初始電平為 0
// 設(shè)置 PA0 外部中斷的響應(yīng)方式 -- 上升沿 和 下降沿 觸發(fā)
EXTI->IMR |= EXTI_IMR_MR0; // 外部中斷線開關(guān)
EXTI->EMR |= EXTI_EMR_MR0; // 外部中斷事件開關(guān)
EXTI->FTSR |= EXTI_FTSR_TR0; // 下降沿觸發(fā)
EXTI->RTSR |= EXTI_RTSR_TR0; // 上升沿觸發(fā)
// 開外部中斷及優(yōu)先級配置
// 優(yōu)先級數(shù)值為 0x000000c0 (越大優(yōu)先級越低) -- 每個優(yōu)先級占8位
NVIC->IP[EXTI0_1_IRQn / 4] |= (0x000000c0 << (8 * (EXTI0_1_IRQn % 4))); // 設(shè)置優(yōu)先級
NVIC->ISER[0] |= (1 << EXTI0_1_IRQn); // 打開外部中斷
}
// 中斷處理函數(shù)
void EXTI0_1_IRQHandler(void)
{
EXTI->PR |= EXTI_PR_PR0; 需要手動清除標(biāo)志位
if(根據(jù)當(dāng)前引腳的當(dāng)前狀態(tài)來判斷該引腳是上升沿 或 下降沿 產(chǎn)生的中斷)
//
}