第一章 课程导学与开发环境搭建

各位同学好,我是你们的嵌入式讲师。做 STM32 开发这些年,从标准库一路用到 HAL 库,踩过的坑确实不少。今天咱们就从选型开始,一步步把环境搭好,点亮第一颗 LED。

1.1 STM32 系列选型指南

选型这事儿,说白了就是「够用就好」。我见过不少新手一上来就上 F4、F7,结果大部分外设根本没用上,成本还高。

系列 内核 主频 典型应用
STM32F0 Cortex-M0 48 MHz 简单控制、替代 8 位机
STM32F1 Cortex-M3 72 MHz 工业控制、电机驱动
STM32F4 Cortex-M4F 168 MHz DSP、音频、图像处理
STM32L4 Cortex-M4F 80 MHz 低功耗、电池供电
STM32H7 Cortex-M7 480 MHz 高性能计算、AI 边缘
我的建议:初学者从 F103C8T6 起步,资料多、价格低、够用。等把 HAL 库摸透了,再考虑升级。

1.2 HAL 库与标准库对比

很多老工程师习惯用标准库,觉得 HAL 库太臃肿。我个人觉得,这得看场景。

  • 标准库:直接操作寄存器,代码量小,执行效率高。但移植性差,换个芯片型号就得重写。
  • HAL 库:封装了底层细节,通过 CubeMX 配置,代码自动生成。移植方便,但代码体积大,中断响应稍慢。

我刚开始用 HAL 库时也嫌它啰嗦,直到有一次项目需要从 F1 换到 F4,标准库的代码改了两天。换成 HAL 库后,CubeMX 重新生成一下,半天搞定。嗯,从那以后我就彻底倒向 HAL 库了。

注意:HAL 库的中断处理函数里尽量不要做耗时操作,否则会影响实时性。我见过有人直接在中断里做 printf,结果系统卡死。

1.3 Keil MDK 与 STM32CubeMX 安装

环境搭建其实不难,但版本匹配容易出问题。我建议按以下步骤来:

  1. 安装 Keil MDK:去官网下载最新版,安装时选好器件包(STM32F1 系列对应 Keil.STM32F1xx_DFP)。
  2. 安装 STM32CubeMX:同样官网下载,注意 Java 环境要配好。我遇到过 Java 版本不对导致 CubeMX 打不开的情况。
  3. 配置调试器:ST-Link 驱动要装好,Keil 里选对调试器型号。
避坑指南:我曾经装完 Keil 后发现编译报错,折腾半天才发现是器件包版本和芯片型号不匹配。所以,装完先建个空工程试试编译。

1.4 第一个 LED 闪烁工程

理论说再多,不如动手点个灯。咱们用 CubeMX 生成一个工程,控制 PB0 引脚上的 LED 闪烁。

CubeMX 配置步骤:

  • 新建工程,选择 STM32F103C8
  • 在 Pinout 视图里,将 PB0 设置为 GPIO_Output
  • Clock Configuration 里,HCLK 设为 72 MHz
  • Project Manager 里,选择 MDK-ARM V5,生成代码

代码实现:

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();

  while (1)
  {
    HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
    HAL_Delay(500);
  }
}

这段代码很简单:初始化 HAL 库、配置时钟、初始化 GPIO,然后在主循环里每隔 500ms 翻转一次引脚电平。

小技巧:HAL_Delay 依赖 SysTick 中断,如果你在中断里调用了 HAL_Delay,会导致死锁。我一般用定时器做延时,或者自己写一个非阻塞延时函数。

1.5 本章知识体系

下面这张图概括了本章的核心内容,方便你对照复习:

第一章知识体系 第一章 课程导学与开发环境搭建 STM32 选型 HAL vs 标准库 环境搭建 LED 闪烁 F0/F1/F4/L4/H7 效率 vs 移植性 Keil + CubeMX GPIO 配置 HAL_Delay 核心目标 掌握 STM32 选型方法 → 理解 HAL 库优势 → 搭建开发环境 → 实现 LED 闪烁 本章是后续所有外设驱动和中断管理的基础,请务必亲手完成环境搭建和 LED 实验

好了,环境搭好、LED 点亮,咱们就正式入门了。后面的章节会逐步深入,从 GPIO 到定时器、从串口到中断,一步步把 HAL 库用熟。记住,动手是最好的学习方式。