我们先看一张图:
我们由两张原理图可知, 按键如果按下去就触发中断要使用下降沿触发,如果松开按钮后在进行中断即可以上升沿触发;
我们由【STM32L05C8T6】的HAL库文件可知,
EXTI0_1_IRQ 的线为 【1:0】;
EXTI2_3_IRQn的线为【2: 3】;
EXTI4_15_IRQn的线为【4:15】;
我们按键上
K1: PB2 // 最后的 2 对应的线为 EXTI2_3_IRQn
K2:PB1 // 最后的 1 对应的线为 EXTI0_1_IRQ
K3: PB0 // 最后的 0 对应的线为 EXTI0_1_IRQ
K4: PA7 // 最后的 7 对应的线为 EXTI4_15_IRQn
上面的那个对应清楚了,那么我们的中断函数就可以这样写了:
void EXTI0_1_IRQHandler(void)
{
//确保是否产生了 EXTI Line 中断
if (__HAL_GPIO_EXTI_GET_IT(KEY2_PIN) != RESET) {
/*//////////////////////////////////
这里放你要中断执行的函数
////////////////////////////////// */
__HAL_GPIO_EXTI_CLEAR_IT(KEY2_PIN);
}
//确保是否产生了 EXTI Line 中断
if (__HAL_GPIO_EXTI_GET_IT(KEY3_PIN) != RESET) {
/*//////////////////////////////////
这里放你要中断执行的函数
////////////////////////////////// */
//清除中断标志位
__HAL_GPIO_EXTI_CLEAR_IT(KEY3_PIN);
}
}
void EXTI2_3_IRQHandler(void)
{
//确保是否产生了 EXTI Line 中断
if (__HAL_GPIO_EXTI_GET_IT(KEY1_PIN) != RESET) {
/*//////////////////////////////////
这里放你要中断执行的函数
////////////////////////////////// */
//清除中断标志位
__HAL_GPIO_EXTI_CLEAR_IT(KEY1_PIN);
}
}
void EXTI4_15_IRQHandler(void)
{
//确保是否产生了 EXTI Line 中断
if (__HAL_GPIO_EXTI_GET_IT(KEY4_PIN) != RESET) {
/*//////////////////////////////////
这里放你要中断执行的函数
////////////////////////////////// */
//清除中断标志位
__HAL_GPIO_EXTI_CLEAR_IT(KEY4_PIN);
}
}