1. STM32简介与开发环境搭建
大家好,欢迎来到这门实战课。我是你们的老朋友,一个在嵌入式圈子里摸爬滚打了十几年的工程师。
第一节课,咱们不急着写代码。先把家伙事儿备齐了,把路认清了。你想想看,盖房子总得先看看图纸、备好砖瓦吧?学STM32也是一样的道理。
1.1 认识STM32:它到底是什么?
STM32,说白了就是意法半导体(ST)推出的一系列32位ARM微控制器。我最早接触它是在2010年左右,那时候还在用8位的51单片机做项目,一换到STM32,感觉就像从自行车换成了小汽车——性能完全不是一个量级。
它为什么这么火?我总结了几点:
- 性能强:ARM Cortex-M内核,主频从几十兆到几百兆赫兹
- 外设丰富:ADC、DAC、定时器、I2C、SPI、UART、USB、CAN……你能想到的,它基本都有
- 生态成熟:开发工具、库函数、教程、社区支持都非常完善
- 性价比高:几块钱到几十块钱,就能搞定一个复杂的控制任务
咱们这门课主要围绕STM32F103系列展开。为什么选它?因为它是经典中的经典,资料最多,坑最少,最适合入门。
核心知识点:STM32 = ST公司 + ARM Cortex-M内核 + 丰富外设。你只要记住这三层关系,后面学起来就顺了。
1.2 ARM Cortex-M内核:不只是个名字
ARM公司自己不生产芯片,它只设计内核架构,然后授权给ST、NXP、TI这些厂商去造。Cortex-M系列就是专门为微控制器设计的低功耗、高实时性内核。
咱们常用的几个版本:
| 内核版本 | 典型STM32系列 | 特点 |
|---|---|---|
| Cortex-M0 | STM32F0 | 超低功耗、低成本、入门级 |
| Cortex-M3 | STM32F1 | 平衡性能与功耗,经典款 |
| Cortex-M4 | STM32F4 | 带FPU和DSP指令,适合数字信号处理 |
| Cortex-M7 | STM32F7/H7 | 高性能,主频高,适合复杂应用 |
我个人习惯把Cortex-M3比作「黄金搭档」——性能够用、功耗可控、价格适中。咱们的F103就是M3内核,你把它学透了,再往M4、M7迁移会非常快。
1.3 选择开发板:别纠结,先上手
很多新手会花大量时间纠结「买哪块板子好」。我的建议是:别纠结,先上手。
我推荐以下几种选择:
- 官方Nucleo板:ST原厂出品,带ST-Link调试器,品质有保障。价格大概六七十块。
- 官方Discovery板:外设更丰富,带屏幕、传感器等,适合进阶学习。
- 国产Mini板/精英板:价格便宜(三四十块),资料多,适合预算有限的朋友。
我的建议:如果你预算允许,直接上Nucleo-F103RB。它自带调试器,插上USB就能用,省去很多麻烦。我当年第一块板子就是它,到现在还在用。
1.4 安装Keil MDK:咱们的主力IDE
Keil MDK是ARM公司推出的集成开发环境,也是STM32开发最主流的工具。虽然现在也有STM32CubeIDE(免费),但Keil在工程管理、调试体验上依然有它的优势。
安装步骤其实很简单:
- 去Keil官网下载MDK-Arm安装包(注意版本,建议用5.36以上)
- 双击安装,一路Next
- 安装完成后,打开Keil,点击 Pack Installer 安装STM32F1的器件支持包
- 激活License(如果你有正版的话,或者用评估版也能用,只是有16KB代码限制)
注意:安装路径不要有中文!不要有空格!我见过太多因为路径问题导致编译报错的案例了。老老实实用默认路径,或者纯英文路径。
1.5 安装STM32CubeMX:图形化配置神器
STM32CubeMX是ST官方推出的图形化配置工具。它能帮你自动生成初始化代码,省去手动配置寄存器的时间。说白了,就是让你从繁琐的底层配置中解放出来,专注于业务逻辑。
安装也很简单:
- 去ST官网下载STM32CubeMX(需要注册账号,免费)
- 安装时需要Java环境,如果没有,它会提示你安装
- 安装完成后,打开软件,点击 Help → Manage embedded software packages,安装STM32F1的固件包
我记得第一次用CubeMX的时候,感觉像发现了新大陆——以前要写几十行代码的时钟配置,现在点几下鼠标就搞定了。
1.6 安装驱动:让电脑认识你的板子
开发板插上电脑,如果没反应,多半是驱动没装好。常见的驱动有两种:
- ST-Link驱动:用于调试和下载程序。Nucleo板和大部分国产板都自带ST-Link。
- USB转串口驱动:如果你的板子用的是CH340或CP2102芯片,需要安装对应的驱动。
驱动安装步骤:
- 把开发板用USB线连接到电脑
- 打开设备管理器,看看有没有黄色感叹号
- 如果有,右键更新驱动,选择「浏览我的电脑以查找驱动程序」
- 指向你下载的驱动文件夹,安装即可
小技巧:如果你用的是Nucleo板,插上USB后,电脑应该会识别出一个「ST-Link Debug」和一个「虚拟串口」。如果只识别出一个,检查一下USB线是不是只供电不传数据的那种——我吃过这个亏。
1.7 下载第一个程序:点亮LED
好了,环境都搭好了,咱们来跑第一个程序。点亮LED,就是嵌入式界的「Hello World」。
流程是这样的:
- 打开STM32CubeMX,新建工程,选择你的芯片型号(比如STM32F103RB)
- 在Pinout视图中,找到LED对应的GPIO引脚(Nucleo板上通常是PA5)
- 将该引脚配置为 GPIO_Output
- 配置时钟(直接用默认的HSE + PLL,72MHz)
- 点击 Project → Generate Code,生成Keil工程
- 打开生成的Keil工程,在
main.c的while(1)循环里添加代码
// 点亮LED
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
HAL_Delay(500); // 延时500ms
// 熄灭LED
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
HAL_Delay(500); // 延时500ms
- 编译工程,确保没有错误
- 点击 Download 按钮,程序就会通过ST-Link下载到板子上
如果一切顺利,你会看到板子上的LED开始闪烁。那一刻,恭喜你,你已经正式踏入STM32的世界了。
避坑指南:我曾经遇到过下载失败的情况,后来发现是ST-Link的固件版本太旧。解决办法是去ST官网下载 STM32CubeProgrammer,用它更新一下ST-Link的固件就好了。
1.8 本章知识结构图
下面这张图帮你理清本章的知识脉络:
嗯,到这里,第一章的内容就差不多了。你跟着走下来,应该已经对STM32有了一个整体的认识,并且把开发环境都搭好了。后面咱们就要开始真正动手写代码了,准备好了吗?