2. 开发环境搭建:Keil/IAR/STM32CubeIDE 安装、芯片包配置、工程模板创建

好,咱们正式开始动手了。这一章我带你搭开发环境。

说实话,我见过太多人一上来就写代码,结果编译报错半天找不到原因——最后发现是工具链没配好。嗯,磨刀不误砍柴工,咱们先把刀磨利索。

2.1 三大IDE,我该怎么选?

目前主流的STM32开发环境就三个:Keil MDK、IAR EWARM、STM32CubeIDE。我三个都用过,说说我的感受。

IDE 优点 缺点 适合场景
Keil MDK 上手快、资料多、调试器兼容性好 代码量大了编译慢、收费 中小项目、快速原型
IAR EWARM 编译优化强、代码密度高 界面老派、License管理麻烦 对代码大小有要求的项目
STM32CubeIDE 免费、集成CubeMX、持续更新 吃内存、Eclipse底子有些人用不惯 新项目、长期维护

我个人习惯用STM32CubeIDE做新项目。为什么?免费且官方维护,省心。但如果你公司统一用Keil,那也别纠结,跟着团队走。

2.2 Keil MDK 安装与芯片包配置

先讲Keil,毕竟用户基数最大。

2.2.1 安装步骤

  1. 去ARM官网下载MDK-Arm安装包(注意版本,我建议用5.36以上)
  2. 双击安装,一路Next。路径别带中文,切记
  3. 安装完成后打开Keil,会提示注册。你懂的,自己想办法
我曾经遇到过一个问题:装完Keil后打不开,报错"License check failed"。折腾了半天,发现是杀毒软件把破解文件给隔离了。嗯,装这类工具时,先把杀毒关了。

2.2.2 芯片包安装

Keil本身不带STM32的支持包,你得手动装。说白了,就是告诉Keil:"我要开发STM32F4,你给我把对应的头文件、启动文件、链接脚本都准备好。"

操作很简单:

  1. 打开Keil,点击菜单栏的 Pack Installer 图标
  2. 在左侧找到你的芯片型号,比如STM32F407VG
  3. 点击右侧的 Install 按钮
  4. 等进度条跑完,搞定

你想想看,如果这一步漏了,你写代码时连 #include "stm32f4xx.h" 都会报错。我刚开始学的时候就犯过这个傻。

2.3 IAR EWARM 安装与配置

IAR的安装比Keil稍微麻烦一点,但也不复杂。

2.3.1 安装流程

  1. 从IAR官网下载EWARM安装包(建议用8.50以上版本)
  2. 运行安装程序,选择安装路径(还是那句话,别带中文)
  3. 安装过程中会提示选择License类型,选"License Server"或"Local License"
  4. 安装完成后,打开IAR,导入License文件
小技巧: IAR的编译器优化确实比Keil强。我在做无刷电机控制时,同样的代码IAR编译出来的二进制比Keil小了将近15%。如果你的Flash空间吃紧,可以考虑IAR。

2.3.2 芯片支持包

IAR的芯片支持包是集成在安装包里的。但如果你用的是比较新的芯片(比如STM32H7系列),可能需要单独下载设备描述文件(.ddf)。

操作路径:Tools -> Options -> Device Description,然后导入你下载的.ddf文件。

2.4 STM32CubeIDE 安装与工程模板创建

这个是我最推荐的,尤其适合咱们这个课程。为什么?因为它集成了CubeMX,配置外设就像点菜一样简单。

2.4.1 安装步骤

  1. 去ST官网下载STM32CubeIDE(目前最新是1.15.0)
  2. 双击安装,选择安装路径(对,还是别带中文)
  3. 安装过程中会提示选择工作空间(Workspace)路径,我建议单独建一个文件夹,比如 D:\STM32_Workspace
  4. 安装完成后,启动IDE,它会自动检测你的J-Link或ST-Link调试器
重点: STM32CubeIDE是基于Eclipse的,所以它的快捷键和Eclipse一样。Ctrl+Shift+R可以快速打开资源文件,Ctrl+H全局搜索。这些快捷键用熟了,开发效率能翻倍。

2.4.2 创建工程模板

咱们直接创建一个电机控制的工程模板,后面所有章节都基于这个模板来扩展。

操作步骤:

  1. 点击 File -> New -> STM32 Project
  2. 在芯片选择界面,输入你的芯片型号,比如STM32F407VGT6
  3. 点击Next,给工程起个名字,比如 MotorControl_Template
  4. 在"Targeted Project Type"里选 Empty(空工程),不要选带示例的
  5. 点击Finish,IDE会自动生成初始代码

生成后,你会看到左侧的Project Explorer里有一堆文件。别慌,核心就这几个:

  • Core/Src/main.c —— 主函数入口
  • Core/Inc/main.h —— 主头文件
  • STM32F4xx_HAL_Driver —— HAL库驱动

我习惯在工程里再加几个文件夹,方便管理:

MotorControl_Template/
├── Core/
│   ├── Src/
│   │   ├── main.c
│   │   ├── motor_control.c    // 电机控制算法
│   │   └── sensor.c           // 传感器读取
│   └── Inc/
│       ├── main.h
│       ├── motor_control.h
│       └── sensor.h
├── Drivers/
│   └── STM32F4xx_HAL_Driver/
└── .cproject
我的习惯: 每个功能模块都单独建一个.c和.h文件。比如电机控制放一起,传感器放一起。这样后期维护时,你找代码就像翻书一样方便。我在一个项目里见过有人把所有代码都塞进main.c,足足3000行...那滋味,谁改谁知道。

2.5 调试器配置

环境搭好了,还得能下载调试。咱们用ST-LINK,因为STM32开发板基本都自带。

在STM32CubeIDE里配置:

  1. 右键工程 -> Debug As -> Debug Configurations
  2. 在左侧选择 STM32 Cortex-M C/C++ Application
  3. Debugger 选项卡里,选择 ST-LINK (OpenOCD)
  4. 点击 Apply,再点 Debug

如果一切正常,你会看到代码停在main函数的入口处。这时候你可以单步执行、设置断点、查看变量值。

注意: 如果你用的是第三方的J-Link,需要在Debugger选项卡里改成 J-Link。我曾经帮一个学员远程调试,他折腾了两小时连不上,最后发现是Debugger选错了。嗯,这种低级错误,犯过一次就记住了。

2.6 验证环境是否正常

环境搭完,咱们写个最简单的程序验证一下:

#include "main.h"

int main(void)
{
    HAL_Init();
    SystemClock_Config();
    
    // 点亮板载LED(以STM32F4Discovery为例)
    __HAL_RCC_GPIOG_CLK_ENABLE();
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    GPIO_InitStruct.Pin = GPIO_PIN_13 | GPIO_PIN_14;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
    
    while(1)
    {
        HAL_GPIO_TogglePin(GPIOG, GPIO_PIN_13);
        HAL_Delay(500);
    }
}

编译下载后,如果板子上的LED开始闪烁,恭喜你,环境搭建成功了!

说实话,这一步虽然简单,但很有成就感。我第一次点亮LED时,感觉就像打开了新世界的大门。后面咱们要做的电机控制,本质上也是让芯片按照我们的意愿去驱动硬件,只不过从LED变成了电机。

好,环境搭好了,下一章咱们开始真正接触电机控制的核心——PWM和定时器。准备好了吗?