第二章 开发环境搭建:Keil/IAR安装、工程模板创建、烧录工具配置

好,咱们正式开始动手了。

做单片机游戏机,说白了就是让一块芯片跑你的代码。那代码怎么写?怎么烧进去?这就是本章要解决的问题。我个人习惯把开发环境比作「工位」——工具顺手,活才能干得快。

2.1 开发工具的选择:Keil 还是 IAR?

这个问题,几乎每个新手都会问。我的回答很简单:看你用什么芯片

  • Keil MDK:ARM 内核的绝对主流。STM32、GD32、NXP 这些,用 Keil 最省心。
  • IAR Embedded Workbench:编译优化更强,代码密度更高。但界面风格……嗯,有点复古。

我个人建议:初学者先用 Keil。为什么?因为资料多,遇到问题百度一下,十有八九有答案。IAR 的坑,我当年踩过不少,后面再细说。

小提示: 如果你做的是 8 位机(比如 STC89C52),那 Keil C51 版本才是对的。别下成 MDK 版本,否则编译会报一堆莫名其妙的错。

2.2 Keil MDK 安装与破解

安装过程其实没啥技术含量,但有几个细节要注意。

  1. 去官网下载 MDK-ARM。版本建议选 5.38 或更新版,太老的版本对新型号支持不好。
  2. 安装路径不要有中文。我见过有人装到「D:\软件\Keil_v5」,结果编译时路径解析出错。老老实实用英文路径。
  3. 安装完成后,以管理员身份运行。这一步很多人忽略,导致后面烧录时驱动加载失败。

破解?嗯,这里我不展开说了。你懂的,正版很贵,学生党用评估版也够用。但如果你在公司做项目,请务必购买正版。

注意: 破解时一定要关闭杀毒软件。我遇到过好几次,破解补丁被当成病毒隔离了,折腾半天才发现。

2.3 工程模板创建:从零开始搭架子

每次新建项目都从头配置?太累了。我习惯做一个「万能模板」,以后直接复制粘贴。

创建一个标准工程模板,步骤如下:

  1. 新建项目:Project → New μVision Project,选好芯片型号(比如 STM32F103C8)。
  2. 添加启动文件:不同芯片的启动文件不一样。STM32 的启动文件在 ARM\Startup 目录下。
  3. 配置时钟:打开 SystemInit() 函数,确认 HSE 晶振频率。我遇到过有人用 8M 晶振却配成 12M,结果串口乱码。
  4. 添加标准外设库或 HAL 库:现在主流是用 HAL 库,但老项目可能还在用标准库。看你的需求。

下面是一个最简单的 main.c 模板:

#include "stm32f1xx_hal.h"

int main(void)
{
    HAL_Init();                 // 初始化 HAL 库
    SystemClock_Config();       // 配置系统时钟
    // 你的游戏逻辑从这里开始
    while(1)
    {
        // 主循环
    }
}

void SystemClock_Config(void)
{
    // 这里配置时钟树,具体代码由 CubeMX 生成
}

你看,核心就这几行。剩下的都是外设配置,后面章节会逐个展开。

核心要点: 工程模板的核心是「可复用」。把 GPIO、定时器、中断这些常用模块的初始化代码封装好,以后做新项目直接调用。

2.4 IAR 安装与工程配置

如果你非要用 IAR,那我也拦不住。不过有几个坑我得提前说。

  • IAR 的工程文件是 .ewp 格式,不是 Keil 的 .uvprojx。别搞混了。
  • 编译器选项要手动配置。Keil 会自动帮你选芯片,IAR 需要你在 General Options → Target 里手动指定。
  • 调试器设置:IAR 默认用 CMSIS-DAP,但如果你用 J-Link,得在 Debugger 里改一下。

我曾经在 IAR 上栽过一个跟头:编译通过,但烧录后芯片不跑。查了半天,发现是链接脚本里 RAM 地址配错了。嗯,从那以后我每次建工程都会先检查 .icf 文件。

2.5 烧录工具配置:让代码跑起来

代码写好了,怎么进芯片?三种主流方式:

工具 接口 速度 适用场景
J-Link SWD / JTAG 调试、量产
ST-Link SWD 中等 STM32 开发板
串口 ISP UART 无调试器时的备选

我个人最推荐 J-Link + SWD 接口。只需要 4 根线(VCC、GND、SWDIO、SWCLK),稳定又快速。ST-Link 也行,但偶尔会掉线,尤其是线比较长的时候。

配置步骤(以 Keil 为例):

  1. 点击魔法棒图标(Options for Target)。
  2. 选择 Debug 选项卡,调试器选 J-Link / J-TRACE Cortex。
  3. 点击 Settings,确认 SWD 模式,速度建议选 1MHz 以下(新手别贪快)。
  4. 切换到 Utilities 选项卡,勾选 Update Target before Debugging。
避坑指南: 我曾经遇到过烧录时提示「No Cortex-M SW Device Found」。排查了半天,发现是 SWD 接口的复位引脚没接上拉电阻。记住:SWDIO 和 SWCLK 各加一个 10kΩ 上拉,能解决 90% 的连接问题。

2.6 验证环境:点亮第一颗 LED

环境搭好了,总得跑个程序验证一下吧?

最经典的「Hello World」——点亮 LED。代码很简单:

// 假设 LED 接在 PC13 引脚(高电平点亮)
RCC->APB2ENR |= 1 << 4;    // 使能 GPIOC 时钟
GPIOC->CRH &= ~0xF00000;   // 清除配置
GPIOC->CRH |= 0x300000;    // 设置为推挽输出,50MHz
GPIOC->ODR |= 1 << 13;     // PC13 输出高电平

烧录进去,如果灯亮了,恭喜你,环境搭建成功!如果没亮……别急,检查三件事:

  • 芯片供电了吗?(万用表量一下 VCC 和 GND)
  • 烧录器连接正确吗?(SWD 线序别搞反)
  • 代码里的引脚号对吗?(PC13 不是所有板子都叫 PC13)

嗯,到这里,你的开发环境就彻底准备好了。下一章,咱们开始真正写游戏机的底层驱动——GPIO 和按键扫描。