HAL库对于中断的理解【STM32L051C8T6】

我们先看一张图:




我们由两张原理图可知, 按键如果按下去就触发中断要使用下降沿触发,如果松开按钮后在进行中断即可以上升沿触发; 

我们由【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);
}
}

猜你喜欢

转载自blog.csdn.net/lvshitianxia/article/details/80985282