4. GPIO与基础外设开发
说实话,很多初学者在学STM32时,第一步就被开发环境卡住了。我记得自己最早用Keil,后来换IAR,再后来ST官方出了CubeIDE。现在回过头看,CubeIDE确实是最省心的选择——免费、集成CubeMX、调试器直接嵌在里边,一套搞定。
这一章,我就带你从头走一遍。从安装到建工程,再到编译、下载、调试,每一步我都会把实际项目中踩过的坑指出来。
4.1 STM32CubeIDE 安装
先去ST官网下载最新版CubeIDE。注意区分操作系统版本,Windows、Linux、macOS都有。我个人习惯用Windows,但Linux下做产品级开发也很稳。
C:\ST\STM32CubeIDE。
安装过程中,ST会提示你安装驱动。一定要点“安装”,否则后面调试器连不上。嗯,这里要注意:如果之前装过其他版本的ST-Link驱动,最好先卸载干净,否则会有冲突。
4.2 工作空间设置
第一次启动CubeIDE,它会让你选工作空间(Workspace)。说白了,这就是你所有项目的存放目录。
- 建议: 每个大项目单独建一个Workspace。比如“智能家居项目”一个Workspace,“电机控制项目”另一个。
- 避坑: 工作空间路径同样不要有中文。我曾经因为路径里带了个“项目”两个字,编译报错找了半天,最后发现是编码问题。
- 个人习惯: 我会在Workspace里再建一个
libraries文件夹,把常用的HAL库、中间件统一放进去,方便多个工程共用。
4.3 工程向导创建项目
接下来就是创建项目了。CubeIDE的工程向导其实就是把CubeMX嵌进来了。你选芯片型号、配置时钟、外设,它自动生成初始化代码。
操作步骤很简单:
- 点击
File → New → STM32 Project - 在芯片选择界面,输入你的型号,比如
STM32F103C8T6 - 选好之后,点
Next,给项目起个名字 - 在
Pinout & Configuration视图里配置外设 - 配置时钟树(Clock Configuration)
- 点
Project Manager标签,设置项目名称、工具链等 - 最后点
Generate Code
这里有个关键点:生成代码时,CubeIDE会问你“是否打开Device Configuration Tool?”。我建议选“是”,这样后面改外设配置可以直接在图形界面里改,不用手写寄存器。
4.4 代码生成与编译
代码生成后,你会看到CubeIDE自动生成了这些文件:
| 文件/文件夹 | 说明 |
|---|---|
Core/Inc |
头文件目录,放 main.h、stm32f1xx_hal_conf.h 等 |
Core/Src |
源文件目录,放 main.c、stm32f1xx_hal_msp.c 等 |
Drivers |
HAL库和CMSIS驱动文件 |
.ioc 文件 |
CubeMX的配置文件,双击可打开图形配置界面 |
编译很简单,点工具栏上的锤子图标,或者按 Ctrl+B。第一次编译会慢一些,因为要编译整个HAL库。后面只改你自己的代码,编译就快了。
Optimization 设为 -O0(调试阶段),不要开 -Os 或 -O2。开优化后,调试时变量可能被优化掉,你看不到值。我踩过这个坑,查bug查了一下午。
4.5 调试视图使用
编译通过后,就该下载调试了。CubeIDE的调试视图非常强大,我简单说几个最常用的功能。
4.5.1 启动调试
点工具栏上的绿色虫子图标(Debug),或者按 F11。第一次调试会弹出调试配置窗口,一般默认就行。注意选对调试器(ST-Link、J-Link等)。
4.5.2 调试视图布局
进入调试模式后,界面会变成调试布局。主要区域有:
- 调试窗口: 显示调用栈、线程信息
- 变量窗口: 实时查看变量值
- 寄存器窗口: 查看CPU和外设寄存器
- 反汇编窗口: 看C代码对应的汇编指令
- 控制台: 输出调试信息
4.5.3 常用调试操作
| 操作 | 快捷键 | 说明 |
|---|---|---|
| 单步跳过 | F6 | 执行当前行,不进入函数内部 |
| 单步进入 | F5 | 进入函数内部调试 |
| 单步返回 | F7 | 从当前函数跳出 |
| 继续运行 | F8 | 全速运行到下一个断点 |
| 添加断点 | Ctrl+Shift+B | 在光标所在行添加/移除断点 |
4.6 本章知识体系
下面这张图把整个开发环境搭建的流程串起来了。你跟着走一遍,基本就不会出大问题。
你看,整个流程其实就五步。安装、设工作空间、建项目、编译、调试。每一步都有坑,但只要你按上面的步骤来,基本一次过。
我记得第一次用CubeIDE时,卡在驱动安装上。后来发现是之前装过旧版ST-Link驱动,卸载干净重装就好了。所以,如果你遇到类似问题,先检查驱动。
好了,这一章的内容就这些。环境搭好了,后面就可以真正开始写代码了。你先把环境跑通,有问题随时翻回来看。