1. STM32 概述

📌 本节学习目标
  • 了解 ARM Cortex-M 处理器体系结构
  • 掌握 STM32 系列产品线及选型方法
  • 理解 STM32F103 芯片的内部架构
  • 熟悉存储器映射和启动模式

1.1 ARM Cortex-M 体系

ARM Cortex-M 系列是 ARM 公司推出的微控制器处理器内核,专门面向嵌入式实时应用场景。

内核架构版本流水线特点
Cortex-M0ARMv6-M2 级超低功耗、精简指令集、入门级
Cortex-M3ARMv7-M3 级哈佛架构、硬件乘除法、单周期乘法
Cortex-M4ARMv7E-M3 级FPU、DSP 指令集
Cortex-M7ARMv7E-M6 级超高性能、Cache、TCM

本课程使用的 STM32F103 基于 Cortex-M3 内核,具有 3 级流水线,采用哈佛架构(指令总线和数据总线分开)。

1.2 STM32 系列产品线

系列定位内核典型型号
STM32G0超值入门Cortex-M0+STM32G030F6
STM32F0入门级Cortex-M0STM32F051C8
STM32F1通用型Cortex-M3STM32F103C8T6(课程用芯片)
STM32F4高性能Cortex-M4STM32F407VGT6
STM32L4超低功耗Cortex-M4STM32L476
STM32H7旗舰型Cortex-M7STM32H743

1.3 STM32F103 内部架构

STM32F103C8T6 具有以下资源:

  • ARM Cortex-M3 内核,最高主频 72MHz
  • 64KB Flash,20KB SRAM
  • 2 个 APB 总线:APB1(36MHz 上限)、APB2(72MHz 上限)
  • 多种外设:GPIO × 37、USART × 3、SPI × 2、I2C × 2
  • 定时器:高级定时器 × 1、通用定时器 × 3、基本定时器 × 1
  • 2 个 12 位 ADC、1 个 DAC

1.4 存储器映射

STM32 采用统一编址方式(冯·诺依曼形式),所有外设寄存器、Flash、SRAM 都在同一地址空间内。

起始地址大小外设/存储器总线
0x4000 0000片上外设(GPIO、USART 等寄存器)APB1/APB2/AHB
0x2000 000020KBSRAM
0x0800 000064KBFlash(主存储器,从地址 0 映射)
0x1FFF F000系统存储器(Bootloader)
0xE000 0000Cortex-M3 内核外设(NVIC、SysTick)

1.5 启动模式

STM32F103 通过 BOOT0 和 BOOT1 引脚选择启动模式:

BOOT0BOOT1启动区域
0XFlash 主存储器(正常模式)
10系统存储器(ISP 下载)
11SRAM(调试模式)

1.6 地址映射是怎么一回事?

STM32 采用统一编址:寄存器、Flash、SRAM 都在同一个地址空间。访问外设就是访问对应的地址——这也是为什么后面实验经常写 *(volatile unsigned long *)0x40010C0C 这类代码。

C 代码(外设地址映射原理)
// 以 GPIOB 的 ODR(输出数据寄存器)为例,地址 0x40010C0C
#define GPIOB_ODR  (*(volatile unsigned long *)0x40010C0C)

// 写这个"地址"就等于操作 GPIOB 的引脚输出:
GPIOB_ODR = 0x0000FFFF;   // PB0~PB15 全部输出高电平

// 固件库里用结构体 + 基地址把这堆地址组织起来(stm32f10x.h):
#define GPIOB_BASE 0x40010C00
typedef struct
{
  __IO uint32_t CRL;   // 0x00 端口配置低寄存器
  __IO uint32_t CRH;   // 0x04 端口配置高寄存器
  __IO uint32_t IDR;   // 0x08 输入数据寄存器
  __IO uint32_t ODR;   // 0x0C 输出数据寄存器
  __IO uint32_t BSRR;  // 0x10 置位/复位寄存器
  __IO uint32_t BRR;   // 0x14 复位寄存器
  __IO uint32_t LCKR;  // 0x18 锁定寄存器
} GPIO_TypeDef;
// 之后就能用 GPIOB->ODR 这种直观写法操作了。
💡 这段代码怎么用?
  1. 地址映射是所有寄存器操作的基础——理解了「地址 ↔ 寄存器」的对应,就能看懂固件库的 GPIO_TypeDef 结构体
  2. 真正写程序时无需自己手算地址,固件库已经通过 #define 和结构体封装好了
  3. 遇到「为什么 GPIOB 基址是 0x40010C00」这类问题,回看这张表即可

1.7 命名规则

以 STM32F103C8T6 为例:

部分含义说明
STM32系列ARM Cortex-M 32 位 MCU
F类别F=通用型
1子系列1=基本型
03产品编号03 表示具体型号
C引脚数C=48 引脚
8Flash 大小8=64KB(6=32KB,B=128KB)
T封装T=LQFP
6温度范围6=-40~85°C
📎 配套资料详细内容请参考课件 1.STM32概述.pptxCortex-M3 权威指南