stm32中断配置出错

stm32 interrupt configurations goes wrong

早上好, 我正在处理一个问题,即在设置另一个引脚时关闭选定引脚上的中断。我的单片机是stm32f4xx。
我的意思是,我已经将 PC0、PC1、PC2、PC3、PB14、PB15 设置为 GPIO_MODE_IT_FALLING 检测,当我将引脚 PA1、PA2、PA3、PA4 设置为 GPIO_MODE_IT_RISING_FALLING 检测时, PC 和 PB 不工作。
如果单独设置 PC-PB,它就可以工作。如果我设置额外的 PA1-4 引脚 PC-PB 就忘记了中断。每个 PC0-3 和 PB14-PB15 的代码如下:

GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = FAULT1_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

HAL_NVIC_SetPriority(EXTI0_IRQn, 5, 0); // EXTI0_IRQn changes on dependently on selected pins e.g. EXTI15_10_IRQn
HAL_NVIC_EnableIRQ(EXTI0_IRQn); // here the same

在我对每个引脚 PC0-3 和 PB14-15 进行迭代后,我对 PA2-PA4 使用相同的模式,如下所示:

GPIO_InitTypeDef GPIO_InitStruct = { 0 };
GPIO_InitStruct.Pin = GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* EXTI interrupt init*/
HAL_NVIC_SetPriority(EXTI1_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(EXTI1_IRQn);
HAL_NVIC_SetPriority(EXTI2_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(EXTI2_IRQn);
HAL_NVIC_SetPriority(EXTI3_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(EXTI3_IRQn);
HAL_NVIC_SetPriority(EXTI4_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(EXTI4_IRQn);

然后引脚PC、PB的中断消失。只有来自 PA 的中断才能正常工作。 如何编写一个程序,让PC、PB和PA中断工作? 我也在用FreeRTOS,也许这里有问题?

遗憾的是,这是 STM32 系列的“特性”。你想做的做不到。

你必须安排你的引出线来解决这个问题:你只能在每个数字的一​​个字母上打断(例如:PA2 或 PB2,不能同时打断)。

另一个限制是数字 5-9 和 10-15 共享中断。您可以在例如 PA5、PB6、PA7、PB8、PC9 上进行中断,但它们会导致相同的处理程序 运行。显然,您随后可以读取处理程序中的 GPIO 输入,但如果信号是瞬时的并且在处理程序 运行 时已经消失,您将不知道发生了哪个信号。