利用RTOS实现LED灯交替闪烁
1、初始化
(1)时钟源
- 使能
RCC
启用外部晶振
(2)GPIO
- 使能
PC0
和PC1
,改为上拉推挽输出,用于控制小灯
(3)RTOS
- 按照如下方式使能
RTOS
- 选择一个空闲的计时器,作为基本时钟源
2、编辑进程
(1)创建进程
- 在
CubeMX
中创建进程
- 点击
Add
后,编辑线程名称和函数名称,完成后再点击OK
按钮
- 此处添加2个任务
(2)写入内容
- 在
RTOS
环境中,任务会执行指定的Entry Function
,因此我们需要在指定的进入函数处写入代码
主函数流程图:
- 在上一步中,我们指定了
void led1Task(void *argument)
和void led2Task(void *argument
两个函数
两线程的流程图(思路):
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、实验效果
- 编译烧录后,两小灯会交替闪烁,每次闪烁五次