目录
三、STM32CubeMX配置(本文使用的STM32CubeMX版本为5.6.0)
一、前言
FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要。由于RTOS需占用一定的系统资源(尤其是RAM资源),只有μC/OS-II、embOS、salvo、FreeRTOS等少数实时操作系统能在小RAM单片机上运行。相对μC/OS-II、embOS等商业操作系统,FreeRTOS操作系统是完全免费的操作系统,具有源码公开、可移植、可裁减、调度策略灵活的特点,可以方便地移植到各种单片机上运行。
详细了解可至官网链接:FreeRTOS官方网站
二、FreeRTOS目录文件介绍
使用HAL库生成的FreeRTOS版本为V10.0.1版本,生成的工程文件Middlewares文件夹内包含了FreeRTOS所需的相关文件。在FreeRTOS文件夹中主要关注source文件夹,这里是FreeRTOS的全部源码,包括6个c文件和include文件夹下的多个h文件。另外,在portable文件夹下,是针对不同硬件平台的单独区分使用的代码,我们工程所使用的为STM32L051C8T6,所以portable文件夹只需使用RVDS的ARM_CM0
关于各个c文件的主要用途:
- port.c : 针对不同硬件平台的接口
- heap_4.c : 内存管理相关
- croutine.c : 协程相关
- event_groups.c : 事件标志组相关
- list.c : 列表,FreeRTOS的一种基础数据结构
- queue.c : 队列相关
- tasks.c : 任务创建、挂起、恢复、调度相关
- timers.c : 软件定时器相关
三、STM32CubeMX配置(本文使用的STM32CubeMX版本为5.6.0)
思路:配置相关外设及增加FreeRTOS系统,创建三个任务,使开发板上电后LED1-LED3同时闪烁;
1.MCU选型
本例程使用的为STM32L051C8T6型号
2.使能时钟
3.时钟配置

4.设置GPIO口
5.GPIO口配置
根据原理图可知GPIO口输出低电平LED点亮,高电平LED就熄灭,所以默认设置上电状态为高电平
6.配置FreeRTOS
- 勾选FreeRTOS,选择新版本:CMSIS_V1
- FreeRTOS系统配置及参数用途
- 添加任务,如图创建了三个一样的任务,分别用于控制LED1、LED2、LED3。
- FreeRTOS时钟源配置,(当使用了FreeRtos的时候,建议HAL库使用除了Systick以外的时钟源。也就是说当不使用FreeRtos的时候,HAL使用的是systick作为时钟源,现在使用了rtos,不建议hal库和rtos一起使用systick作为时钟源。)这里我们使用TIM2作为HAL库的时钟源.
7.配置STM32CubeMX生成工程文件
8.点击GENERATE CODE生成工程文件
四、KEIL程序
1.相关函数:
在"freertos.c"文件内修改StartTask01-StartTask03函数的代码,如StartTask03更改后如下图所示;
void StartTask03(void const * argument)
{
/* USER CODE BEGIN StartTask03 */
/* Infinite loop */
for(;;)
{
HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
osDelay(500);
}
/* USER CODE END StartTask03 */
}
2.编译文件,下载。开发板上电实现效果如下:
FreeRTOS
资源下载:https://download.youkuaiyun.com/download/cheng_nnan/16545028