学习路线

🔌 第一步 — GPIO 输入输出模式

理解推挽 / 开漏 / 上拉 / 下拉,看懂 MOS 管电路

⏰ 第二步 — 时钟树与系统时序

HSE → PLL → 72MHz 到底怎么来的

📡 第三步 — 通信协议 UART · I2C · SPI

芯片之间怎么说话,三种协议的选型诀窍

⚡ 第四步 — 中断系统 NVIC · EXTI

CPU 怎么高效响应外部事件,抢占优先级怎么排

⏱️ 第五步 — 定时器

PWM 输出 / 输入捕获 / 编码器模式

🔌 第六步 — ADC 模数转换

模拟信号采集 · 单通道多通道 DMA · 定时器触发

💡 实战一 — PWM 呼吸灯

第五步的定时器知识 + 正弦波算法

🚗 实战二 — TB6612 电机驱动

定时器 PWM + GPIO 控制 · H 桥驱动原理

🛰️ 实战三 — MPU6050 姿态传感器

I2C 通信 + 定时中断 + 互补滤波 + 卡尔曼滤波

知识体系

⏰ 时钟树 HSE → PLL → 72MHz · 一切数字电路的基础 🔌 GPIO 推挽 · 开漏 · 上拉 · 下拉 📡 通信协议 UART · I2C · SPI ⏱️ 定时器 PWM · 捕获 · 编码器 ⚡ 中断系统 NVIC + EXTI · 贯穿所有外设 🔌 ADC 模数转换 · 多通道 · DMA 💡 呼吸灯 实战 ① · TIM + PWM 🚗 电机驱动 实战 ② · TB6612 + PWM 🛰️ MPU6050 实战 ③ · I2C + 滤波

基础外设

外设中枢

综合实战

文章索引

📖 基础篇 — 从裸机到外设

🛠️ 实战篇 — 把知识用起来

学习建议

🗺️ 推荐阅读顺序

GPIO 时钟树 通信 中断 定时器 呼吸灯 电机驱动 姿态

基础篇
实战篇

🔗 项目的知识依赖

项目 用到的前置知识
呼吸灯 ②时钟 — APB1 定时器时钟 / ①GPIO — 复用推挽 / ⑤定时器 — PWM / ④中断 — 定时中断(进阶版)
TB6612 电机 ②时钟 — APB1 定时器时钟 / ①GPIO — 推挽输出控制 IN1/IN2 / ⑤定时器 — 双路 PWM / ④中断 — 编码器反馈(进阶)
MPU6050 ②时钟 — I2C 时钟使能 / ①GPIO — 开漏复用 / ③I2C — 读写寄存器 / ⑤定时器 — 125Hz 采样 / ④中断 — 优先级分配

🎯 动手节点

每读完一篇,做一个最小实验,不要只看不练。

读完 动手做什么 验证方式
GPIO 点亮 LED 灯亮
时钟树 MCO(PA8) 输出 SYSCLK 示波器看 72MHz
通信 I2C 扫描 MPU6050 地址 串口打印 0x68
中断 按键中断翻转 LED 按下翻转
定时器 呼吸灯 渐亮渐灭
ADC 电位器电压采集 串口打印电压值
TB6612 驱动直流电机正反转 电机转动
MPU6050 姿态解算 串口输出 Roll/Pitch

🧰 硬件工具

工具 参考价格 用途
STM32F103C8T6 ~8 元 主控
ST-Link V2 ~15 元 下载调试
逻辑分析仪 ~30 元 I2C/SPI/UART 波形分析
USB-TTL ~5 元 串口通信
面包板 + 杜邦线 ~10 元 免焊接接线
TB6612 驱动板 ~8 元 电机驱动
直流减速电机 ~10 元 小车/云台动力

💪 学习心态

第一次配时钟 → HardFault
第一次调 I2C → 设备无应答
第一次写中断 → 程序卡死
第一次算 PWM → 占空比不对
第一次驱动电机 → 转速失控

这些都是必经之路。 每次遇到问题,逻辑分析仪看波形、示波器测频率、串口打印变量值——三板斧下去,问题解决一半。