2、开发环境搭建:Keil MDK安装、STM32CubeMX配置、FreeRTOS源码获取
好,咱们正式开始动手了。
做嵌入式开发,说白了就是三件事:写代码的工具、生成代码的工具、以及操作系统的源码。这三样东西凑齐了,你才能往下走。
我个人习惯先把环境搭得干干净净再干活。不然写到一半发现编译器报错、CubeMX配置不对、FreeRTOS版本不匹配……那感觉,就像你炒菜到一半发现没盐,特别扫兴。
2.1 Keil MDK 安装与破解
Keil MDK,咱们圈里人常叫它「Keil」。这是ARM内核单片机开发的主流IDE。我这些年用过IAR、GCC、甚至用VS Code搭过环境,但说实话,做FreeRTOS移植,Keil还是最省心的。
2.1.1 下载与安装
- 去官网下载:搜索「Keil MDK ARM」,找到下载页面。建议下载最新稳定版,比如MDK 5.38或5.39。别追太新的版本,容易踩坑。
- 运行安装包:一路Next就行。安装路径我建议别用中文,也别带空格。比如
D:\Keil_v5就挺好。 - 安装器件包:Keil安装完后,会自动弹出Pack Installer。你需要在里面找到你的芯片型号。比如咱们用STM32F407,就搜「STM32F4」,勾上对应的DFP(Device Family Pack)。
2.1.2 注册与破解
嗯,这里要聊点「灰色地带」的事了。Keil是收费软件,但咱们学习阶段,用社区版或者评估版就够了。不过评估版有代码大小限制(32KB),做个小Demo还行,做完整项目肯定不够。
我建议你去找个注册机。具体操作我不细说了,网上教程一大把。但有一点我要提醒你:杀毒软件可能会报毒。注册机这东西,本质上就是修改软件授权,杀毒软件会把它当成病毒。我当年第一次用的时候,被360直接干掉了,还以为是电脑中毒了……后来关了杀软才搞定。
2.2 STM32CubeMX 配置
STM32CubeMX,我管它叫「图形化配置神器」。以前做STM32开发,得对着数据手册一个个寄存器去配,那叫一个痛苦。现在好了,点几下鼠标,时钟树、外设、引脚就全搞定了。
2.2.1 安装CubeMX
- 下载地址:ST官网搜索「STM32CubeMX」,下载最新版。需要注册ST账号,免费注册就行。
- 安装过程:同样一路Next。安装路径也别带中文。
- 安装固件包:打开CubeMX,点击Help → Manage embedded software packages。找到你用的芯片系列,比如STM32F4,下载对应的固件包。我建议下载最新的,但别太新——有时候最新版会有bug。
核心操作: 打开CubeMX,新建工程,选择芯片型号(比如STM32F407VGT6)。然后你会看到一个图形化的芯片引脚图。这就是咱们的主战场。
2.2.2 基础配置步骤
咱们先配一个最基础的工程,后面移植FreeRTOS时会用到。
- 配置时钟源:在RCC设置里,HSE选择Crystal/Ceramic Resonator。这是外部晶振,精度高。
- 配置时钟树:在Clock Configuration页面,把HCLK调到168MHz(F407的最高主频)。你想想看,跑操作系统,频率越高越好。
- 配置调试接口:在SYS设置里,Debug选择Serial Wire。这个很重要!不配的话,你下载完程序就再也连不上调试器了。我刚开始学的时候吃过这个亏,程序一跑,调试器就断开,还以为芯片烧了……
- 配置一个串口:在USART1设置里,模式选Asynchronous,波特率115200。后面咱们要用串口打印调试信息。
2.2.3 生成代码
配置完成后,点击Project Manager,设置工程名、路径、IDE选择MDK-ARM V5。然后点击GENERATE CODE,CubeMX就会帮你生成一个完整的Keil工程。
生成的代码里,有HAL库的初始化、时钟配置、外设初始化。你打开Keil工程,直接就能编译通过。这就是现代开发的效率——以前写这些初始化代码,至少得半天。
2.3 FreeRTOS 源码获取
FreeRTOS,嵌入式实时操作系统的「老大哥」。开源、免费、稳定,几乎成了RTOS的事实标准。我这些年做过的项目,从智能家居到工业控制器,十有八九都在用FreeRTOS。
2.3.1 从哪里下载
有两个地方可以拿到源码:
- 官方GitHub仓库:搜索「FreeRTOS/FreeRTOS」,这是最权威的来源。下载最新稳定版,比如V10.4.6或V10.5.1。
- STM32CubeMX自带:在CubeMX的Middleware里,可以直接添加FreeRTOS组件。它会自动下载并集成到工程里。这个方式最省事,我推荐新手用这个。
我的建议: 如果你刚开始学,用CubeMX自带的FreeRTOS就够了。它帮你配好了大部分东西,你只需要关注任务创建和调度。等你熟悉了,再去GitHub下载源码,手动移植,这样理解更深。
2.3.2 源码结构
下载下来的FreeRTOS源码,目录结构大概是这样的:
FreeRTOS/
├── Source/
│ ├── include/ // 头文件
│ ├── portable/ // 移植层代码
│ ├── tasks.c // 任务管理
│ ├── queue.c // 队列
│ ├── timers.c // 软件定时器
│ └── event_groups.c // 事件组
├── Demo/ // 官方示例
└── License/ // 许可证
你注意看那个 portable 文件夹,里面按编译器分了子目录。咱们用Keil,就找 RVDS 或者 ARM_CM4F 这个目录。里面放的是跟硬件相关的代码,比如任务切换、中断处理。这部分是移植的关键。
2.3.3 版本选择
FreeRTOS版本很多,我建议选V10.4.x或V10.5.x。这两个版本稳定,社区支持好,网上教程也多。别追最新的V11.x,虽然功能多,但有些API变了,老教程可能对不上。
vTaskDelay 的参数单位,有的版本是毫秒,有的版本是系统节拍数。你移植的时候,一定要看对应版本的文档。我有个同事,从V9.0直接跳到V11.0,结果任务延时全乱了,排查了两天才发现是API变了。
2.4 环境验证
三样东西都准备好了,咱们来验证一下环境是否正常。
- 打开Keil工程:用CubeMX生成的工程,双击
.uvprojx文件。 - 编译工程:点击Build按钮,看有没有错误。正常情况下,0 Error, 0 Warning。
- 下载到开发板:用ST-Link连接开发板,点击Download。如果一切顺利,程序就跑起来了。
好,环境搭建就到这里。下一章,咱们开始真正移植FreeRTOS——把源码加到工程里,配置中断、时钟、内存管理。那才是重头戏。
记住一句话:环境搭得好,移植没烦恼。别嫌这一步麻烦,磨刀不误砍柴工。