PC13控制LED,主要创建两个任务:LEDTask半秒闪烁一次,CTRTask在10秒后删除LEDTask,然后灯5秒闪烁一次。
#include "main.h"
#include "FreeRTOS.h"
#include "gpio.h"
#include "task.h"
#define START_TASK_PRIO 1
#define START_STK_SIZE 128
TaskHandle_t StartTask_Handler;
void start_task(void *pvParameters);
#define LED1_TASK_PRIO 2
#define LED1_STK_SIZE 128
TaskHandle_t LED1Task_Handler;
void LED1_task(void *pvParameters);
#define CTR_TASK_PRIO 3
#define CTR_STK_SIZE 128
TaskHandle_t CTRTask_Handler;
void CTR_task(void *pvParameters);
char LED1=1;
void start_task(void *pvParameters)
{
taskENTER_CRITICAL();
xTaskCreate((TaskFunction_t ) LED1_task,
(const char* ) "LED1_task",
(uint16_t ) LED1_STK_SIZE,
(void* ) NULL,
(UBaseType_t ) LED1_TASK_PRIO,
(TaskHandle_t* ) &LED1Task_Handler);
xTaskCreate((TaskFunction_t ) CTR_task,
(const char* ) "CTR_task",
(uint16_t ) CTR_STK_SIZE,
(void* ) NULL,
(UBaseType_t ) CTR_TASK_PRIO,
(TaskHandle_t* ) &CTRTask_Handler);
vTaskDelete(StartTask_Handler);
taskEXIT_CRITICAL();
}
void LED1_task(void *pvPatameters)
{
while(1)
{
if(LED1==1)
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
LED1=0;
}
else if(LED1==0)
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
LED1=1;
}
vTaskDelay(500);
}
}
void CTR_task(void *pvPatameters)
{
vTaskDelay(10000);
vTaskDelete(LED1Task_Handler);
while(1)
{
if(LED1==1)
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
LED1=0;
}
else if(LED1==0)
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
LED1=1;
}
vTaskDelay(5000);
}
}
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_FREERTOS_Init();
xTaskCreate((TaskFunction_t ) start_task,
(const char* ) "start_task",
(uint16_t ) START_STK_SIZE,
(void* ) NULL,
(UBaseType_t ) START_TASK_PRIO,
(TaskHandle_t* ) &StartTask_Handler);
vTaskStartScheduler();
}
|