利用RTOS实现LED灯交替闪烁

利用RTOS实现LED灯交替闪烁

1、初始化

(1)时钟源

  • 使能RCC启用外部晶振
    img
    img

(2)GPIO

  • 使能PC0PC1,改为上拉推挽输出,用于控制小灯
    img
    img

(3)RTOS

  • 按照如下方式使能RTOS
    img
  • 选择一个空闲的计时器,作为基本时钟源
    img

2、编辑进程

(1)创建进程

  • CubeMX中创建进程
    img
  • 点击Add后,编辑线程名称和函数名称,完成后再点击OK按钮
    img
  • 此处添加2个任务
    img
    img

(2)写入内容

  • RTOS环境中,任务会执行指定的Entry Function,因此我们需要在指定的进入函数处写入代码

主函数流程图:
img

  • 在上一步中,我们指定了void led1Task(void *argument)void led2Task(void *argument两个函数

两线程的流程图(思路):
img

I led1Task

  • 并行实现交替闪烁的方式是一方闪烁,一方延时,因此代码如下:
/* USER CODE END Header_led1Task */
void led1Task(void *argument)
{
  /* USER CODE BEGIN led1Task */
  /* Infinite loop */
  for(;;)
  {
	  for(int i = 0; i < 5; i++){
//		  osDelay(200);
		  HAL_GPIO_WritePin(GPIOC, LED0_Pin, GPIO_PIN_SET);
		  osDelay(100);
		  HAL_GPIO_WritePin(GPIOC, LED0_Pin, GPIO_PIN_RESET);
		  osDelay(100);
	  }
	  osDelay(1000);

  }
  /* USER CODE END led1Task */
}

II led2Task

  • 有理可得,led2Task函数的代码如下
void led2Task(void *argument)
{
  /* USER CODE BEGIN led2Task */
  /* Infinite loop */
  for(;;)
  {
	  osDelay(1000);
	  for(int i = 0; i < 5; i++){
		  osDelay(100);
		  HAL_GPIO_WritePin(GPIOC, LED1_Pin, GPIO_PIN_SET);
		  osDelay(100);
		  HAL_GPIO_WritePin(GPIOC, LED1_Pin, GPIO_PIN_RESET);
	  }
    }
  /* USER CODE END led2Task */
}

3、实验效果

  • 编译烧录后,两小灯会交替闪烁,每次闪烁五次
posted @ 2025-10-22 08:44  奶龙大王  阅读(20)  评论(0)    收藏  举报