STM32 GPIO控制与I2C总线通信实战 - 第1节

1.1 ARM Cortex-M 内核:到底强在哪?

做嵌入式这么多年,我接触过不少内核架构。但说到微控制器,ARM Cortex-M 系列绝对是绕不开的存在。你想想看,从几块钱的玩具到几十万的工业设备,里头都可能藏着个 Cortex-M 内核。

Cortex-M 是 ARM 公司专门为微控制器设计的。它跟手机里那种 Cortex-A 系列不一样,不追求极致性能,而是讲究 低功耗、实时响应、低成本。说白了,就是让芯片在省电的同时,还能快速响应外部事件。

内核家族怎么分?

Cortex-M 家族主要分三个档次,我整理了个表格,方便你对比:

内核型号 位宽 流水线 典型应用 代表芯片
Cortex-M0/M0+ 32-bit 2级 简单控制、传感器 STM32F0
Cortex-M3 32-bit 3级 工业控制、电机 STM32F1
Cortex-M4/M7 32-bit 3~6级 DSP、AI、音视频 STM32F4/H7

我们这门课用的 STM32F103C8T6,就是 Cortex-M3 内核。M3 是个分水岭——它引入了 硬件除法器 和 位带操作,处理速度比 M0 快不少。我在一个电机控制项目里用过 M0,算 PID 时明显吃力,换成 M3 后流畅多了。

核心要点:Cortex-M3 是 32 位 RISC 处理器,支持 Thumb-2 指令集。这意味着你既能用 16 位指令省空间,也能用 32 位指令提性能。一条指令搞定的事,不用拆成两条。

1.2 STM32 系列:怎么选型?

STM32 是意法半导体基于 Cortex-M 内核推出的微控制器系列。说实话,第一次接触 STM32 的人,看到那一堆型号头都大。F0、F1、F4、L0、G0……到底选哪个?

我个人的选型习惯是三步走:

  1. 看性能需求——主频、RAM、Flash 够不够?
  2. 看外设接口——I2C、SPI、UART、定时器够用吗?
  3. 看功耗预算——电池供电还是插电?

主流系列速览

系列 内核 主频 特点 适合场景
STM32F0 M0 48 MHz 低成本、低功耗 简单传感器、小家电
STM32F1 M3 72 MHz 均衡、生态成熟 工业控制、学习入门
STM32F4 M4 168 MHz 带 FPU、DSP 音频处理、电机控制
STM32L0 M0+ 32 MHz 超低功耗 电池供电、IoT 终端
STM32G0 M0+ 64 MHz 性价比高、新设计 替代 F0 的新项目

选型时别光看主频。我记得有一次,我选了颗主频很高的芯片,结果发现它没有足够的 I2C 接口,硬生生多加了颗外挂芯片。所以,外设数量比主频更重要。

我的建议:新手入门直接选 STM32F103C8T6。资料最多、例程最全、价格便宜。踩坑了也有人帮你。等做熟了再考虑换系列。

1.3 STM32F103C8T6 最小系统板:拆开看看

STM32F103C8T6 这个型号,拆开来看其实有规律:

  • STM32 — 品牌系列
  • F — 通用型
  • 103 — 子系列,代表增强型
  • C — 48 引脚
  • 8 — 64 KB Flash
  • T — LQFP 封装
  • 6 — 工业级温度范围

市面上最常见的“最小系统板”,就是把这颗芯片加上必要的电源、晶振、复位电路,再引出所有 GPIO。说白了,就是让芯片能跑起来的最小配置。

最小系统板的核心电路

  1. 电源 — 3.3V 供电,通常由 USB 转 3.3V 的 LDO 提供
  2. 晶振 — 8 MHz 主晶振 + 32.768 kHz RTC 晶振
  3. 复位电路 — 按键 + 上拉电阻
  4. BOOT 选择 — 跳线帽,决定启动模式
  5. SWD 调试接口 — 4 根线:SWDIO、SWCLK、VCC、GND

这里我画了一张结构图,帮你理清最小系统板的组成:

STM32F103C8T6 最小系统板结构图 STM32F103C8T6 最小系统板结构 STM32F103C8T6 Cortex-M3 @ 72 MHz 电源电路 3.3V LDO 稳压 晶振电路 8 MHz + 32.768 kHz 复位电路 按键 + 上拉电阻 BOOT 选择 跳线帽配置 SWD 调试接口 SWDIO / SWCLK GPIO 引出 所有 I/O 排针引出 💡 最小系统板 = 芯片 + 电源 + 晶振 + 复位 + 调试接口 + GPIO 引出 所有外设(LED、按键、传感器)都通过 GPIO 排针连接

引脚功能分布

这块芯片有 48 个引脚,其中 37 个是 GPIO。我习惯把它们分成几组:

  • PA0~PA15 — 16 个,包含 ADC、定时器、USART
  • PB0~PB15 — 16 个,包含 SPI、I2C、定时器
  • PC13~PC15 — 3 个,PC13 通常接板载 LED
  • 特殊引脚 — 如 NRST(复位)、BOOT0、VDD/VSS

注意:PC13 驱动的 LED 是 低电平点亮 的。我第一次用的时候,按常规思维写高电平点亮,结果灯死活不亮。查了半天才发现是共阳极接法。嗯,这种坑踩过一次就记住了。

1.4 为什么选这块板子做教学?

市面上 STM32 开发板那么多,为什么我偏选 F103C8T6 最小系统板?

三个原因:

  1. 便宜 — 十几块钱一块,焊坏了不心疼
  2. 够用 — 64KB Flash、20KB RAM,跑 GPIO 和 I2C 绰绰有余
  3. 生态好 — 网上例程一搜一大把,遇到问题随便问

我曾经用这块板子给一个学生做毕设,从 GPIO 点灯到 I2C 驱动 OLED 屏幕,两周就搞定了。说实话,对于入门来说,它真的够用了。

本章小结:

  • Cortex-M3 是 32 位内核,兼顾性能与功耗
  • STM32 选型看性能、外设、功耗三个维度
  • F103C8T6 最小系统板包含电源、晶振、复位、调试、GPIO 五大模块
  • PC13 是低电平点亮,别搞反了