uVision LED灯

时间:2017-12-09 16:11:17

标签: stm32 keil

这是我第一次使用mikrokontro编程,我正在使用uVison并使用stm32进行编程。

我的针脚上有两个LED指示灯:PIN_4和PIN_5带有一个教程,我知道如何进行一次闪烁(下面的代码),但我不知道如何让它们以不同的延迟闪烁。就像我想让PIN_4导致延迟100ms和PIN:5导致延迟50ms。下面的代码是一个Led灯的代码。

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */

HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_4); //Toggle the state of pin PC9
  HAL_Delay(100); //delay 100ms     

  }
  /* USER CODE END 3 */

}

1 个答案:

答案 0 :(得分:1)

您有2个选项。

首先,您可以设置计时器以计算毫秒数。您可以从STMCubeMX生成50ms定时器的代码。然后,在定时器回调函数中,您应该将引脚设置为高或低。

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    timer_counter++; //50ms

    HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5);

    if(timer_counter>=2)  //100ms
    {
        HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_4);
        timer_counter = 0;
    }
}

第二个选项是主延迟。

/* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */
      HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5); //Toggle the state of pin PB5
      HAL_Delay(50); //delay 50ms     

      HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_4); //Toggle the state of pin PB4
      HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5); //Toggle the state of pin PB5
      HAL_Delay(50);  // delay 50ms
  }
  /* USER CODE END 3 */

}