1. 课程导学与开发环境搭建
大家好,欢迎来到《STM32多传感器数据采集与FreeRTOS移植实战》的第一章。
说实话,我做了十几年嵌入式开发,带过不少新人。大家最常犯的错,不是代码写不对,而是环境没搭好就开始干。结果呢?编译报错、下载失败、串口没输出……一折腾就是半天。所以这一章,咱们把地基打牢。
1.1 课程目标:我们要做什么?
这门课不是讲理论,是实战。你跟着我走完30章,能收获什么?
- 掌握多传感器采集:温度、湿度、气压、加速度、光强……怎么同时读,怎么不打架。
- 学会FreeRTOS移植:从裸机思维切换到多任务思维,任务调度、信号量、队列,全走一遍。
- 搞定工程化开发:代码结构、调试技巧、低功耗设计,这些我在项目里踩过的坑,全告诉你。
一句话总结:学完这门课,你能独立完成一个带实时操作系统的多传感器嵌入式项目。
1.2 STM32选型建议:别选错了
很多新手问我:“老师,学这个用哪款芯片?”我的回答是:别用最便宜的,也别用最贵的。
我个人习惯,教学和原型验证阶段,首选STM32F407VET6。为什么?
| 参数 | STM32F103C8T6 | STM32F407VET6 | STM32H743 |
|---|---|---|---|
| 主频 | 72 MHz | 168 MHz | 480 MHz |
| SRAM | 20 KB | 192 KB | 1 MB |
| Flash | 64 KB | 512 KB | 2 MB |
| FPU | 无 | 有(单精度) | 有(双精度) |
| 价格(参考) | ~8元 | ~25元 | ~80元 |
| 适合场景 | 简单裸机 | FreeRTOS + 多传感器 | 高级应用 |
你看,F407有FPU,做传感器数据滤波时快很多。192KB的SRAM跑FreeRTOS加几个任务,绰绰有余。我在一个工业采集项目里用过F103,跑三个任务就爆内存了……后来换了F407,稳得很。
我的建议:如果你手头只有F103开发板,也能学,但有些高级功能(比如DMA+多路ADC)会受限。预算允许的话,直接上F407系列。
1.3 Keil MDK安装:别跳过这一步
Keil MDK,说白了就是ARM的IDE。我见过有人用IAR、有人用STM32CubeIDE,但说实话,Keil在调试和工程管理上,对新手最友好。
安装步骤很简单,但有几个坑我得提醒你:
- 版本选择:我建议用MDK 5.38或以上。太老的版本不支持新器件包。
- 安装路径:不要有中文!不要有空格!我见过有人装在“D:\程序\Keil_v5”,结果编译报错找不到头文件……
- 破解:嗯,这个你懂的。但注意,破解后要检查License有效期,别用到一半过期了。
- 器件包:安装完后,打开Pack Installer,搜索STM32F4,下载对应的DFP包。
我曾经遇到过一个问题:装完Keil后死活找不到STM32芯片。折腾了两小时,才发现是器件包没装。所以,装完Keil第一件事,就是装Pack。
1.4 STM32CubeMX配置:图形化生成代码
STM32CubeMX,是ST官方出的图形化配置工具。你想想看,以前配时钟要翻几百页手册,现在点几下鼠标就搞定了。
咱们这门课,所有外设初始化都用CubeMX生成。我带你走一遍基本流程:
- 新建工程:选择芯片型号,比如STM32F407VET6。
- 配置时钟:HSE选8MHz晶振,PLL倍频到168MHz。我习惯把APB1设为42MHz,APB2设为84MHz。
- 配置外设:USART1(串口)、I2C1(传感器)、SPI1(显示屏)、ADC1(模拟采集)。
- 生成代码:选择MDK-ARM V5,勾选“初始化所有外设”,点击生成。
这里有个小技巧:生成代码后,不要手动修改CubeMX生成的代码。如果你要加自己的逻辑,写在/* USER CODE BEGIN */和/* USER CODE END */之间。否则下次重新生成,你的代码会被覆盖。
核心原则:CubeMX管初始化,你管业务逻辑。各司其职,互不干扰。
1.5 串口驱动安装与验证:你的第一个调试工具
串口,是嵌入式开发者的眼睛。没有串口,你连芯片在干什么都不知道。
咱们用的开发板,通常板载一个USB转串口芯片,常见的有CH340、CP2102、FT232。安装驱动很简单:
- 插上开发板,打开设备管理器。
- 看“端口(COM和LPT)”下面有没有出现新设备。
- 如果有黄色感叹号,说明没装驱动。去官网下载对应驱动安装。
- 装好后,记住COM口号,比如COM3。
验证方法:用串口助手(比如SSCOM、Putty)打开对应COM口,波特率设115200,数据位8,停止位1,无校验。然后给开发板上电,如果串口助手能收到数据,说明驱动装好了。
我曾经遇到一个很诡异的问题:串口助手能打开COM口,但收不到数据。查了半天,发现是USB线的问题——那根线只能充电,不能传数据。所以,一定要用带数据传输功能的USB线。
1.6 本章知识体系
下面这张图,帮你理清本章的知识结构:
1.7 验证你的环境
环境搭好了,怎么知道对不对?我教你一个最简单的验证方法:
- 打开Keil,新建一个空工程。
- 写一个main函数,里面就一行:
printf("Hello World!\n"); - 配置串口重定向,把printf输出到USART1。
- 编译、下载、打开串口助手。
- 如果看到“Hello World!”,恭喜你,环境搭好了。
注意:printf重定向需要实现fputc函数。如果你不知道怎么配,别急,下一章我会手把手教你。
好了,第一章就到这里。环境搭好了,后面的事就顺了。咱们第二章见。