1. 课程导学与开发环境搭建
各位同学好,我是你们这门课的老周。做嵌入式开发十几年了,从51单片机一路折腾到现在的ARM Cortex-M系列。今天咱们开始第一讲,先把路铺好。
说实话,很多初学者一上来就急着写代码,结果卡在环境配置上半天搞不定。我见过太多人因为Keil装不对、CubeMX生成不了代码,直接劝退了。所以这一章,咱们把地基打牢。
1.1 课程目标:你到底能学到什么?
这门课不是讲理论,是实打实的动手课。学完之后,你至少能做到三件事:
- 独立驱动STM32外设:GPIO、定时器、ADC、UART、SPI、I2C,这些常用外设,你能自己写代码调通。
- 把FreeRTOS移植到项目里:任务创建、消息队列、信号量、中断管理,这些RTOS核心机制,你能用起来。
- 完成一个物联网实战项目:从传感器采集、数据上报到云端交互,完整走一遍。
核心目标:让你从「照着例程改」变成「自己设计驱动架构」。说白了,就是给你一套方法论,以后换芯片、换外设,你心里不慌。
1.2 STM32选型建议:别盲目跟风
经常有人问我:「老周,学STM32该买哪块板子?」我的回答是:看你的项目需求。
我整理了一个选型对照表,你对着看就清楚了:
| 系列 | 内核 | 主频 | Flash | 典型应用 | 推荐场景 |
|---|---|---|---|---|---|
| STM32F103 | Cortex-M3 | 72MHz | 64KB-512KB | 工业控制、电机驱动 | 入门首选,资料最多 |
| STM32F407 | Cortex-M4F | 168MHz | 512KB-1MB | 音频处理、图形界面 | 需要DSP或浮点运算 |
| STM32L4系列 | Cortex-M4F | 80MHz | 256KB-1MB | 低功耗传感器、穿戴设备 | 电池供电项目 |
| STM32H7系列 | Cortex-M7 | 480MHz | 1MB-2MB | 高性能计算、AI边缘 | 预算充足、性能要求高 |
我的建议:如果你是自学入门,直接买一块STM32F103C8T6的最小系统板,十几块钱,够你折腾大半年。别一上来就上H7,那玩意儿配置复杂,容易打击信心。
1.3 Keil MDK与CubeMX安装
环境搭建这块,我踩过不少坑。下面把步骤拆开讲,你照着做就行。
1.3.1 Keil MDK安装
Keil MDK是ARM的官方IDE,虽然界面老气,但稳定。我到现在还在用,习惯了。
- 下载安装包:去Keil官网下载MDK-ARM最新版。注意选对版本,别下成C51了。
- 安装路径:我个人习惯装到D盘,不要有中文路径。曾经有个学员装到「程序文件」文件夹里,编译死活报错,折腾了两小时。
- 注册:安装完后需要注册。如果你是学生,可以用评估版(32KB代码限制),但做项目建议买正版或找学校申请License。
- 安装器件包:打开Keil,点击
Pack Installer,找到你用的芯片型号,比如STM32F103C8,点击Install。
避坑指南:我曾经遇到过Keil安装后打不开,提示缺少DLL。原因是杀毒软件把破解文件隔离了。安装时记得关掉杀毒软件,或者添加信任目录。
1.3.2 STM32CubeMX安装
CubeMX是ST官方的图形化配置工具,能帮你生成初始化代码。说白了,就是让你不用手写寄存器配置,省时间。
- 下载:去ST官网搜索STM32CubeMX,下载最新版。需要注册账号,免费。
- 安装Java环境:CubeMX基于Java,所以你得先装JRE。我建议装Java 8或11,太新的版本反而有兼容问题。
- 安装固件包:打开CubeMX,点击
Help → Manage embedded software packages,选择你用的芯片系列,比如STM32F1,下载对应固件包。
小技巧:固件包下载很慢,我一般晚上挂机下。或者去ST官网手动下载,然后放到CubeMX的仓库目录里,路径一般是 C:\Users\你的用户名\STM32Cube\Repository。
1.4 STM32CubeMX工程生成流程
这一步是重点。我带你走一遍完整的流程,从新建工程到生成代码。
1.4.1 新建工程
打开CubeMX,点击 New Project,在 Part Number 里输入你的芯片型号,比如STM32F103C8T6。双击选中,进入配置界面。
1.4.2 配置时钟树
时钟是STM32的心脏。配置不对,外设跑不起来。
- 在
Clock Configuration标签页里,把HSE(外部高速晶振)设为8MHz。 - PLL倍频到72MHz(F103的最高主频)。
- APB1和APB2总线时钟按默认就行,一般APB1是36MHz,APB2是72MHz。
注意:如果你用的是内部晶振(HSI),精度不够,串口通信容易丢数据。我建议项目里都用外部晶振,稳定。
1.4.3 配置外设
以最常用的USART1为例:
- 在
Pinout & Configuration里,找到USART1,Mode选Asynchronous。 - 波特率设115200,数据位8,停止位1,无校验。
- 看右边的引脚图,PA9和PA10会自动变成TX和RX。
1.4.4 生成代码
点击 Project → Generate Code,设置工程名和路径。IDE选MDK-ARM,Toolchain Version选你装的Keil版本。
生成完成后,用Keil打开工程,你会看到CubeMX已经帮你生成了初始化代码。你只需要在 main.c 的 while(1) 里写业务逻辑就行。
// 生成的main函数骨架
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART1_UART_Init();
while (1)
{
// 你的代码写在这里
}
}
重要提醒:每次在CubeMX里修改配置后重新生成代码,它会覆盖你之前写的 main.c。我习惯把业务逻辑写在单独的文件里,比如 app.c,这样不会被覆盖。
1.5 本章知识体系总览
下面这张图,把本章的核心内容串起来了。你保存下来,后面忘了可以回来看。
1.6 本章小结
这一章咱们把路铺好了。你有了开发环境,知道了怎么选芯片,也走了一遍CubeMX的工程生成流程。接下来,我会带你从GPIO开始,一个一个外设啃下来。
记住一句话:环境搭好了,后面的事就顺了。别急,慢慢来。