4. JTAG接口详解
好,咱们进入正题。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,进入详细配置:
| 参数 | 推荐值 | 说明 |
|---|---|---|
| Port | SW (Serial Wire) | SWD 模式,只占 2 个引脚 |
| Max Clock | 4 MHz 或 Auto | 太高容易不稳定,尤其线长时 |
| Reset | SYSRESETREQ | 软件复位,不需要硬件复位引脚 |
| Connect | Normal | 正常连接,除非你搞特殊 |
我的经验: 曾经有一块板子,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 进去。
核心参数就三个:
| 参数 | 说明 | 常见值 |
|---|---|---|
| Start | Flash 起始地址 | 0x08000000 |
| Size | Flash 大小 | 0x10000 (64KB) 等 |
| RAM for Algorithm | 算法运行时占用的 RAM | 0x20000000, 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 知识体系总览
下面这张图,把四个配置项的关系串起来了。你一看就明白:
4.6 实战检查清单
每次配置完,我建议你按这个清单过一遍:
- Debug 选项卡:调试器选对了?接口是 SWD?时钟别太高。
- Utilities 选项卡:驱动勾了?算法加对了?
- Flash Download:地址和大小对不对?Verify 勾了没?
- .ini 脚本:如果需要,写好了吗?路径对不对?
最后提醒: 配置完别急着点 Debug。先点一下 Flash → Download,看看能不能正常烧录。烧录都过不去,调试肯定没戏。这个习惯,帮我省了不知道多少排查时间。