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……到底选哪个?
我个人的选型习惯是三步走:
- 看性能需求——主频、RAM、Flash 够不够?
- 看外设接口——I2C、SPI、UART、定时器够用吗?
- 看功耗预算——电池供电还是插电?
主流系列速览
| 系列 | 内核 | 主频 | 特点 | 适合场景 |
|---|---|---|---|---|
| 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。说白了,就是让芯片能跑起来的最小配置。
最小系统板的核心电路
- 电源 — 3.3V 供电,通常由 USB 转 3.3V 的 LDO 提供
- 晶振 — 8 MHz 主晶振 + 32.768 kHz RTC 晶振
- 复位电路 — 按键 + 上拉电阻
- BOOT 选择 — 跳线帽,决定启动模式
- SWD 调试接口 — 4 根线:SWDIO、SWCLK、VCC、GND
这里我画了一张结构图,帮你理清最小系统板的组成:
引脚功能分布
这块芯片有 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 最小系统板?
三个原因:
- 便宜 — 十几块钱一块,焊坏了不心疼
- 够用 — 64KB Flash、20KB RAM,跑 GPIO 和 I2C 绰绰有余
- 生态好 — 网上例程一搜一大把,遇到问题随便问
我曾经用这块板子给一个学生做毕设,从 GPIO 点灯到 I2C 驱动 OLED 屏幕,两周就搞定了。说实话,对于入门来说,它真的够用了。
本章小结:
- Cortex-M3 是 32 位内核,兼顾性能与功耗
- STM32 选型看性能、外设、功耗三个维度
- F103C8T6 最小系统板包含电源、晶振、复位、调试、GPIO 五大模块
- PC13 是低电平点亮,别搞反了