这一章在干嘛?

同样新建工程模板,这次是 HAL 库版本。从 CubeMX 生成 → MDK 二次配置 → 编译下载。后续所有实验都基于这套模板。

8.1 新建 HAL 库版本 MDK 工程

8.2 下载验证

8.1 新建 HAL 库版本 MDK 工程

8.1.1 CubeMX 工程生成

  1. New Project → 选芯片 STM32F407IGT6;
  2. Pinout & Configuration 里点亮要用的外设(GPIO/USART/TIM);
  3. Clock Configuration 配置时钟树(默认 168 MHz);
  4. Project Manager
  • Project Name:Template
  • Toolchain/IDE:MDK-ARM V5
  • 勾选 Generate peripheral initialization as a pair of .c/.h files per peripheral
  1. GENERATE CODE → 在路径下得到 MDK-ARM/Template.uvprojx

原书图 8.1.1:CubeMX 工程生成界面原书图 8.1.1:CubeMX 工程生成界面

8.1.2 拷贝 HAL 库源码

  1. 复制 Drivers/STM32F4xx_HAL_Driver/IncSrc 到工程;
  2. 复制 Drivers/CMSIS 到工程;
  3. Templates/Src/main.c Templates/Inc/main.h 替换掉。

8.1.3 MDK 配置

C/C++ → Define:USE_HAL_DRIVER,STM32F407xx C/C++ → Include Paths:加 Drivers/STM32F4xx_HAL_Driver/IncDrivers/STM32F4xx_HAL_Driver/Inc/LegacyDrivers/CMSIS/Device/ST/STM32F4xx/IncludeDrivers/CMSIS/Include、Src、Inc。 Output → Create HEX File 勾选。 Debug → CMSIS-DAP。

8.1.4 模板工程补全

main.c 模板里加:

#include "led.h"
#include "delay.h"

int main(void) {
    HAL_Init();
    SystemClock_Config();          // CubeMX 生成
    delay_init(168);
    led_init();
    while (1) {
        LED0_TOGGLE();
        delay_ms(500);
        LED1_TOGGLE();
        delay_ms(500);
    }
}

原书图 8.1.4.1:模板工程目录结构原书图 8.1.4.1:模板工程目录结构

8.2 下载验证

F7 编译 → 0 Error → F8 烧录 → 板子 LED 闪烁说明工程跑通。

保存这个 Template 工程,每次新项目都从它复制,省下 30 分钟工程配置。

原书图 8.2.1:编译与烧录成功界面原书图 8.2.1:编译与烧录成功界面