作业—FreeRTOS入门

本文介绍了如何在STM32上使用FreeRTOS实现一个包含3个周期任务的程序:LED每500ms闪烁,每2000ms发送串口数据,每5000ms读取温湿度。通过keil5进行编译,mcuisp烧录代码,详细步骤包括工程设置、任务创建和延时函数的实现。注意硬件条件的限制和keil版本要求。
摘要由CSDN通过智能技术生成

零、需求软件(自行下载)

1、keil5.1(编译生成.hex文件)
2、mcuisp(烧录代码)
3、多功能助手(调试,显示数据)

一、任务要求

在STM32下完成一个基于FreeRTOS的多任务程序,执行3个周期性task:
task1,每间隔500ms闪烁(变化)一次LED;
task2,每间隔2000ms,向串口发送一次指令数据“helloworld!";
task3,每间隔5000ms,从AHT20采集一次温湿度数据。

二、FreeRTOS的使用

1、原理

2、多任务程序

(1)在下载的资料里找到图示文件夹
在这里插入图片描述
(2)用keil5打开工程。

==注:电脑安装的keil版本最好是5.1以上,否则可能会出现一些问题。

在这里插入图片描述

可以看到,此时的该工程文件已完成拷贝 FreeRTOS Package 到裸机工程,FreeRTOSConfig.h 文件到 user 文件夹的工作,无需手动添加。FreeRTOS/src 和 FreeRTOS/port 组也已建立完成。
可以直接进行修改编译。

(3)按照任务要求进行修改
①在main.c文件里面找到任务句柄,将其修改为:

/* 创建任务句柄 */
static TaskHandle_t AppTaskCreate_Handle = NULL;
/* LED任务句柄 */
static TaskHandle_t LED1_Task_Handle = NULL;//每间隔500ms闪烁(变化)一次LED
/* hello任务句柄 */
static TaskHandle_t hello_Task_Handle = NULL;/* 每间隔2000ms,向串口发送一次指令数据“helloworld!"*/
/* AHT20任务句柄 */
static TaskHandle_t AHT_Task_Handle = NULL;¡//每间隔5000ms,从AHT20采集一次温湿度数据

②在main.c文件的主程序中加入创建hello_Task任务和创建AHT_Task任务

	/* ´创建hello_Task任务 */
  xReturn = xTaskCreate((TaskFunction_t )hello_Task, /* 任务入口函数*/
                        (const char*    )"hello_Task",/* 任务名字 */
                        (uint16_t       )512,   /* 任务栈大小*/
                        (void*          )NULL,	/* 任务入口函数参数 */
                        (UBaseType_t    )3,	    /* 任务优先级 */
                        (TaskHandle_t*  )&hello_Task_Handle);/* 任务控制块指针*/
  if(pdPASS == xReturn)
    printf("创建hello_Task任务成功!\r\n");
	
		/* 创建AHT_Task任务 */
  xReturn = xTaskCreate((TaskFunction_t )AHT_Task, /* 任务入口函数 */
                        (const char*    )"AHT_Task",/* 任务名字*/
                        (uint16_t       )512,   /* 任务栈大小 */
                        (void*          )NULL,	/* 任务入口函数参数*/
                        (UBaseType_t    )3,	    /* 任务优先级 */
                        (TaskHandle_t*  )&AHT_Task_Handle);/* 任务控制块指针 */
  if(pdPASS == xReturn)
    printf("创建AHT_Task任务成功!\r\n");

③加入hello_Task函数的延时函数

static void hello_Task(void* parameter)
{
   	
    while (1)
    {
   
        vTaskDelay(2000);   /* 延时2000个tick */
        printf("helloworld£¡\r\n");
    }
}

④加入AHT_Task函数的延时函数


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值