这一章在干嘛?

手工建一个寄存器版本工程,从新建文件夹、拷贝启动文件、添加源码到魔术棒配置、生成 HEX 文件并下载验证。理解完这章,你就能看懂 HAL 库为什么这么封装。

6.1 新建寄存器版本 MDK 工程

6.2 下载验证

6.1 新建寄存器版本 MDK 工程

6.1.1 新建工程文件夹

标准工程结构:

Project/
├── Doc/                  # 文档、说明
├── Libraries/            # CMSIS / FWLib 等
│   ├── CMSIS/
│   └── STM32F4xx_StdPeriph_Driver/
├── Project/              # MDK 工程文件
├── User/                 # 用户代码(main.c 等)
└── startup/              # 启动文件 + 系统文件

6.1.2 新建一个工程框架

  1. 打开 MDK → Project → New uVision Project → 选芯片 STM32F407IG;
  2. Manage Run-Time Environment 中先「Cancel」(我们手动加);
  3. 工程结构按上面目录建好。

6.1.3 添加文件

设置工程名和分组名:双击 Project 窗口的 Group 新建分组 CMSIS/Startup/User/Lib。

添加启动文件startup_stm32f407xx.s 加入 Startup 分组。

添加 SYSTEM 源码:把正点原子的 delay/sys/usart 加入 User 分组。

6.1.4 魔术棒设置

Target →

  • ARM Compiler:选 V5 或 V6;
  • Use MicroLIB:勾选(printf 重定向必备);
  • IRQ 中断向量表:Startup 分组的 startup 文件里。

Output →

  • Select Folder for Objects:选 Project/Objects/
  • Create HEX File:勾选
  • Name of ExecutableProject.hex

C51 / Listing → 默认即可。

C/C++ →

  • Include Paths:加 CMSIS 头、Libraries 头、User 头;
  • DefineUSE_HAL_DRIVER, STM32F407xx(HAL 用)或 STM32F40_41xxx(标准库用);
  • Optimization:调试选 Level 0,发布选 Level 2/3。

Asm → 默认。

Debug → 选 CMSIS-DAP,前面章节讲过。

Utilities → 选 CMSIS-DAP,配置 Flash 算法(STM32F4xx Flash 1MB)。

原书图 6.1.4.1:魔术棒 C/C++ 选项卡原书图 6.1.4.1:魔术棒 C/C++ 选项卡

6.2 下载验证

按 F7 编译 → 0 Error 0 Warning → F8 烧录 → 看开发板 LED 灯闪说明整个工程链路通了。

工程跑通后建议立刻备份一份「模板工程」,以后每次新工程基于模板复制,效率翻倍。

原书图 6.2.1:编译通过与烧录成功界面原书图 6.2.1:编译通过与烧录成功界面