这一章在干嘛?
同样新建工程模板,这次是 HAL 库版本。从 CubeMX 生成 → MDK 二次配置 → 编译下载。后续所有实验都基于这套模板。
8.1 新建 HAL 库版本 MDK 工程
8.1.1 CubeMX 工程生成
- New Project → 选芯片 STM32F407IGT6;
- Pinout & Configuration 里点亮要用的外设(GPIO/USART/TIM);
- Clock Configuration 配置时钟树(默认 168 MHz);
- Project Manager:
- Project Name:
Template - Toolchain/IDE:MDK-ARM V5
- 勾选 Generate peripheral initialization as a pair of .c/.h files per peripheral
- GENERATE CODE → 在路径下得到
MDK-ARM/Template.uvprojx。
原书图 8.1.1:CubeMX 工程生成界面
8.1.2 拷贝 HAL 库源码
- 复制
Drivers/STM32F4xx_HAL_Driver/Inc与Src到工程; - 复制
Drivers/CMSIS到工程; - 把
Templates/Src/main.cTemplates/Inc/main.h替换掉。
8.1.3 MDK 配置
C/C++ → Define:USE_HAL_DRIVER,STM32F407xx C/C++ → Include Paths:加 Drivers/STM32F4xx_HAL_Driver/Inc、Drivers/STM32F4xx_HAL_Driver/Inc/Legacy、Drivers/CMSIS/Device/ST/STM32F4xx/Include、Drivers/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.2 下载验证
F7 编译 → 0 Error → F8 烧录 → 板子 LED 闪烁说明工程跑通。
保存这个 Template 工程,每次新项目都从它复制,省下 30 分钟工程配置。
原书图 8.2.1:编译与烧录成功界面
CubeMX 生成的工程怎么编译?
用 MDK 打开 .uvprojx 直接编译即可。
HAL 库工程 Define 写什么?
USE_HAL_DRIVER,STM32F407xx。
工程模板里必备的三个初始化函数是?
HAL_Init()、
SystemClock_Config()、外设初始化函数。