本文介绍使用 STM32CubeMX 创建一个包含 FreeRTOS 的工程。关于 STM32CubeMX 的安装另见:STM32 工程的创建 - 基于 HAL 库。此外,这篇文章将在 基础工程 之上直接实现利用 FreeRTOS 进行点灯操作。

FreeRTOS 的配置

打开 STM32CubeMX 配置界面:

image.png

使用 FreeRTOS 时,必须为 HAL 设置一个非 SysTick 定时器作为 HAL 的基础时钟,SysTick 将自动作为 FreeRTOS 的基础时钟。

image.png

这里我们选择 V2 接口。V1 和 V2 版本主要的区别在于,V2 兼容支持的硬件更多,内存耗费更多。

image.png

配置内核参数:

  • Task and Quenes: 任务与队列的创建。
  • Timers and Semaphores: 定时器和信号量的创建。
  • Mutexes: 互斥量的创建。
  • FreeRTOS Heap Usage: 用于查看堆使用情况。
  • config parameters: 内核参数设置,用户根据自己的实际应用来裁剪定制 FreeRTOS 内核。
  • Include parameters: FreeRTOS 部分函数的使能。
  • User Constants: 相关宏的定义,可以自建一些常量在工程中使用。

image.png

点击 GENERATE 生成代码。然后编译一遍确保无误。

编写任务

首先保证 main.c 的循环中没有内容。

1
2
3
4
5
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}

找到 freertos.c

image.png

找到我们刚刚指定的任务函数:

image.png

写上翻转灯的逻辑:

1
2
3
4
5
6
7
8
9
10
11
void led_task_func(void *argument)
{
/* USER CODE BEGIN led_task_func */
/* Infinite loop */
for(;;)
{
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);
osDelay(100);
}
/* USER CODE END led_task_func */
}

编译成功后下载即可。

本文参考