4. Keil MDK 调试配置:从入门到实战

好,咱们进入正题。Keil MDK 的调试配置,说白了就是告诉编译器:「我的板子长什么样,你怎么连上去,烧录完怎么跑。」

很多新手卡在这一步,明明代码编译过了,一点 Debug 就报错。嗯,八成是这里没配对。

我个人习惯,拿到一块新板子,第一件事就是把这四个选项卡过一遍:Debug、Utilities、Flash Download,还有那个容易被忽略的 .ini 脚本。

4.1 Debug 选项卡:选对调试器,认准接口

打开 Keil,点 Project → Options for Target,切到 Debug 选项卡。你会看到左右两个大框:左边是「Use Simulator」,右边是「Use Debugger」。

别犹豫,选右边。除非你只是想跑个纯逻辑仿真。

下拉菜单里选你的调试器。我常用的就两个:

  • ST-Link Debugger —— 官方板子自带,稳定省心
  • J-LINK / J-Trace —— 第三方调试器,功能更强

选好后点旁边的 Settings,进入详细配置:

参数推荐值说明
PortSW (Serial Wire)SWD 模式,只占 2 个引脚
Max Clock4 MHz 或 Auto太高容易不稳定,尤其线长时
ResetSYSRESETREQ软件复位,不需要硬件复位引脚
ConnectNormal正常连接,除非你搞特殊

我的经验: 曾经有一块板子,SWD 死活连不上。折腾半天,发现是 Max Clock 设成了 10 MHz,线又长又没屏蔽。降到 1 MHz,一次成功。所以,遇到连接问题,先降速试试。

4.2 Utilities 选项卡:烧录算法的选择

切到 Utilities 选项卡。这里配置的是「怎么把程序写进 Flash」。

勾选 Use Debug Driver,然后点 Settings。你会看到:

  • Download Function:选 Erase Full Chip 或 Erase Sectors。我一般选擦除扇区,快一些。
  • RAM for Algorithm:默认就行,除非你改了内存布局。
  • Programming Algorithm:这里要加对型号。比如 STM32F103C8,就加 STM32F10x Med-density Flash。

注意: 算法加错了,烧录会直接报错。我见过有人给 F103 加了 F407 的算法,结果烧进去跑不起来。芯片型号一定要对应。

4.3 Flash Download 配置:地址、大小、校验

这个配置其实藏在 Utilities → Settings → Flash Download 里。但很多人不知道,它也可以从 Debug → Settings → Flash Download 进去。

核心参数就三个:

参数说明常见值
StartFlash 起始地址0x08000000
SizeFlash 大小0x10000 (64KB) 等
RAM for Algorithm算法运行时占用的 RAM0x20000000, 0x1000

还有一个容易被忽略的选项:Verify。我建议勾上。它会在烧录后回读校验,确保数据写对了。

避坑指南: 我曾经做过一个项目,Flash 写进去后偶尔跑飞。查了两天,发现是 Verify 没勾,烧录时有个扇区没擦干净。勾上 Verify 后,问题再没出现过。

4.4 调试脚本 (.ini) 使用:让调试更智能

这个功能,说实话,很多人没用过。但用好了,能省不少事。

在 Debug 选项卡下方,有个 Initialization File 选项。你可以指定一个 .ini 文件,里面写一些初始化脚本。

比如,我想在进入调试前,先把某个外设初始化好:

// debug_init.ini
// 进入调试前,先配置 GPIO
FUNC void Setup_GPIO (void) {
    // 使能 GPIOA 时钟
    _WDWORD(0x40021018, 0x00000004);
    // 配置 PA5 为推挽输出
    _WDWORD(0x40010800, 0x00200000);
}

// 调用这个函数
Setup_GPIO();

// 设置 PC 指针到 main 函数
g, main

脚本里常用的命令:

  • _WDWORD(addr, value) —— 写 32 位数据到地址
  • _RDWORD(addr) —— 读 32 位数据
  • g, function_name —— 跳转到指定函数
  • breakpoint —— 设置断点

我的习惯: 调试 Bootloader 时,我会写一个 .ini 脚本,先把 Flash 的某些标志位清掉,再跳转到 main。这样每次调试都不用手动操作,省心。

4.5 知识体系总览

下面这张图,把四个配置项的关系串起来了。你一看就明白:

Keil MDK 调试配置体系 调试配置入口 Debug 选项卡 Utilities 选项卡 Flash Download 调试脚本 .ini Debug 子项 • 选择调试器 • 设置接口 (SWD/JTAG) • 配置时钟与复位 Utilities 子项 • 选择烧录驱动 • 擦除方式选择 • 添加编程算法 Flash 子项 • 起始地址 • Flash 大小 • 校验开关 .ini 脚本功能 • 初始化外设 • 设置断点 • 跳转到指定函数 四步配好,调试无忧

4.6 实战检查清单

每次配置完,我建议你按这个清单过一遍:

  1. Debug 选项卡:调试器选对了?接口是 SWD?时钟别太高。
  2. Utilities 选项卡:驱动勾了?算法加对了?
  3. Flash Download:地址和大小对不对?Verify 勾了没?
  4. .ini 脚本:如果需要,写好了吗?路径对不对?

最后提醒: 配置完别急着点 Debug。先点一下 Flash → Download,看看能不能正常烧录。烧录都过不去,调试肯定没戏。这个习惯,帮我省了不知道多少排查时间。