STM32L051使用HAL库操作实例(12)- FreeRTOS系统点亮LED实例

目录

一、前言

二、FreeRTOS目录文件介绍

三、STM32CubeMX配置(本文使用的STM32CubeMX版本为5.6.0)

1.MCU选型

2.使能时钟

3.时钟配置

​4.设置GPIO口

5.GPIO口配置

6.配置FreeRTOS

7.配置STM32CubeMX生成工程文件

         8.点击GENERATE CODE生成工程文件

四、KEIL程序



一、前言

FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要。由于RTOS需占用一定的系统资源(尤其是RAM资源),只有μC/OS-II、embOS、salvo、FreeRTOS等少数实时操作系统能在小RAM单片机上运行。相对μC/OS-II、embOS等商业操作系统,FreeRTOS操作系统是完全免费的操作系统,具有源码公开、可移植、可裁减、调度策略灵活的特点,可以方便地移植到各种单片机上运行。

STM32L051使用HAL库操作实例(12)- FreeRTOS系统点亮LED实例_第1张图片

详细了解可至官网链接: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

STM32L051使用HAL库操作实例(12)- FreeRTOS系统点亮LED实例_第2张图片

  • FreeRTOS系统配置及参数用途

STM32L051使用HAL库操作实例(12)- FreeRTOS系统点亮LED实例_第3张图片

STM32L051使用HAL库操作实例(12)- FreeRTOS系统点亮LED实例_第4张图片

  • 添加任务,如图创建了三个一样的任务,分别用于控制LED1、LED2、LED3。

STM32L051使用HAL库操作实例(12)- FreeRTOS系统点亮LED实例_第5张图片

  • FreeRTOS时钟源配置,(当使用了FreeRtos的时候,建议HAL库使用除了Systick以外的时钟源。也就是说当不使用FreeRtos的时候,HAL使用的是systick作为时钟源,现在使用了rtos,不建议hal库和rtos一起使用systick作为时钟源。)这里我们使用TIM2作为HAL库的时钟源.

STM32L051使用HAL库操作实例(12)- FreeRTOS系统点亮LED实例_第6张图片

 

7.配置STM32CubeMX生成工程文件


8.点击GENERATE CODE生成工程文件

STM32L051使用HAL库操作实例(12)- FreeRTOS系统点亮LED实例_第7张图片

四、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.csdn.net/download/cheng_nnan/16545028

你可能感兴趣的:(STM32L0,STM32,stm32,c语言,freertos)