ST意法半导体
直播中

卢表镜

8年用户 1109经验值
私信 关注
[问答]

在EXTI中如何知道是哪个端口产生了中断?

阅读文档后我了解到中断由 pin# 处理,我们在 EXti_ConfigTypeDef 中设置 GPIOsel。
我的问题是我们如何确定哪个端口产生中断?
假设我使用 PA0 和 PB0,我只想为它们使用一个回调函数。
无效回调()
{
      如果(端口== GPIOA)
      {
               做点什么
       }
      
       否则如果(端口== GPIOB)
       {
                做其他事
        }
}









回帖(1)

李大帅

2023-2-1 14:57:19
,不幸的是,EXTI不能为 PA0 和 PB0 编程(当您开始使用 CubeMX 进行设计时,您应该已经看到了这个限制)。
一些可能的解决方案(仅供参考,未经测试):


  • 将一个引脚移动到另一个 GPIO(例如将 PB0 移动到 PB1)
  • 如果您知道每个引脚的中断时间(这种情况很少见),那么您可以在需要时重新编程 EXTI。
  • 您可以在外部将两个通道合并到同一引脚(门或二极管,如果足够慢)以用于中断目的,同时您仍然将两个通道连接到不同的端口以检查中断例程中的引脚电平(如果在处理之前消失,则存在“幽灵”中断的风险)
  • 您可以使用具有中断功能的 IO 扩展器(通常由 I2C 控制)
  • 在 PA0 的特殊情况下,您可能很幸运,因为您可以使用 WKP1 功能(通过 PWR,而不是 EXTI)作为解决方法(并保留 PB0 到 EXTI)。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分