3. 硬件基础与原理图阅读:认识MCU最小系统、电源树与去耦电容、GPIO与外围接口

做硬件设计这些年,我有个很深的体会:原理图就是硬件工程师的“源代码”。你读不懂它,后面PCB布局、调试、量产就全是坑。这一章,咱们就把IoT开发板上最核心的几个硬件模块拆开揉碎,从MCU最小系统讲到电源树,再到那些天天打交道的通信接口。

本章核心目标:拿到一份原理图,你能一眼认出MCU能不能跑起来、电源供电是否合理、接口有没有接错。

3.1 MCU最小系统:芯片“活过来”的必要条件

什么叫最小系统?说白了,就是让MCU能正常工作的最低硬件要求。少了任何一个,芯片都“醒不过来”。

我遇到过不少新手,画完板子发现芯片不工作,查了半天——原来是复位引脚没拉高。嗯,这种坑踩一次就记住了。

一个典型的MCU最小系统包含以下部分:

  • 电源(VDD/VSS):给芯片供电,通常3.3V或1.8V。注意多个电源引脚要全部连接,不能悬空。
  • 复位电路(NRST):上电时让MCU内部逻辑初始化。一般用RC复位:10kΩ上拉到VDD + 100nF电容到GND。
  • 时钟源(HSE/LSE):外部晶振提供精准时钟。常用8MHz主晶振 + 32.768kHz RTC晶振。
  • 启动模式选择(BOOT0/BOOT1):决定MCU从Flash、系统存储器还是SRAM启动。调试时常用BOOT0拉高进ISP模式。
  • 去耦电容:每个电源引脚旁边放一个100nF电容,滤除高频噪声。

我的习惯:画原理图时,先把MCU最小系统画完整、检查三遍,再开始画外设。最小系统不稳,后面全是白费功夫。

来看一个实际的STM32F103最小系统原理图片段:

// 复位电路
NRST ----[10kΩ]---- VDD_3V3
         |
        [100nF]
         |
        GND

// 8MHz主晶振
OSC_IN ----[8MHz晶振]---- OSC_OUT
           |              |
         [22pF]         [22pF]
           |              |
          GND            GND

// BOOT0配置(调试用)
BOOT0 ----[10kΩ]---- GND   // 正常从Flash启动
// 需要ISP时,通过跳线帽拉高到VDD

3.2 电源树与去耦电容:别让供电成为瓶颈

IoT开发板通常有多个电压域:电池供电、USB 5V、3.3V数字、1.8V内核、模拟3.3V等。电源树就是把这些电压的来龙去脉画清楚。

你想想看,如果传感器需要3.3V,MCU内核需要1.8V,Wi-Fi模块需要3.3V但瞬间电流高达500mA——这些需求不梳理清楚,板子一上电就可能电压跌落、复位重启。

电源树设计原则:

  1. 分级供电:从输入源开始,逐级降压。例如:USB 5V → LDO 3.3V → DCDC 1.8V。
  2. 模拟与数字分离:模拟电路(ADC、运放)用独立的LDO供电,避免数字噪声串扰。
  3. 去耦电容就近放置:每个IC的电源引脚旁边放一个100nF电容,距离不超过5mm。

我曾经踩过的坑:有一块板子,Wi-Fi模块一发射就死机。查了半天,发现3.3V电源走线太细,瞬间压降超过200mV。后来加了一个470μF电解电容 + 把走线加宽到40mil,问题解决。去耦电容不是摆设,它是电源的“蓄水池”。

下面这张SVG图,把IoT开发板的电源树结构画清楚了:

IoT安全开发板电源树结构图 USB 5V 输入 LDO 3.3V (AMS1117) MCU 3.3V (数字) Wi-Fi模块 3.3V 传感器 3.3V (模拟) DCDC 1.8V (内核) LDO 3.3V (模拟独立) 💡 关键点: 每个电压节点都需放置去耦电容(100nF + 10μF),模拟与数字电源必须物理隔离。

去耦电容的选型与布局:

电容类型 容值 用途 放置位置
陶瓷电容 100nF 滤除高频噪声(10MHz以上) 每个IC电源引脚旁
陶瓷电容 10μF 滤除中低频纹波 每个电压域入口
电解电容 100~470μF 储能、应对瞬态大电流 电源输入总端

我个人的布局习惯:先放100nF电容,紧贴MCU电源引脚,走线越短越好。然后在电源入口放10μF电容。如果空间允许,再加一个100μF电解电容。别小看这几个电容,它们决定了你的板子抗不抗干扰。

3.3 GPIO与外围接口:UART/I2C/SPI

GPIO是MCU和外界沟通的“手脚”。但光有GPIO还不够,你得学会用协议和外部设备对话。UART、I2C、SPI是IoT开发中最常用的三种接口。

3.3.1 UART:最简单的点对点通信

UART就是串口,两根线(TX、RX)就能通信。异步传输,不需要时钟线。波特率要一致,否则数据全是乱码。

典型应用:调试日志输出、蓝牙模块通信、GPS模块数据读取。

// UART连接方式(交叉连接)
MCU_TX  → 模块_RX
MCU_RX  → 模块_TX
GND     →  GND

// 波特率常用值:9600、115200、921600

我曾经犯过的错:画原理图时把TX和RX接反了,结果调试口死活不出数据。后来加了一个跳线帽,方便交叉切换。现在我的所有板子,UART接口都预留TX/RX交换跳线。

3.3.2 I2C:多设备共享总线

I2C只需要两根线:SCL(时钟)和SDA(数据)。所有设备挂在同一条总线上,通过地址区分。速度通常100kHz或400kHz。

关键点:SCL和SDA必须接上拉电阻(典型值4.7kΩ)。没有上拉电阻,总线拉不高,通信失败。

参数 标准模式 快速模式
时钟频率 100kHz 400kHz
上拉电阻 4.7kΩ 2.2kΩ
最大总线电容 400pF 400pF
常用设备 温湿度传感器、EEPROM 加速度计、OLED屏

3.3.3 SPI:高速全双工通信

SPI用四根线:SCK(时钟)、MOSI(主出从入)、MISO(主入从出)、CS(片选)。速度可以跑到几十MHz,适合摄像头、显示屏、SD卡等高速设备。

SPI vs I2C 怎么选?

  • 速度优先:选SPI。SPI没有地址帧开销,时钟可以跑很高。
  • 引脚优先:选I2C。两根线挂一堆设备,省GPIO。
  • 距离优先:UART更适合长距离(RS232/RS485)。

我的经验:在IoT开发板上,我通常把调试口用UART,传感器用I2C,显示屏/存储用SPI。这样分工明确,调试和生产都方便。

3.4 本章小结

这一章我们聊了MCU最小系统的构成、电源树的设计思路、去耦电容的选型布局,以及UART/I2C/SPI三种接口的选型要点。你想想看,这些知识其实都是相通的——最小系统保证芯片能跑,电源树保证跑得稳,接口保证能和外设对话。

下次拿到一份原理图,先看最小系统齐不齐,再看电源树有没有分级、去耦电容够不够,最后检查接口连接是否正确。按这个顺序来,能帮你省下大量排查时间。