STM32的外部中断EXTI10-15共用一个中断服务函数 void EXTI15 10 IRQHandler( void),若此时PA10、PA11、PA13、PA15和PB15同时产生中断,则实际开发中应如何区分和处理来自这5个到脚的外部中断?
时间: 2024-05-10 15:19:42 浏览: 182
在STM32的外部中断中,每个中断线都有自己的中断标志位,当外部中断触发时,对应的中断标志位会被置位。在处理中断服务函数时,首先需要判断哪个中断线触发了中断,并清除对应的中断标志位。在这个例子中,可以使用如下代码来区分和处理来自这5个到脚的外部中断:
```
// 中断服务函数
void EXTI15_10_IRQHandler(void)
{
if (EXTI_GetITStatus(EXTI_Line10) != RESET) {
// 处理 PA10 中断
EXTI_ClearITPendingBit(EXTI_Line10);
}
if (EXTI_GetITStatus(EXTI_Line11) != RESET) {
// 处理 PA11 中断
EXTI_ClearITPendingBit(EXTI_Line11);
}
if (EXTI_GetITStatus(EXTI_Line13) != RESET) {
// 处理 PA13 中断
EXTI_ClearITPendingBit(EXTI_Line13);
}
if (EXTI_GetITStatus(EXTI_Line15) != RESET) {
// 处理 PA15 中断
EXTI_ClearITPendingBit(EXTI_Line15);
}
if (EXTI_GetITStatus(EXTI_Line15) != RESET) {
// 处理 PB15 中断
EXTI_ClearITPendingBit(EXTI_Line15);
}
}
```
在这个例子中,首先使用 `EXTI_GetITStatus()` 函数判断哪个中断线触发了中断,然后再根据中断线的不同进行相应的处理。最后,使用 `EXTI_ClearITPendingBit()` 函数清除对应的中断标志位。
阅读全文