1. STM32入门:从内核到第一个工程模板

各位同学,欢迎来到《STM32单片机课程工程实战》的第一章。

说实话,我见过太多初学者一上来就抱着数据手册啃,结果三天就放弃了。我的建议是——先搞懂你手里拿的到底是什么东西,再动手。这一章,我们就从ARM Cortex-M内核讲起,一路走到你电脑上能跑起第一个工程模板。

1.1 ARM Cortex-M内核:单片机的大脑

STM32的核心是ARM Cortex-M处理器内核。你可以把它理解成单片机的“大脑”。Cortex-M系列是ARM公司专门为微控制器设计的,主打低功耗、高效率和实时响应。

目前主流的内核版本有:

  • Cortex-M0/M0+:入门级,8位机升级首选,功耗极低
  • Cortex-M3:经典款,平衡性能与功耗,STM32F1系列用的就是它
  • Cortex-M4:带FPU(浮点运算单元)和DSP指令,适合数字信号处理
  • Cortex-M7:高性能,带缓存,主频能跑到400MHz以上

我的经验: 做工业控制项目,我习惯用M3或M4内核。M3够稳,M4能算。如果只是做简单的传感器采集,M0+完全够用,还省电。

为什么Cortex-M这么流行?说白了,它把中断响应、功耗管理、调试接口都集成在芯片里了。你不需要额外加一堆外围电路,一颗芯片就能干活。

1.2 STM32系列选型:别选错了再后悔

STM32家族非常庞大。我刚开始接触时也眼花缭乱。后来总结出一个规律——看需求选系列。

系列 内核 典型应用 我的建议
STM32F0 Cortex-M0 简单控制、替代8位机 成本敏感项目首选
STM32F1 Cortex-M3 工业控制、电机驱动 最经典,资料最多
STM32F4 Cortex-M4 音频处理、图形界面 带FPU,算力够用
STM32H7 Cortex-M7 高性能计算、AI边缘 性能怪兽,但功耗高
STM32G0/G4 Cortex-M0+/M4 新设计、低功耗 性价比高,新项目推荐

避坑指南: 我曾经在一个项目中选了F103,结果发现需要USB OTG功能,F103不支持。最后只能换F407,重新画板子。选型时一定要把外设需求列清楚,别只看主频和价格。

选型时你还要关注几个关键参数:Flash大小、RAM大小、GPIO数量、定时器数量、通信接口(USART、SPI、I2C、CAN、USB等)。

1.3 开发板资源介绍:你手里的武器

我们课程用的是STM32F407VET6开发板。为什么选它?因为F4系列带FPU,能跑DSP库,而且价格已经降下来了。

这块板子上的核心资源:

  • 主控:STM32F407VET6,Cortex-M4内核,带单精度FPU
  • 主频:168MHz,够跑大部分实时任务
  • Flash:512KB,RAM:192KB
  • 板载外设:LED、按键、USB转串口、TF卡槽、SPI Flash
  • 引出接口:所有GPIO、USART、SPI、I2C、CAN、USB

你拿到板子后,先做三件事:

  1. 插上USB线,看电源指示灯亮不亮
  2. 安装USB转串口驱动(CH340或CP2102)
  3. 用串口助手看板子出厂程序是否打印信息

小技巧: 我习惯在板子上贴一张引脚功能标签。查手册太慢,标签一眼就能看到哪个引脚能当PWM用。

1.4 开发环境搭建:Keil MDK安装与配置

我们用的IDE是Keil MDK(Microcontroller Development Kit)。虽然有人用IAR或STM32CubeIDE,但Keil在STM32生态里最普及,遇到问题好找答案。

安装步骤:

  1. 从ARM官网下载MDK-ARM安装包(建议5.38及以上版本)
  2. 运行安装程序,一路Next
  3. 安装器件包:打开Pack Installer,搜索STM32F4,安装对应的DFP包
  4. 注册许可证(试用版有16KB代码限制,建议购买正版或使用社区版)

注意: 安装路径不要有中文和空格。我见过有人装在“D:\程序\Keil_v5”里,结果编译报错找不到文件。老老实实用英文路径。

安装完成后,验证一下:新建一个空工程,选择STM32F407VE,编译,看是否报错。

1.5 工程模板建立:从零开始搭架子

每次写新项目都从头建工程?太慢了。我习惯做一个通用工程模板,以后直接复制。

模板结构如下:

Project_Template/
├── User/           # 用户代码
│   ├── main.c
│   ├── stm32f4xx_it.c
│   └── stm32f4xx_it.h
├── BSP/            # 板级支持包
│   ├── led.c
│   ├── led.h
│   ├── usart.c
│   └── usart.h
├── Drivers/        # 官方驱动
│   ├── CMSIS/
│   └── STM32F4xx_HAL_Driver/
├── Startup/        # 启动文件
│   └── startup_stm32f407xx.s
└── Project/        # Keil工程文件
    └── template.uvprojx

在Keil中新建工程的步骤:

  1. 点击Project → New μVision Project
  2. 选择芯片型号:STM32F407VE
  3. 在弹出的Manage Run-Time Environment中,勾选CMSIS → CORE和Device → Startup
  4. 添加main.c文件到User组
  5. 配置魔法棒(Options for Target):
    • Target标签:选择ARM Compiler V6,勾选Use MicroLIB
    • Output标签:勾选Create HEX File
    • C/C++标签:添加宏定义STM32F407xx, USE_HAL_DRIVER
    • Debug标签:选择ST-Link Debugger,点击Settings确认连接
  6. 编写一个简单的main函数,点亮板载LED
#include "stm32f4xx_hal.h"

int main(void)
{
    HAL_Init();
    __HAL_RCC_GPIOB_CLK_ENABLE();
    
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    GPIO_InitStruct.Pin = GPIO_PIN_0;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
    
    while (1)
    {
        HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
        HAL_Delay(500);
    }
}

编译通过后,用ST-Link下载到板子。如果LED开始闪烁,恭喜你——第一个STM32工程跑起来了。

我的习惯: 模板建好后,我会把HAL库的常用初始化代码(时钟配置、GPIO、USART)都写好注释。下次做新项目,直接改引脚和参数就行,不用从头查手册。

本章知识体系

下面这张图帮你理清本章的核心脉络:

第1章 知识体系结构图 STM32入门 ARM Cortex-M内核 STM32系列选型 开发板资源 Keil MDK环境 M0/M3/M4/M7 F1/F4/H7/G0 F407VET6板 安装与配置 核心目标 理解STM32的硬件基础 搭建可复用的工程模板

嗯,这一章的内容就到这里。你学会了内核分类、选型方法、板子资源,还亲手搭了一个工程模板。这些基础打牢了,后面写驱动、做项目才会顺手。