基于STM32F103C8T6的FreeRTOS模板

很多教程都是基于内存大的开发板,像手里只有最小系统板的,做不了相关实验,就把最近学习到的最小系统板的代码分享出来

main.c 

#include "system.h"
#include "SysTick.h"
#include "led.h"
#include "usart.h"
#include "FreeRTOS.h"
#include "task.h"
#include "oled.h"

//起始任务 优先级
#define START_TASK_PRIO 1
//任务堆栈大小
#define START_STK_SIZE  128
//任务句柄
TaskHandle_t StartTask_Handler;
//任务函数
void start_task(void *pvParameters);

//任务一 任务优先级
#define TASK1_PRIO  2
//任务堆栈区大小   
#define TASK1_STK_SIZE 50
//任务句柄
TaskHandle_t TASK1_handler;
//任务函数
void task1(void *pvParameters);

    
//任务二 任务优先级
#define TASK2_PRIO  3
//任务堆栈区大小   
#define TASK2_STK_SIZE 50
//任务句柄
TaskHandle_t TASK2_handler;
//任务函数
void task2(void *pvParameters);

//任务三 任务优先级
#define TASK3_PRIO  4
//任务堆栈区大小   
#define TASK3_STK_SIZE 50
//任务句柄
TaskHandle_t TASK3_handler;
//任务函数
void task3(void *pvParameters);


//任务四 任务优先级
#define TASK4_PRIO  5
//任务堆栈区大小   
#define TASK4_STK_SIZE 50
//任务句柄
TaskHandle_t TASK4_handler;
//任务函数
void task4(void *pvParameters);

/*******************************************************************************
* 函 数 名         : main
* 函数功能		   : 主函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
int main()
{
	SysTick_Init(72);
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置系统中断优先级分组4
	LED_Init();
    GPIO_OUT_Init();
	USART1_Init(115200);
	
	//创建开始任务
    xTaskCreate((TaskFunction_t )start_task,
                (const char*    )"start_task",
                (u16            )START_STK_SIZE,
                (void*          )NULL,
                (UBaseType_t    )START_TASK_PRIO,
                (TaskHandle_t*  )&StartTask_Handler);
    vTaskStartScheduler();          //开启任务调度
}

//开始任务任务函数
void start_task(void *pvParameters)
{
    taskENTER_CRITICAL();           //进入临界区
    //创建TASK1任务
    xTaskCreate((TaskFunction_t )task1,
                (const char*    )"task1",
                (u16            )TASK1_STK_SIZE,
                (void*          )NULL,
                (UBaseType_t    )TASK1_PRIO,
                (TaskHandle_t*  )&TASK1_handler);
                
    xTaskCreate((TaskFunction_t )task2,
                (const char*    )"task2",
                (u16            )TASK2_STK_SIZE,
                (void*          )NULL,
                (UBaseType_t    )TASK2_PRIO,
                (TaskHandle_t*  )&TASK2_handler);                

    xTaskCreate((TaskFunction_t )task3,
                (const char*    )"task3",
                (u16            )TASK3_STK_SIZE,
                (void*          )NULL,
                (UBaseType_t    )TASK3_PRIO,
                (TaskHandle_t*  )&TASK3_handler);
                
    xTaskCreate((TaskFunction_t )task4,
                (const char*    )"task4",
                (u16            )TASK4_STK_SIZE,
                (void*          )NULL,
                (UBaseType_t    )TASK4_PRIO,
                (TaskHandle_t*  )&TASK4_handler);
                
    vTaskDelete(StartTask_Handler); //删除开始任务
    taskEXIT_CRITICAL();            //退出临界区
}

//任务1函数
void task1(void *pvParameters)
{
    while(1)
    {
      PIN_1 = 1;
      vTaskDelay(200);
      PIN_1 = 0;
      vTaskDelay(800);
			
    }
}

//任务2函数
void task2(void *pvParameters)
{
    while(1)
    {
        PIN_2 = 1;
        vTaskDelay(400);
        LED1 = ~LED1;
        PIN_2 = 0;
        vTaskDelay(600);
    }
}

//任务3函数
void task3(void *pvParameters)
{
    while(1)
    {
        PIN_3 = 1;
        vTaskDelay(600);
        PIN_3 = 0;
        vTaskDelay(400);
    }
}

//任务4函数
void task4(void *pvParameters)
{
    while(1)
    {
        PIN_4 = 1;
        vTaskDelay(800);
        PIN_4 = 0;
        vTaskDelay(200);
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值