第二章 开发环境搭建: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 安装与破解
安装过程其实没啥技术含量,但有几个细节要注意。
- 去官网下载 MDK-ARM。版本建议选 5.38 或更新版,太老的版本对新型号支持不好。
- 安装路径不要有中文。我见过有人装到「D:\软件\Keil_v5」,结果编译时路径解析出错。老老实实用英文路径。
- 安装完成后,以管理员身份运行。这一步很多人忽略,导致后面烧录时驱动加载失败。
破解?嗯,这里我不展开说了。你懂的,正版很贵,学生党用评估版也够用。但如果你在公司做项目,请务必购买正版。
注意: 破解时一定要关闭杀毒软件。我遇到过好几次,破解补丁被当成病毒隔离了,折腾半天才发现。
2.3 工程模板创建:从零开始搭架子
每次新建项目都从头配置?太累了。我习惯做一个「万能模板」,以后直接复制粘贴。
创建一个标准工程模板,步骤如下:
- 新建项目:Project → New μVision Project,选好芯片型号(比如 STM32F103C8)。
- 添加启动文件:不同芯片的启动文件不一样。STM32 的启动文件在 ARM\Startup 目录下。
- 配置时钟:打开 SystemInit() 函数,确认 HSE 晶振频率。我遇到过有人用 8M 晶振却配成 12M,结果串口乱码。
- 添加标准外设库或 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 为例):
- 点击魔法棒图标(Options for Target)。
- 选择 Debug 选项卡,调试器选 J-Link / J-TRACE Cortex。
- 点击 Settings,确认 SWD 模式,速度建议选 1MHz 以下(新手别贪快)。
- 切换到 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 和按键扫描。