Stm32 有没有办法在PA0和PB0上都触发中断?

Stm32 有没有办法在PA0和PB0上都触发中断?,stm32,interrupt,Stm32,Interrupt,PDF手册的语言让我非常困惑,谷歌搜索也让我不确定。我的理解正确吗?您只能将16个外部按钮中断连接到16个不同的管脚,并且不能同时配置PA0和PB0,或者说PB5和PC5?所以您基本上被限制为16个外部按钮?确实,外部GPIO中断的数量被限制为16个,并且您不能同时将PA0和PB0配置为源 然而,外部中断并不是读取按钮状态的唯一方法。您可以使用定时器中断实现周期性GPIO扫描机制。例如,键盘扫描方法允许您使用x+yGPIO引脚扫描x*y按钮。此方法可以选择使用外部中断(x EXTI用于x*y按钮

PDF手册的语言让我非常困惑,谷歌搜索也让我不确定。我的理解正确吗?您只能将16个外部按钮中断连接到16个不同的管脚,并且不能同时配置PA0和PB0,或者说PB5和PC5?所以您基本上被限制为16个外部按钮?

确实,外部GPIO中断的数量被限制为16个,并且您不能同时将PA0和PB0配置为源


然而,外部中断并不是读取按钮状态的唯一方法。您可以使用定时器中断实现周期性GPIO扫描机制。例如,键盘扫描方法允许您使用
x+y
GPIO引脚扫描
x*y
按钮。此方法可以选择使用外部中断(x EXTI用于
x*y
按钮)。

您可以将计时器转移到另一条从GPIO到中断控制器NVIC的触发线:

在其中一个管脚处找到与定时器相关的备用功能(可以是任意自由“TIMx”的TIMx_-ETR、TIMx_-CH1或TIMx_-CH2,但据我所见,不是TIMx_-CH3或TIMx_-CH4)

将TIMx配置为使用ETR或链接到pin的相应通道作为外部触发器输入,并在第一个事件时溢出(PSC=ARR=RCR=0)。然后,每次该引脚更改时,您都会收到一个中断


通过选择侧面极性并根据需要激活噪声过滤,您可以进一步扩展此设计。

我在STM32文档中找不到任何关于关键字
键盘扫描的信息。据我所知,您的建议,定时器用于生成中断,并通过软件(ISR)或DMA对GPIO进行采样。我添加的答案使用了一种不同的机制,只要相应的硬件外围设备仍然可用,我觉得更可取。键盘扫描方法不是STM32特有的,因此不包括uC手册。它用于带有矩阵连接按钮的键盘。例如4x4。在此配置中,4个管脚为输出管脚,
1000
0111
图案定期旋转。其他4个管脚是输入,可选配置为EXTI管脚。谢谢你告诉我-我刚刚学到了一些新东西。然后我想你的意思是在一个固定的时间段内使用定时器来改变输出位模式,同时轮询输入。所以,我会把我的答案放在你的答案旁边。