第3章 开发环境搭建:IDE安装与配置

说实话,做嵌入式开发这么多年,我见过太多人在环境搭建这一步就卡住了。工具链没配好,后面调试起来简直要命。今天咱们就把Keil和IAR这两大主流IDE的安装配置、编译器设置、还有调试器连接这些事,一次性说清楚。

3.1 选择你的IDE:Keil还是IAR?

先说说我的个人习惯。做STM32项目时,我偏爱Keil MDK。界面清爽,上手快。但如果你做的是ARM7、ARM9这类老平台,或者公司要求统一工具链,那IAR也是好选择。

其实这两个IDE的核心功能差不多。区别在哪?我列个表给你看:

对比项 Keil MDK IAR EWARM
安装包大小 约2GB 约1.5GB
编译器 ARMCC(v5/v6) IAR C/C++ Compiler
调试器支持 J-Link、ST-Link、ULINK J-Link、ST-Link、I-jet
代码优化 中规中矩 优化选项更丰富
学习成本 低,资料多 中等,文档专业

我个人建议:新手先用Keil。等做复杂项目了,再试试IAR的优化能力。我在一个电机控制项目里,用IAR的 -O3 优化,代码体积直接小了15%。

3.2 Keil MDK安装与配置

安装Keil其实不复杂。但有几个坑,我得提前告诉你。

3.2.1 安装步骤

  1. 从官网下载MDK-ARM安装包。注意版本,我建议用5.38或更新版本。
  2. 双击安装,一路Next。但安装路径别带中文!我见过有人装到「D:\开发工具\Keil_v5」,结果编译报错,查了半天是路径问题。
  3. 安装完成后,打开Keil,点击 Pack Installer 图标。
  4. 在Pack Installer里,找到你的芯片型号。比如STM32F103C8T6,勾选对应的Device Family Pack。
  5. 等待下载安装。这个过程可能有点慢,喝杯咖啡吧。
注意: 如果你用的是盗版License,Keil会在编译时弹窗。而且ARMCC v6编译器需要额外激活。我曾经因为License过期,项目赶进度时编译不了,急得满头汗。所以,有条件还是用正版吧。

3.2.2 编译器设置

安装完IDE,接下来要配编译器。这是关键一步。

打开Keil,点击 Project -> Options for Target,或者直接按 Alt+F7。在 Target 标签页里:

  • ARM Compiler:选 Use default compiler version 6。V6编译器支持C11标准,代码更现代。
  • Optimization:调试阶段选 Level 0 (-O0)。发布时再改 Level 3 (-O3)

嗯,这里要注意。优化等级不是越高越好。我在一个项目里开了 -O3,结果一个延时函数被优化掉了,电机直接失控。所以调试阶段老老实实用 -O0。

3.2.3 添加芯片支持包

有时候Pack Installer里找不到你的芯片。别慌,手动添加就行。

1. 去Keil官网下载对应的DFP包(比如STM32F1xx_DFP)
2. 双击安装,或者解压后放到 Keil_v5/ARM/PACK 目录
3. 重启Keil,在Device选择里就能看到了

3.3 IAR EWARM安装与配置

如果你选了IAR,那说明你对代码质量有要求。IAR的编译器优化确实厉害,但配置起来也稍微麻烦点。

3.3.1 安装步骤

  1. 下载IAR Embedded Workbench for ARM。版本建议8.50以上。
  2. 安装时,记得勾选 IAR ARM CompilerIAR C-SPY Debugger
  3. 安装完成后,打开IAR,点击 Tools -> Options
  4. Project 标签页,设置默认的芯片型号和调试器。
小技巧: IAR的License管理比较严格。如果你用的是浮动License,记得配置好License Server地址。我一般用 @192.168.1.100 这种格式。

3.3.2 编译器设置

IAR的编译器选项比Keil多。但常用的就这几个:

  • Optimization:调试用 None,发布用 High
  • Language:选 C11C++14
  • Output:生成 .hex.bin 文件。

说实话,IAR的优化选项我研究了很久。它有个 Balanced 模式,兼顾代码大小和速度。我一般用这个。

3.4 调试工具连接:J-Link与ST-Link

IDE装好了,编译器配好了,接下来就是连调试器。这一步最容易出问题。

3.4.1 J-Link连接

J-Link是SEGGER家的产品,稳定可靠。我用了快十年,没出过大问题。

连接步骤:

  1. 用SWD接口连接J-Link和目标板。4根线:SWDIO、SWCLK、GND、VCC(可选)。
  2. 安装J-Link驱动。去SEGGER官网下载 J-Link Software and Documentation Pack
  3. 打开Keil,在 Options for Target -> Debug 里,选择 J-Link/J-Trace Cortex
  4. 点击 Settings,确认SWD模式,速度选 4MHz10MHz
避坑指南: 我曾经遇到过J-Link连不上板子。查了半天,发现是SWDIO和SWCLK接反了。还有一次,是目标板供电不足,J-Link的VCC引脚拉低了电压。所以,连接前先量一下电压。

3.4.2 ST-Link连接

ST-Link是ST官方调试器,便宜好用。但有个问题:容易掉固件。

连接步骤:

  1. 同样用SWD接口。ST-Link的引脚定义是:1-VCC、2-SWDIO、3-GND、4-SWCLK。
  2. 安装ST-Link驱动。在STM32CubeProgrammer安装包里自带。
  3. 在Keil里选择 ST-Link Debugger,然后 Settings 里选SWD模式。

嗯,这里要注意。ST-Link的固件版本会影响调试稳定性。我建议定期更新固件。用STM32CubeProgrammer的 Firmware Update 功能就行。

3.4.3 调试器对比

特性 J-Link ST-Link
速度 最高50MHz 最高4MHz
稳定性 非常稳定 偶尔掉固件
价格 较贵(几百到几千) 便宜(几十块)
适用场景 专业开发、量产 学习、原型验证

我个人建议:学习阶段用ST-Link就够了。做产品开发,还是上J-Link吧。省心。

3.5 第一个测试工程

环境搭好了,总得跑个程序验证一下。我一般用点灯程序测试。

#include "stm32f1xx_hal.h"

int main(void)
{
    HAL_Init();
    __HAL_RCC_GPIOC_CLK_ENABLE();
    
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    GPIO_InitStruct.Pin = GPIO_PIN_13;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
    
    while (1)
    {
        HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
        HAL_Delay(500);
    }
}

编译下载后,如果LED以1秒频率闪烁,恭喜你,环境搭建成功了!

提示: 如果下载失败,先检查调试器连接。再检查芯片型号是否选对。我遇到过有人选了STM32F103C8,但板子上是STM32F103C6,结果下载不了。

好了,环境搭建就讲到这里。下一章咱们开始写真正的剃须刀自清洁控制代码。到时候你会用上今天配好的工具链。记住,工欲善其事,必先利其器。环境搭好了,后面写代码才顺手。