当前位置: 首页 > news >正文

STM32+FreeRTOS移植完整教程(基于CubeMX),从配置到验证一步到位

很多做嵌入式的小伙伴想上 FreeRTOS,但总觉得移植很复杂。其实用STM32CubeMX,配置 FreeRTOS 只需要点几下鼠标

但 CubeMX 生成的代码并不是开箱即用的,这篇文章带你走完从 CubeMX 配置 → 代码生成 → 任务验证的完整流程,并指出那些 CubeMX 不告诉你的关键细节。


一、硬件准备

本教程基于以下硬件平台,同样适用于 STM32F1/4 系列:

  • MCU:STM32F103C8T6(Blue Pill)
  • IDE:Keil MDK v5 或 STM32CubeIDE
  • CubeMX 版本:v6.x(操作步骤通用)

二、CubeMX 配置步骤

2.1 新建工程,选择 MCU

  1. 打开 CubeMX,点击New Project
  2. 搜索STM32F103C8,选中后双击
  3. 系统会提示初始化外设,点 Yes

2.2 配置时钟(RCC)

这一步很关键,很多人卡在这里。

Pinout & Configuration → RCC - HSE: Crystal/Ceramic Resonator (外部8MHz晶振) - LSE: 不需要可以不选
Clock Configuration 标签页 - HSE: 8MHz - PLL: x9 → 72MHz - APB1: 36MHz (不要超过36MHz) - APB2: 72MHz

最终系统时钟SYSCLK = 72MHz

⚠️ FreeRTOS 的configCPU_CLOCK_HZ需要和系统时钟一致。项目里见过很多人这里配了 72MHz,但 FreeRTOSConfig.h 里还是默认的 168MHz。

2.3 配置 FreeRTOS

这是核心步骤:

Pinout & Configuration → Middleware → FREERTOS - Interface: CMSIS_V2 ← 选 V2,功能更完整 - Tasks and Queues 标签页

添加任务

点击Add创建第一个任务:

参数
Task NamedefaultTask
PriorityNormal
Stack Size256 (words)
Entry FunctionStartDefaultTask
Code GenerationAs weak weak (默认即可)

可以继续添加更多任务,建议初期只建 1-2 个。

2.4 关键配置(最容易漏的)

Pinout & Configuration → SYS - Timebase Source: TIM1 ← 非常重要!

为什么?

CubeMX 让你选择 HAL 的时基源。如果不选 TIM1 而保留 SysTick,那 FreeRTOS 和 HAL 库会共用 SysTick,导致:

  • 串口打印乱码(HAL_GetTick 乱掉)
  • 任务调度异常
  • HAL_Delay 不准确

这个坑我已经见太多人踩了,包括我自己。

2.5 生成代码

Project Manager → Project - Project Name: freertos_demo - Location: 你的工作目录 - IDE: MDK-ARM V5 或 STM32CubeIDE Project Manager
http://www.jsqmd.com/news/887107/

相关文章:

  • 从零到量产:DeepSeek测试用例生成落地全链路(模型微调→领域知识注入→结果可信度分级→自动化验收)
  • 森优时铁锌维发根养黑用三个月真实效果实测:内服营养养黑的客观测评
  • Claude Code 费用突然飙升怎么查?7 个缓存失效和错模型配置的常见坑
  • 爱享素材下载器,跨平台多站点资源下载工具
  • 2026年Q2手持式继电保护测试仪靠谱品牌排行:串联谐振耐压试验设备、串联谐振装置、九相微机继电保护测试仪、九相继电保护测试仪选择指南 - 优质品牌商家
  • 3步深度解锁:网络设备权限管理工具的实战手册
  • 从理论到代码:手把手拆解NS方程的守恒形式,并用Python实现一个简单求解器
  • Spine动画跨引擎集成:Unity与Godot的断层修复指南
  • 国内P沟道MOS厂商实测排行:DPAKMOS、MOSFET、N沟道MOS、SOP-8MOS、TO-220MOS选择指南 - 优质品牌商家
  • STT-MTJ并行概率伊辛机设计与优化计算应用
  • 如何用自下而上笔记法告别信息碎片化困扰
  • 开发转兼职DBA(一):只会写SQL的那几年
  • 跟着韩顺平学Java打卡笔记!(Day1)(哪天没学记得踢我一下(✿◡‿◡))
  • 基于DiSEqC协议与AVR单片机实现天线方位角精准控制与存储
  • 【限时解密】Midjourney未公开的粒子物理引擎参数:--particle-dampen、--emission-rate等5个灰度功能实测报告
  • 2026年DPAK:200VMOS、300VMOS、60VMOS、DPAKMOS、MOSFET、N沟道MOS、P沟道MOS选择指南 - 优质品牌商家
  • 别再只用ARIMA了!当数据少得可怜时,试试灰色预测GM(1,1)模型(Python/R实战对比)
  • 录音会议纪要整理不同使用场景,实用口碑选择建议
  • 别再手动建bits文件夹了!Visual Studio 2022一键配置C++万能头文件bits/stdc++.h的两种方法
  • 2026年当下广西护栏网批发厂家选哪家?资深行业分析师的专业推荐指南 - 2026年企业推荐榜
  • 磁吸扳手收纳架美国外观专利侵权预警,部分亚马逊热链遭投诉下架!
  • 深度解析:企业如何通过 AI Agent Harness Engineering 提升利润率与人效倍数
  • Windows 10/11 下用命令行搞定Kaggle提交:告别网页卡顿,一条命令上传submission.csv
  • 太蓝新能源首日亮相2026深圳无人机展,量产级固态电池赋能低空经济
  • LOOKAHEAD REASONING:大型推理模型的并行加速技术
  • JavaScript 与 TypeScript 的主要区别
  • AI驱动自动化和智能体AI-加速钻头创新
  • Claude的安装,以及academic-research-skills的安装与使用
  • 组态王通用扫码枪配置
  • 那曲虫草头期草和中期草哪个好