gpt4 book ai didi

c - 如何修复在 EXTI9-5 上多次触发的中断?

转载 作者:行者123 更新时间:2023-11-30 14:38:39 25 4
gpt4 key购买 nike

我正在研究 STM32F303CC。在此 MCU 上,我使用 6 个按钮作为中断。其中 5 个按钮连接到 EXTI15-10,1 个连接到 EXTI9-5。 EXTI15-10 上的按钮工作正常。不过,当我按下 EXTI9-5 上的按钮时,它会触发令人难以置信的次数(随机在 1500 到 4000 次之间左右)。

它会清除标志,并且当中断函数中添加断点时,它只会触发一次。

我尝试查看是否是硬件弹跳,但用示波器检查时没有弹跳。下降沿和上升沿触发检测也存在此问题。

我希望在按下后仅触发一次中断,但实际上它触发了很多次。

可能是什么问题?

提前致谢,鲁本

GPIO 配置:

  /*Configure GPIO pins : BUTTON_6_Pin BUTTON_5_Pin BUTTON_4_Pin BUTTON_3_Pin 
BUTTON_2_Pin BUTTON_1_Pin BUTTON_7_Pin */
GPIO_InitStruct.Pin = BUTTON_6_Pin|BUTTON_5_Pin|BUTTON_4_Pin|BUTTON_3_Pin
|BUTTON_2_Pin|BUTTON_1_Pin|BUTTON_7_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

处理程序1:

void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)
{
/* EXTI line interrupt detected */
if(__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != RESET)
{
__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
HAL_GPIO_EXTI_Callback(GPIO_Pin);
}
}

处理程序2:

    void EXTI9_5_IRQHandler(void)
{
/* USER CODE BE

GIN EXTI9_5_IRQn 0 */

/* USER CODE END EXTI9_5_IRQn 0 */
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_8);
/* USER CODE BEGIN EXTI9_5_IRQn 1 */

/* USER CODE END EXTI9_5_IRQn 1 */
}

/**
* @brief This function handles EXTI line[15:10] interrupts.
*/
void EXTI15_10_IRQHandler(void)
{
/* USER CODE BEGIN EXTI15_10_IRQn 0 */

/* USER CODE END EXTI15_10_IRQn 0 */
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_10);
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_11);
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_12);
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_14);
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_15);
/* USER CODE BEGIN EXTI15_10_IRQn 1 */

/* USER CODE END EXTI15_10_IRQn 1 */
}

最佳答案

what could be the problem?

您有没有考虑过可能是跳出造成的?

it clears the flag, and when there's a breakpoint added to the interrupt function it only fires one time.

对我来说,这听起来像是您需要对按钮进行去抖[1][2]或添加模拟过滤。

您能与我们分享电路图吗?

.

[1] https://www.allaboutcircuits.com/technical-articles/switch-bounce-how-to-deal-with-it/

[2] https://en.wikipedia.org/wiki/Keyboard_technology#Debouncing

关于c - 如何修复在 EXTI9-5 上多次触发的中断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56475009/

25 4 0
文章推荐: c# - 如何将 List 动态绑定(bind)到 WPF 中的 DataGrid?