第3章 开发环境搭建:Keil/IAR/VS Code + GCC工具链配置、JLink/ST-Link调试器使用、硬件原理图与PCB设计工具基础

说实话,很多初学者一上来就急着写代码、画板子,结果卡在环境搭建上两三天。我当年也踩过这个坑——工具链没配好,编译报错一堆,还以为是代码写错了。这一章,咱们就把这些基础工作一次性搞定。

3.1 集成开发环境(IDE)的选择与配置

做嵌入式开发,IDE是绕不开的。市面上主流的就三个:Keil、IAR、VS Code。我个人的建议是:做产品级项目用Keil或IAR,做学习或开源项目用VS Code + GCC

3.1.1 Keil MDK

Keil在ARM Cortex-M系列芯片上几乎是事实标准。为什么?因为它的编译器优化做得好,调试器集成度高。

安装要点:

  • 下载MDK-ARM版本,注意区分5和6。MDK v5用AC5编译器,v6用AC6(基于Clang)。
  • 安装路径不要有中文,不要有空格。我见过有人装在「Program Files (x86)」里,结果某些老版本插件死活认不到路径。
  • 安装完成后,务必用管理员权限运行一次,否则License激活可能失败。
小技巧: Keil的Pack Installer里可以下载芯片支持包。如果你用的是STM32,直接搜STM32F1或F4系列,一键安装。别手动去官网一个个下,太慢了。

3.1.2 IAR Embedded Workbench

IAR的编译器优化能力比Keil更强,尤其对代码体积的控制。我在做一款电池供电的剃须刀时,IAR编译出来的固件比Keil小了将近15%。

配置注意:

  • IAR的工程文件是.ewp格式,工作空间是.eww格式。别搞混了。
  • 芯片型号选择要精确。比如STM32F103C8T6和STM32F103RCT6,虽然都是F103系列,但Flash和RAM大小不同,IAR的链接脚本会据此分配内存。
  • 调试器选择:在Options -> Debugger里,选J-Link或ST-Link,然后在下拉菜单里选对应的接口(SWD或JTAG)。
避坑指南: 我曾经在IAR里直接点「Download and Debug」,结果程序跑飞了。后来发现是没配置Flash loader。记得在Debugger -> Download标签页里勾选「Use Flash loader(s)」,否则代码根本没烧进去。

3.1.3 VS Code + GCC工具链

如果你喜欢开源、免费、轻量级的环境,VS Code是首选。但注意,它本身只是个编辑器,需要自己搭工具链。

搭建步骤:

  1. 安装VS Code,然后装几个必备插件:C/C++(微软官方)、Cortex-Debug、Arm Embedded。
  2. 下载GCC ARM工具链。推荐用Arm GNU Toolchain,官网直接下Windows版。解压后把bin目录加到系统PATH里。
  3. 配置tasks.json和launch.json。这两个文件是VS Code编译和调试的核心。
// tasks.json 示例
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Build",
            "type": "shell",
            "command": "arm-none-eabi-gcc",
            "args": [
                "-mcpu=cortex-m3",
                "-mthumb",
                "-T", "stm32f103.ld",
                "-o", "output.elf",
                "main.c",
                "startup.c"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}
核心要点: VS Code + GCC的灵活性最高,但调试体验不如Keil/IAR。如果你刚开始学,建议先用Keil上手,等熟悉了再转VS Code。

3.2 调试器使用:J-Link与ST-Link

调试器是嵌入式开发的「眼睛」。没有它,你只能靠串口打印猜问题。我见过有人用LED闪烁来调试PWM波形,那效率太低了。

3.2.1 J-Link

J-Link是SEGGER公司的产品,支持几乎所有ARM Cortex系列芯片。它的优势在于:速度快、稳定、支持RTT(实时传输)和J-Scope(虚拟示波器)。

连接方式:

  • SWD接口:只需要4根线——SWDIO、SWCLK、GND、VCC(可选)。
  • JTAG接口:需要5根线——TMS、TCK、TDI、TDO、nTRST。现在基本都用SWD了,省引脚。

常用操作:

  • J-Flash:用于烧录hex或bin文件。我习惯用它批量烧录,比IDE里点来点去快多了。
  • J-Link Commander:命令行工具,可以手动读写内存、设置断点。调试底层代码时很有用。
经验分享: 如果你用J-Link调试STM32,记得在Keil里把Debugger选为J-Link,然后在Settings里把SWD速度设为4MHz。默认的1MHz太慢了,下载大固件要等半天。

3.2.2 ST-Link

ST-Link是ST官方调试器,买STM32开发板时基本都送。它便宜、够用,但速度不如J-Link。

注意事项:

  • ST-Link有V2和V3版本。V3支持SWO(串行线输出),可以输出调试信息,不用额外占用串口。
  • 驱动问题:Windows 10/11通常自动识别,但Win7需要手动装驱动。去ST官网搜「ST-Link driver」就行。
  • 固件升级:ST-Link的固件偶尔需要更新。用STM32CubeProgrammer里的Firmware Update工具,一键搞定。
避坑指南: 我曾经用ST-Link调试一块自己画的板子,结果死活连不上。折腾了半天,发现是SWDIO引脚上没接上拉电阻。ST-Link内部虽然有弱上拉,但外部最好再加一个10kΩ电阻到3.3V,否则信号不稳定。

3.3 硬件原理图与PCB设计工具基础

做嵌入式开发,不懂硬件设计是不完整的。你不需要成为PCB专家,但至少能看懂原理图、会改封装、能画简单的双层板。

3.3.1 Altium Designer

Altium Designer(AD)是工业界的主流工具。功能强大,但价格也贵。我个人习惯用AD做复杂项目,比如四层板、BGA封装的芯片。

基础操作:

  • 创建原理图库:Tools -> New Component。画好引脚后,记得设置Designator(位号)和Comment(参数)。
  • 原理图绘制:用Wire连线,用Net Label标网络名。电源网络用VCC、GND,别乱起名字。
  • PCB布局:从原理图导入网表后,先放固定孔和接插件,再放核心芯片,最后放阻容。
核心原则: 原理图是设计意图的体现,PCB是物理实现。原理图错了,PCB一定错。所以画原理图时,每个引脚的功能都要确认清楚。

3.3.2 KiCad

KiCad是开源免费的PCB工具。这几年发展很快,社区资源丰富。如果你不想用盗版AD,KiCad是绝佳选择。

入门步骤:

  1. 安装KiCad,自带元件库和封装库。但国产芯片(如GD32、AT32)需要自己画或从网上下载。
  2. 原理图设计:用Eeschema工具。快捷键E是编辑元件属性,W是连线,C是复制。
  3. PCB设计:用Pcbnew工具。先设置板框(Edge.Cuts层),再摆放元件,最后走线。
// KiCad常用快捷键
E - 编辑元件属性
W - 连线
C - 复制
V - 移动
R - 旋转
Delete - 删除
经验之谈: KiCad的3D查看器很好用。画完PCB后,按Alt+3切换到3D视图,可以直观看到元件高度、间距是否合理。我每次发板前都会用这个功能检查一遍,避免「看起来没问题,实际装不上」的尴尬。

3.4 软硬件协同开发流程

最后,我想聊聊软硬件协同开发的流程。很多团队是硬件画完板子才给软件,结果软件发现某个引脚没引出、某个外设不支持,只能改板子,浪费时间和钱。

我建议的流程:

  • 第一步:软件先写驱动框架,用开发板验证功能。比如你要用I2C驱动一个传感器,先在开发板上调通。
  • 第二步:硬件根据软件需求画原理图。软件工程师要参与评审,确认引脚分配、外设接口。
  • 第三步:PCB打样期间,软件继续完善应用层代码。等板子回来,直接烧录调试。
核心思想: 软硬件不是先后关系,而是并行关系。越早发现问题,成本越低。

好了,这一章的内容就到这里。环境搭建是基础中的基础,但也是最容易出问题的地方。如果你在配置过程中遇到任何报错,别慌,先看错误信息,再查芯片手册或工具文档。实在不行,去论坛搜一下,八成有人遇到过同样的问题。

下一章,咱们开始讲剃须刀主控芯片的选型与GPIO配置。到时候我会拿实际项目中的电路图来拆解,敬请期待。