1. 课程导学与开发环境搭建
各位同学,欢迎来到这门实战课。我是你们的老朋友,一个在嵌入式圈子里摸爬滚打了十几年的工程师。今天咱们正式开始第一讲——先把路铺好,把工具备齐。
说实话,我见过太多人一上来就急着写代码,结果卡在环境配置上半天搞不定。磨刀不误砍柴工,咱们先把基础打牢。
1.1 这门课到底讲什么?
简单说,就是教你用 FreeRTOS 去驱动 STM32 的各种外设。不是纯理论,也不是纯应用,而是把两者拧在一起。
我当年刚接触 RTOS 时,总觉得它很神秘。后来发现,说白了就是个任务调度器。但怎么用好它,怎么跟硬件打交道,这里面的坑可不少。
课程核心目标:
- 掌握 FreeRTOS 内核机制(任务、队列、信号量、中断管理)
- 学会在 RTOS 环境下驱动 GPIO、UART、I2C、SPI、ADC、定时器等外设
- 能独立完成一个带 RTOS 的嵌入式项目
1.2 学习路径怎么走?
我把课程分成了三个阶段,你跟着走就行。
| 阶段 | 内容 | 目标 |
|---|---|---|
| 基础篇(第1-10章) | 环境搭建、FreeRTOS 移植、任务管理、队列、信号量 | 能跑通第一个 RTOS 工程 |
| 进阶篇(第11-20章) | 外设驱动 + RTOS 整合(UART、I2C、SPI、ADC) | 能独立编写驱动代码 |
| 实战篇(第21-30章) | 综合项目:传感器采集、数据显示、通信协议 | 能完成完整产品原型 |
我个人建议,别跳着学。基础篇虽然简单,但很多坑都在那里埋着。比如任务优先级设置不当,系统直接卡死——我当年就吃过这个亏。
1.3 开发环境搭建
工欲善其事,必先利其器。咱们用两套工具:STM32CubeMX 做初始化配置,Keil MDK 写代码调试。
1.3.1 STM32CubeMX 安装
这个工具是 ST 官方的图形化配置软件。你点点鼠标,它就能生成初始化代码。省去了手动写寄存器配置的麻烦。
- 去 ST 官网下载 STM32CubeMX(需要注册账号)
- 安装时选默认路径就行
- 安装完成后,打开软件,它会提示你安装固件包
- 选择你用的芯片型号(比如 STM32F103C8T6)
小技巧: 固件包下载可能比较慢。我一般晚上挂机下载,第二天早上就好了。别急,这一步急不来。
1.3.2 Keil MDK 安装
Keil MDK 是 ARM 的集成开发环境。咱们用它来编译、下载、调试代码。
- 下载 Keil MDK-ARM(建议用 5.38 或更新版本)
- 安装时勾选所有组件
- 安装完成后,需要注册(你懂的)
- 安装对应芯片的器件包(STM32F1 系列用 Keil.STM32F1xx_DFP)
注意: 安装路径不要有中文!不要有空格!我见过有人因为路径里有“新建文件夹”导致编译报错,折腾了一下午。
1.4 FreeRTOS 简介
FreeRTOS 是个开源的实时操作系统。小、轻、快,非常适合单片机。
你想想看,裸机编程就像只有一个厨师在厨房里干活。他得自己切菜、炒菜、洗碗,忙得团团转。而 RTOS 就像请了个厨师长,他能同时安排多个厨师干活——一个切菜,一个炒菜,一个洗碗。这就是多任务。
1.4.1 FreeRTOS 的核心概念
| 概念 | 说明 | 类比 |
|---|---|---|
| 任务(Task) | 独立的执行线程 | 每个厨师负责一道菜 |
| 队列(Queue) | 任务间传递数据 | 传菜窗口 |
| 信号量(Semaphore) | 同步或互斥访问资源 | 厨房里唯一的一把刀 |
| 中断管理 | 处理硬件事件 | 火警响了,所有人停下手里的活 |
嗯,这里要注意:RTOS 不是万能的。它适合任务多、实时性要求高的场景。如果只是点个灯、读个按键,裸机反而更简单。
1.4.2 FreeRTOS 的调度方式
FreeRTOS 默认用抢占式调度。什么意思?高优先级的任务可以打断低优先级的任务。就像急诊病人来了,普通门诊得让路。
我曾经在一个项目里,把两个任务的优先级设反了。结果低优先级的任务一直抢不到 CPU,系统直接“假死”。排查了半天才发现是优先级的问题。从那以后,我每次设优先级都会再三确认。
1.5 本章知识体系
下面这张图,把咱们第一章的核心内容串起来了。你保存好,后面学习时随时回来看。
1.6 第一个工程:点亮 LED
理论说完了,咱们动手。用 CubeMX 生成一个工程,让 LED 闪烁。这是嵌入式界的“Hello World”。
- 打开 CubeMX,新建工程,选择芯片型号
- 配置 GPIO:选一个引脚作为输出,比如 PA5
- 配置时钟:用内部 HSI 或外部晶振
- 生成代码,用 Keil 打开
- 在 main 函数里写:
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
避坑指南: 我第一次用 CubeMX 时,忘了配置时钟树。结果芯片跑在默认的 8MHz,LED 闪得跟快进似的。后来才意识到,时钟配置是第一步。
好了,第一章就到这里。工具装好了,环境搭好了,第一个工程也跑通了。后面咱们就开始正式进入 FreeRTOS 的世界。