2. 调试环境搭建:IDE安装与配置、调试器连接、串口终端设置

说实话,调试环境搭建这事儿,看着简单,但坑是真不少。我带过好几个新人,光是在装IDE和连调试器这一步,就能卡住半天。今天咱们就把这块彻底捋清楚。

2.1 IDE安装与配置:Keil vs IAR

先说说IDE的选择。我个人习惯用Keil多一些,尤其是做STM32系列的时候。但IAR在代码优化上确实有两把刷子,特别是对ARM内核的深度优化。

Keil MDK安装要点

  • 版本选择:建议用MDK 5.38或更新版本。老版本对Cortex-M7支持不太好,我踩过这个坑。
  • 安装路径:别用中文路径!别用中文路径!别用中文路径!重要的事说三遍。我之前有个项目,就因为路径里带了个"调试"两个字,编译死活报错。
  • Pack安装:装完MDK后,记得通过Pack Installer安装对应芯片的器件支持包。比如STM32F4系列,就搜"STM32F4xx_DFP"。
我的小技巧:装完Keil后,先建个空工程编译一下,确认环境没问题。别等到项目代码写了一半才发现编译器有问题,那滋味可不好受。

IAR Embedded Workbench配置

IAR的安装相对简单,但有个地方要注意——许可证管理。我记得有一次帮客户远程调试,折腾了半天才发现是license server没配好。

  • 安装时选择"Full installation"
  • 激活时注意选择正确的license类型(节点锁还是浮动)
  • 配置编译器选项:Project → Options → C/C++ Compiler → Optimizations

2.2 调试器连接:J-Link与ST-Link

调试器是咱们和硬件沟通的桥梁。连不上调试器,那真是叫天天不应。来,咱们一个个说。

J-Link连接步骤

  1. 驱动安装:去SEGGER官网下载J-Link驱动包。别用盗版驱动,我见过有人用破解版导致调试时随机断连的。
  2. 硬件连接:SWD接口只需要4根线——SWDIO、SWCLK、GND、VCC(3.3V)。注意:VCC是参考电压,不是给板子供電的!
  3. 验证连接:打开J-Link Commander,输入"connect"命令,如果能识别到芯片ID,说明连上了。

常见问题排查

  • 连不上?先量一下SWDIO和SWCLK的电压,正常应该在3.3V左右
  • 识别到ID但下载失败?检查复位电路,有些芯片需要外部复位
  • 调试时频繁断开?可能是线太长或者接触不良,我一般用15cm以内的杜邦线

ST-Link使用心得

ST-Link便宜又好用,但有个毛病——容易掉固件。我曾经连续烧了3个ST-Link V2,后来才发现是热插拔导致的。

  • 固件升级:用STM32CubeProgrammer定期检查固件版本
  • 连接方式:支持SWD和JTAG两种模式,SWD更省引脚
  • 供电能力:ST-Link V2最大输出300mA,别指望它给大功率板子供電
注意:调试器连接时,一定要先接GND,再接信号线。我见过有人先接VCC,结果把调试器烧了。嗯,那个人就是我。

2.3 串口终端工具设置

串口是嵌入式调试的"眼睛"。没有串口输出,你都不知道程序跑到哪了。我个人偏爱Putty,轻量、免费、够用。

Putty配置指南

参数 推荐值 说明
波特率 115200 大部分MCU默认就是这个
数据位 8 标准设置
停止位 1 够用了
校验位 None 调试阶段不用开
流控制 None 开了反而容易出问题

配置步骤很简单:打开Putty → 选"Serial" → 填串口号和波特率 → 点"Open"。如果出现乱码,八成是波特率没对上。

SecureCRT高级用法

如果你需要更强大的功能,SecureCRT是个好选择。它支持多标签、脚本录制、日志自动保存。我在调试大批量数据时特别喜欢用它的日志功能。

  • 日志设置:Options → Session Options → Log File → 勾选"Start log on connect"
  • 颜色高亮:可以给不同级别的日志设置不同颜色,比如ERROR用红色,WARNING用黄色
  • 脚本录制:重复性操作可以录成脚本,一键执行
避坑指南:我曾经遇到过一个问题——串口能收到数据,但全是乱码。折腾了半天,发现是USB转串口模块的TX和RX接反了。你想想看,这种低级错误,排查起来真能让人抓狂。

2.4 环境验证:跑个点灯程序

环境搭好没?跑个点灯程序就知道了。这是嵌入式界的"Hello World"。

// 简单的GPIO点灯程序(STM32F103)
#include "stm32f10x.h"

void Delay(uint32_t count) {
    while(count--);
}

int main(void) {
    // 使能GPIOC时钟
    RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
    
    // 配置PC13为推挽输出
    GPIOC->CRH &= ~(0xF << 20);
    GPIOC->CRH |= (0x3 << 20);
    
    while(1) {
        GPIOC->BSRR = GPIO_BSRR_BR13;  // 灭灯
        Delay(500000);
        GPIOC->BSRR = GPIO_BSRR_BS13;  // 亮灯
        Delay(500000);
    }
}

编译下载后,如果LED开始闪烁,恭喜你,环境搭建成功了!如果没反应,按这个顺序排查:

  1. 检查电源指示灯亮不亮
  2. 用万用表量一下MCU的VCC引脚
  3. 确认调试器连接正常
  4. 检查串口输出(如果有的话)

好了,调试环境这块就说到这。下一章咱们聊聊怎么用这些工具真正开始调试程序。记住,环境搭得好,调试没烦恼。