STM32F4 EXTI0中按下按钮后延迟

时间:2016-04-15 15:21:31

标签: c embedded stm32

如果已经按下按钮,我试图阻止用户按下按钮1秒钟。可以在不使用main.c中的superloop的情况下完成吗? 我的EXTI0在stm32f4xx_it。

void EXTI0_IRQHandler(void)
{
  /* USER CODE BEGIN EXTI0_IRQn 0 */
    if (HAL_GPIO_ReadPin (GPIOA,GPIO_PIN_0))
        {
            HAL_GPIO_WritePin (GPIOD, GPIO_PIN_12, GPIO_PIN_SET);
            TIM1_TRG_COM_TIM11_IRQHandler();
            HAL_GPIO_WritePin (GPIOD, GPIO_PIN_12, GPIO_PIN_RESET);
        } 
        else
        {
            HAL_GPIO_WritePin (GPIOD, GPIO_PIN_12, GPIO_PIN_RESET);
        }
  /* USER CODE END EXTI0_IRQn 0 */
  HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
  /* USER CODE BEGIN EXTI0_IRQn 1 */

  /* USER CODE END EXTI0_IRQn 1 */
}

1 个答案:

答案 0 :(得分:0)

如果用户按下按钮,您可以获得系统时间并将其保存在变量中。如果用户再次按下,您可以检查是否已经过了足够的时间。这个例子只是为了展示机制,只是解决问题的一种可能性。

 int nLastPress = 0;
 void EXTI0_IRQHandler(void)
 {
      if(nLastPress + 1 < SYSTEM_TIME_IN_SECONDS)
      {
         // do your stuff
         nLastPress = SYSTEM_TIME_IN_SECONDS;
      }
      else
      {
          // don't handle user input
      }
 }