HAL库STM32引脚PC13和PB5外部中断函数
时间: 2023-08-07 07:07:40 浏览: 170
以下是HAL库的代码示例,实现PC13和PB5引脚的外部中断函数:
```c
// 定义PC13和PB5引脚的中断标志变量
volatile uint8_t PC13_Interrupt_Flag = 0;
volatile uint8_t PB5_Interrupt_Flag = 0;
// PC13引脚的中断处理函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if (GPIO_Pin == GPIO_PIN_13)
{
PC13_Interrupt_Flag = 1;
}
else if (GPIO_Pin == GPIO_PIN_5)
{
PB5_Interrupt_Flag = 1;
}
}
int main(void)
{
// 初始化代码省略
// 配置PC13引脚为外部中断线路
HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
// 配置PB5引脚为外部中断线路
HAL_NVIC_SetPriority(EXTI9_5_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);
while (1)
{
if (PC13_Interrupt_Flag)
{
// PC13引脚中断处理代码
PC13_Interrupt_Flag = 0;
}
if (PB5_Interrupt_Flag)
{
// PB5引脚中断处理代码
PB5_Interrupt_Flag = 0;
}
}
}
// EXTI15_10中断处理函数,对应PC13引脚
void EXTI15_10_IRQHandler(void)
{
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);
}
// EXTI9_5中断处理函数,对应PB5引脚
void EXTI9_5_IRQHandler(void)
{
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_5);
}
```
在上面的代码中,我们定义了两个中断标志变量`PC13_Interrupt_Flag`和`PB5_Interrupt_Flag`,用于标识相应引脚是否发生中断。在`HAL_GPIO_EXTI_Callback()`函数中,判断引脚是否为PC13或PB5,如果是则将相应标志变量赋值为1。
在主函数中,不断检测中断标志变量是否被置位,如果是则执行相应的中断处理代码,并将标志变量重置为0。
在中断处理函数中,使用`HAL_GPIO_EXTI_IRQHandler()`函数调用HAL库的默认中断处理函数`HAL_GPIO_EXTI_Callback()`,实现引脚的中断处理。
请根据您的具体需求进行修改。
阅读全文