01-环境搭建.md 3.8 KB

01 环境搭建(HAL 库)

STM32F103C8T6 | CubeMX → Keil MDK → DAP-Link

开发流程总览

flowchart LR
    A["CubeMX<br/>图形化配置"] --> B["生成代码<br/>MDK-ARM Project"]
    B --> C["Keil MDK<br/>编辑/编译"]
    C --> D["DAP-Link<br/>烧录"]
    D --> E["调试<br/>(Debug/串口)"]
    E -.->|修改代码| C
    E -.->|改配置| A

工具链角色

工具 在流程中的角色
STM32CubeMX 图形化配置引脚、时钟、外设参数,生成 HAL 初始化 C 代码
Keil MDK 编辑代码、交叉编译(ARMCC/CLANG)、烧录、调试
DAP-Link / ST-Link SWD 协议调试器,物理连接 PC USB ↔ 开发板 SWDIO/SWCLK
串口助手 通过 USB-TTL 查看 MCU 串口输出的调试信息

CubeMX 生成基础工程

  1. 打开 CubeMX → New Project
  2. MCU Selector → 搜索并选中 STM32F103C8T6
  3. System Core → SYS → Debug → 设为 Serial Wire (SWD)
    • ⚠️ 这一步必须做!否则烧录一次后 SWD 引脚被 GPIO 占用,芯片永久锁死,只能用串口 ISP 擦除
  4. System Core → RCC → HSE → 设为 Crystal/Ceramic Resonator
  5. 时钟树暂时保留默认(HSI 8MHz),第 08 节专门讲 72MHz 配置
  6. Project Manager → Project 标签页:
    • Project Name:LED_Test
    • Toolchain / IDE:MDK-ARM (Keil)
    • Minimum Firmware Version:不影响功能,选最新
  7. GENERATE CODE → 选择目录 → 生成后选择 Open Project 直接启动 Keil

ARMCC 编译器说明

CubeMX 生成 Keil 工程时默认使用 ARMCC V6(即 ARMCLANG)。如果你需要使用老版 V5 编译器(某些旧驱动库只支持 V5):

  1. 将 ARMCC V5.06 目录复制到 Keil 的安装目录(ARMCC 需要单独从 Keil 官网下载)
  2. Keil 中 Project → Manage → Project Items
  3. 在 Folder 视图顶部的 ARM Compiler 下拉框中新增 V5.06 路径
  4. 选中新加的 V5.06 → 重新编译
  5. ⚠️ 若首次配置编译报错,再走一遍上述流程即可通过(常见 bug,原因未知)

如果你的工程使用 CubeMX 默认的 ARMCLANG(V6),不需要任何额外配置。

烧录配置(每次新建工程需配置一次)

  1. Options for Target (Alt+F7) → Debug 标签
  2. 右侧 Use 下拉选择 CMSIS-DAP Debugger
  3. 点击 Settings → 如果 DAP 已正确连接,SWD 设备列表里应该能识别到
  4. 切换到 Flash Download 标签 → 勾选 Reset and Run(烧录后自动复位运行)
  5. 烧录:Flash → Download (F8)

如果 Settings 里没识别到 DAP:检查 SWDIO/SWCLK/GND 三根线是否正确连接,重新插拔 USB

调试功能(Keil Debugger)

  1. Options for Target → Debug → 确认已选 CMSIS-DAP
  2. Debug 标签 → 在右下角关闭编译器优化:-O0(否则变量值和单步行为不准确)
  3. Start/Stop Debug Session (Ctrl+F5) 进入调试模式
  4. 添加 Watch 窗口:View → Watch → Watch1
  5. 在 Watch 窗口输入变量名即可实时查看和修改变量
  6. 常用调试操作:全速运行 (F5)、单步进入 (F11)、单步跳过 (F10)、跳出 (Ctrl+F11)、下断点 (单击行号左侧)

常见问题

问题 原因 解决方法
烧录后无法识别 DAP 接线松动或芯片进入低功耗 重新插拔 USB,检查 SWD 接线
芯片锁死 "No target connected" SWD 引脚被 GPIO 占用 按住复位键 → 点烧录 → 松开复位
编译报错 "..\*.h: No such file" Include Paths 配置丢失 CubeMX 重新生成,或在 Options → C/C++ → Include Paths 中手动添加
串口输出乱码 波特率不一致 确认 MCU 和串口助手都设成了相同波特率(如 115200)