Stm32 紫外线Led灯

Stm32 紫外线Led灯,stm32,keil,Stm32,Keil,这是我第一次编程mikrokontroler,我使用uVison并使用stm32进行编程 我有两个LED灯在它的引脚上:引脚4和引脚5与教程我知道如何使一眨眼(代码如下),但我不知道如何使他们机器人眨眼没有相同的延迟。就像我想让引脚4 led具有100毫秒的延迟,引脚5 led具有50毫秒的延迟。下面的代码是一个Led灯的代码 /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE EN

这是我第一次编程mikrokontroler,我使用uVison并使用stm32进行编程

我有两个LED灯在它的引脚上:引脚4和引脚5与教程我知道如何使一眨眼(代码如下),但我不知道如何使他们机器人眨眼没有相同的延迟。就像我想让引脚4 led具有100毫秒的延迟,引脚5 led具有50毫秒的延迟。下面的代码是一个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 */

}
你有两个选择

首先,您可以设置一个计时器来计算毫秒数。您可以从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 */

}