FreeRTOS 入门(一):引入并创建工程
目录
- 一、前言
- 二、裸机开发的四种核心模式
- 三、FreeRTOS 核心思想与后续项目规划
- 四、硬件配置(基于 CT117E-M4 开发板)
- 五、从零创建 FreeRTOS 工程(CubeMX 配置)
- 5.1 芯片选择与基础配置(RCC、SYS)
- 5.2 时钟频率配置
- 5.3 FreeRTOS 组件配置
- 5.4 工程输出配置
- 六、结尾
一、前言
大家好,我是 Hello_Embed。之前我们系统学习了 C 语言数据结构(链表、栈、队列、二叉树等),但在嵌入式开发场景中,二叉树的直接应用相对有限,后续会根据实际需求随缘更新相关内容。
从本篇开始,我们将正式切入嵌入式核心开发 ——FreeRTOS 实时操作系统的学习。本系列笔记基于 B 站韦东山 FreeRTOS 系列视频,结合蓝桥杯嵌入式比赛的筹备需求,选择 CT117E-M4 开发板(STM32G431RBT6)作为实验平台,从基础概念到工程搭建,逐步推进嵌入式多任务开发的学习。
二、裸机开发的四种核心模式
在学习 RTOS 之前,先回顾裸机开发的四种经典模式,理解 RTOS 解决的核心痛点:
2.1 轮询模式
- 核心逻辑:主程序通过死循环依次执行所有操作,无优先级区分;
- 缺点:某一操作耗时过长时,会阻塞后续所有操作,执行效率极低,无法满足实时性需求。
2.2 前后台模式
- 核心逻辑:以主程序为 “后台”,中断服务程序为 “前台”,中断信号触发时打断后台进程执行;
- 优势:初步解决操作间的直接冲突;
- 缺点:中断处理时间过长时,仍会阻塞后台进程,未彻底消除操作间的相互影响。
2.3 定时器模式
- 核心逻辑:基于定时器驱动,按预设频率触发不同函数执行,实现多操作的定时调度;
- 优势:可按需求分配执行频率,比前后台模式更灵活;
- 缺点:某一函数执行耗时过长,仍会导致其他函数推迟执行,操作间的相互影响依然存在。
2.4 基于状态机模式
- 核心逻辑:将复杂函数拆分为若干独立步骤,每次调用仅执行一个步骤,快速切换执行不同函数;
- 优势:大幅降低操作间的阻塞影响,执行响应更快;
- 缺点:对于功能复杂的程序,步骤拆分难度大,维护成本高。
三、FreeRTOS 核心思想与后续项目规划
3.1 FreeRTOS 核心思想
FreeRTOS 是一款轻量级实时操作系统,核心解决方案是多任务交替执行:
- 为每个独立功能创建专属的死循环任务函数;
- 通过任务调度器严格控制各任务的执行时间片;
- 任务间交替执行,既消除了单任务阻塞的问题,又能让低精度需求场景下 “感觉各任务一直在运行”,彻底解决裸机模式下的操作间相互影响。
3.2 后续项目规划
结合开发板资源,后续将通过三个递进式小项目掌握 FreeRTOS 核心技能:
- 核心项目:打砖块游戏(将逐步用 FreeRTOS 技术优化,迭代升级);
- 拓展项目:音乐播放、汽车游戏;
- 核心项目框架(打砖块):

说明:教程默认使用 OLED0.96 寸屏,本笔记基于开发板搭载的 TFT-LCD2.4 寸屏,后续驱动文件与代码会做相应适配调整。
四、硬件配置(基于 CT117E-M4 开发板)
4.1 开发板核心参数
- 实验平台:CT117E-M4 嵌入式开发板;
- 微控制器:STM32G431RBT6;
- 板载布局与外设资源:

4.2 外设扩展计划
后续将根据项目需求,通过板载接口接入额外外设(如按键、传感器等),完成 FreeRTOS 多任务联动开发,具体配置会在对应项目章节详细说明。
五、从零创建 FreeRTOS 工程(CubeMX 配置)
以下是基于 STM32G431RBT6 的 FreeRTOS 工程搭建完整步骤,使用 STM32CubeMX 可视化配置,高效快捷。
5.1 芯片选择与基础配置(RCC、SYS)
- 打开 STM32CubeMX,搜索并选择芯片 “STM32G431RBT6”(根据自身开发板芯片型号选择);
- RCC 配置(时钟源):

选择外部时钟源(HSE),确保时钟稳定性;
- SYS 配置(调试模式):

选择调试接口(如 Serial Wire),方便后续程序下载与调试。
5.2 时钟频率配置
根据 STM32G431 的芯片特性,配置系统时钟频率(推荐配置如下):

确保时钟树配置无误,为 FreeRTOS 提供稳定的计时基础。
5.3 FreeRTOS 组件配置
- 在 CubeMX 左侧组件列表中,勾选 “FreeRTOS”(选择 CMSIS-V2 接口,兼容性更强);
- 具体配置(任务、队列、定时器等初始配置):

初始阶段保持默认配置,后续根据任务需求添加和调整;
- 任务配置细节:

可先创建一个测试任务,验证工程可行性。
5.4 工程输出配置
- Project 配置(工程路径、名称、工具链):

选择工程保存路径,命名规范(如 “FreeRTOS_Demo_STM32G431”),工具链选择 MDK-ARM(Keil);
- 代码生成配置:

勾选 “生成独立的.c/.h 文件”,便于代码管理;
- 工程后续设置(Keil 中):
- 修改烧录方式(对应开发板调试器,如 J-Link、ST-Link);
- 勾选 “重载并运行”(下载程序后自动运行);
- 取消 Pack 中 “enable” 的勾选(避免兼容性问题)。
注意:若使用 STM32F103C8T6 开发板,建议直接跟随韦东山视频的配置步骤操作;FreeRTOS 的核心思想与硬件无关,掌握基础逻辑后可跨芯片融会贯通。
六、结尾
本篇笔记完成了从数据结构到嵌入式 FreeRTOS 的过渡,明确了裸机开发的痛点与 RTOS 的核心优势,同时基于 STM32G431RBT6 完成了 FreeRTOS 工程的基础搭建。
后续将以 “打砖块游戏” 为核心,逐步学习 FreeRTOS 的多任务创建、任务调度、队列通信、定时器使用等核心技能,结合 TFT-LCD 屏驱动、按键中断、外设联动等嵌入式开发必备知识点,实现从 “裸机” 到 “多任务 OS” 的跨越。
嵌入式开发的核心是 “理论 + 实践”,后续将通过具体项目拆解知识点,确保每个环节都能动手验证。我是 Hello_Embed,FreeRTOS 系列笔记将持续更新,欢迎关注,一起扎实掌握嵌入式多任务开发的核心技能!
