简介:这份PDF版原理图面向使用STM32F103C8T6进行嵌入式开发的初学者与工程师,聚焦最小系统板的硬件设计参考。资源包内仅1个PDF文件,大小约76KB,完整呈现了该芯片正常工作所需的基本电路连接关系。原理图涵盖3.3V电压转换与去耦电容构成的电源管理、复位按钮与上拉电阻组成的复位电路、SWD调试接口、32.768kHz实时时钟晶振与外部高速晶振电路、GPIO引脚布局以及BOOT启动模式选择电路等关键模块,并标注了电源与状态指示灯设计。已有20685人学习下载,说明其在硬件入门与电路核对场景中具有较高参考价值。读者可据此理解最小系统的模块划分与信号走向,对照检查供电、时钟、复位与下载接口的连接是否正确,为后续外设扩展与嵌入式调试打下基础。
1. 从一块“点不亮”的板子说起:这份原理图到底能帮你解决什么
手头有一批 STM32F103C8T6 最小系统板,上电后 3.3V 正常、晶振也起振,但 SWD 就是连不上,换了两根下载线、重装了三遍驱动依然无解——这种场景在嵌入式调试里并不少见。很多时候问题不在代码,而在板子本身:去耦电容少了一颗、BOOT0 下拉电阻虚焊、复位引脚被某个外设拉死。这时候你需要的不是再买一块板子,而是一份能对着逐网络核对的原理图。STM32F103C8T6 最小系统板原理图 PDF 版就是干这个的:它把电源转换、复位、时钟、BOOT 选择、SWD 调试口、USB 接口和全部 GPIO 引出关系画在一张 A4 图纸上,让你在焊接前能查、在调试时能对、在抄板时能改。适合正在用 F103C8T6 做小项目、需要自己打板或排查硬件故障的嵌入式开发者,也适合刚接触 STM32 硬件设计、想看清“最小系统到底最少需要哪些外围”的新手。它不是教程,是一张可以打印出来铺在桌面上的工程底图。
2. 电源与去耦:ME6211C33 怎么把 5V 稳成 3.3V
2.1 从 USB 5V 到 3.3V 的完整链路
原理图里电源部分的核心是 U1,丝印 ME6211C33M5G,SOT-23-5 封装,这是一颗常见的低压差线性稳压器(LDO)。它的输入来自 USB-Micro 接口的 VBUS,也就是网络标号 VCC_5V;输出是 VCC_3V3,给 STM32F103C8T6 的 VDD_1、VDD_2、VDD_3 以及 VDDA 供电。ME6211 的固定输出版本输出 3.3V,最大输出电流 500mA,对于 F103C8T6 加上几个 LED 和少量外设来说余量足够。原理图中 C5 和 C6 是 10uF,分别放在 LDO 的输入和输出端,作用是储能和滤低频纹波;C1、C2、C3、C4、C7、C10 是 100nF,分布在芯片的 VDD 引脚附近和 LDO 输入输出端,负责滤高频噪声。这里有一个容易忽略的点:VDDA 是模拟电源,原理图中它和 VDD 一样接到 VCC_3V3,但实际布板时 VDDA 应该通过磁珠或 0 欧电阻从 VDD 单点引出,再配 100nF 加 1uF 去耦。原理图只画了电气连接,布板时的电源分割要靠自己补上。
2.2 去耦电容的取值与摆放逻辑
100nF 这个值不是随便选的。STM32F103 在 72MHz 运行时,内部数字电路开关瞬间会产生高频电流尖峰,100nF 的 ESL 和 ESR 在几十 MHz 范围内阻抗最低,能把这些尖峰旁路到地。10uF 则负责应对负载突变时的电压跌落。原理图中 C1 到 C4、C7、C10 都是 0603 封装的 100nF,C5、C6 是 0805 封装的 10uF。实际焊接时,100nF 要尽量靠近芯片的 VDD 引脚,走线先过电容再进引脚,否则去耦效果打对折。如果自己改板,建议在每个 VDD 引脚旁保留一个 100nF,VDDA 额外加一个 1uF 和一个 100nF。下面这段 Python 脚本可以用来快速核对原理图导出的网表中,每个电源引脚附近是否都有去耦电容:
# 解析网表,检查每个VDD引脚是否关联了去耦电容 # 假设网表格式为每行:网络名 元件1.引脚1 元件2.引脚2 ... import re def check_decoupling(netlist_file): vdd_pins = {} # 存储VDD引脚对应的网络 cap_nets = {} # 存储电容连接的网络 with open(netlist_file, 'r') as f: for line in f: parts = line.strip().split() if not parts: continue net = parts[0] for node in parts[1:]: if 'U2' in node and any(p in node for p in ['VDD', 'VDDA']): vdd_pins[node] = net if node.startswith('C') and ('1' in node or '2' in node): cap_nets.setdefault(net, []).append(node) for pin, net in vdd_pins.items(): caps = cap_nets.get(net, []) print(f"{pin} 在网络 {net} 上,关联电容: {caps if caps else '无!'}") # 调用示例 check_decoupling('stm32_minimal.net')这段脚本的逻辑是:从网表里找出 U2(STM32F103C8T6)所有名字含 VDD 或 VDDA 的引脚,记录它们所在的网络;再找出所有电容元件所在的网络;最后按网络匹配,输出每个电源引脚旁边有没有电容。参数上,netlist_file是你从 EDA 工具导出的网表文件路径,常见做法是用 Altium 或 KiCad 导出为文本格式。如果某个 VDD 引脚输出“无”,说明原理图里漏了去耦电容,需要补上。
提示:ME6211 的使能引脚 CE 在原理图中直接接 VCC_5V,意味着上电即输出。如果你需要软启动或低功耗控制,可以把 CE 接到 MCU 的某个 GPIO,但要注意上电时序。
3. 复位、BOOT 与 SWD:三个让你连不上芯片的“玄学”点
3.1 复位电路的上拉与滤波
原理图中复位部分由 S1(SW_PB)、R2(10k)和 C3(100nF)组成。R2 一端接 VCC_3V3,另一端接 NRST 网络;S1 并联在 NRST 和 GND 之间;C3 也是从 NRST 到 GND。正常工作时,R2 把 NRST 拉高,芯片运行;按下 S1,NRST 被拉到地,芯片复位;松开后,C3 通过 R2 充电,NRST 缓慢回到高电平,这个 RC 时间常数大约是 10k × 100nF = 1ms,足够芯片完成内部复位。这里常见的翻车点是:有些板子为了省事,把 C3 省掉或者换成 10nF,结果复位脉冲太窄,芯片偶尔复位不彻底;或者 R2 换成 100k,导致 NRST 上升太慢,SWD 连接时识别不到。原理图给的 10k + 100nF 是经过验证的组合,建议不要随意改。
3.2 BOOT0 和 BOOT1 的启动模式配置
STM32F103C8T6 的启动模式由 BOOT0 和 BOOT1(PB2)在上电复位时的电平决定。原理图中 BOOT0 通过 R3(10k)下拉到 GND,同时有一个跳线帽 P1 可以选择接 VCC_3V3;BOOT1 通过 R4(10k)下拉到 GND,也有跳线选择。默认情况下,BOOT0=0、BOOT1=0,芯片从内部 Flash 启动,这是正常运行模式。如果你要用串口下载程序,需要把 BOOT0 跳到 1、BOOT1 保持 0,上电后芯片进入系统存储器启动模式,也就是常说的 ISP 模式。下载完再把 BOOT0 跳回 0,重新上电才能运行新程序。很多新手第一次用串口下载时,忘了把 BOOT0 跳回 0,结果程序下载成功但板子没反应,以为芯片坏了——这属于典型的“血泪经验”。
3.3 SWD 接口的接线与上拉
原理图中调试接口引出了 SWDIO(PA13)、SWCLK(PA14)、RST 和 GND、VCC_3V3,用的是 P5 这个 4 针排针。SWDIO 和 SWCLK 在芯片内部有上拉,但原理图中没有额外加外部上拉电阻。实际使用 ST-Link 连接时,SWCLK 和 SWDIO 的线尽量短,最好不超过 15cm,否则时钟频率高时容易通信失败。如果遇到“No target connected”,先查三件事:目标板是否供电、SWDIO/SWCLK 是否接反、NRST 是否被外部电路拉低。下面是一个用 OpenOCD 连接 STM32F103C8T6 的配置片段,可以用来验证 SWD 链路是否正常:
# openocd.cfg - 用于连接 STM32F103C8T6 的 SWD 配置 source [find interface/stlink.cfg] # 使用 ST-Link 调试器 transport select hla_swd # 选择 SWD 传输协议 source [find target/stm32f1x.cfg] # 目标芯片为 STM32F1 系列 reset_config srst_only # 仅使用硬件复位 adapter speed 1000 # 降低 SWD 时钟到 1MHz,提高稳定性这段配置里,adapter speed 1000是关键参数。默认速度可能到 4MHz 甚至更高,如果排线较长或干扰较大,降到 1MHz 往往能解决“连不上”的问题。reset_config srst_only表示只用硬件复位线,不依赖软件复位,适合 NRST 正常连接的板子。运行openocd -f openocd.cfg后,如果输出里出现Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints,说明 SWD 链路已经通了。
注意:原理图中 P5 的 4 针顺序是 VCC_3V3、SWDIO、SWCLK、GND,而市面上一些 ST-Link 的排线顺序是 VCC、SWCLK、SWDIO、GND,直接插上去会接反。上电前务必用万用表核对线序。
4. 晶振与 USB:8MHz 和 32.768kHz 的分工
4.1 外部高速晶振(HSE)的负载电容计算
原理图中 Y2 是 8MHz 无源晶振,两端分别接 OSC_IN(PD0)和 OSC_OUT(PD1),每个引脚对地接一个 22pF 电容(C13、C14)。这个 22pF 不是晶振的负载电容,而是匹配电容。晶振的负载电容 CL 通常标为 20pF 或 18pF,匹配电容 C1 和 C2 的计算公式是:C1 = C2 ≈ 2 × (CL - Cstray),其中 Cstray 是 PCB 走线和引脚寄生电容,一般取 3~5pF。如果 CL=20pF,Cstray=4pF,那么 C1=C2≈32pF,但实际常用 22pF 是因为芯片内部还有等效电容,且 22pF 更容易起振。原理图选 22pF 是保守且通用的做法。如果你自己改板,晶振尽量靠近芯片,走线包地,匹配电容的接地端就近打孔到地平面。
4.2 RTC 低速晶振(LSE)的注意事项
Y1 是 32.768kHz 晶振,接 PC14 和 PC15,匹配电容 C9 和 C12 是 12pF。低速晶振的驱动能力很弱,对布线和电容非常敏感。常见问题是:用了 22pF 导致不起振,或者晶振离芯片太远、走线太长,起振时间要好几秒。原理图给 12pF 是合理的,因为 32.768kHz 晶振的负载电容通常为 6pF 或 12.5pF,匹配电容取 12pF 左右比较合适。另外,PC14 和 PC15 在复位后默认是 OSC32_IN 和 OSC32_OUT,但如果你的程序里把这两个引脚配成了普通 GPIO,RTC 就不会工作。这一点在原理图上不会写,但调试 RTC 时必须先查代码里的引脚复用配置。
4.3 USB 接口的限流电阻与上拉
原理图中 USB-Micro 接口 U3 的 D+(PA12)和 D-(PA11)分别通过 R9 和 R10 连接到芯片。R9 和 R10 是 22 欧姆的串联电阻,作用是阻抗匹配和限流,减少 USB 信号反射。另外,PA12 上还有一个 R11(1.5k)上拉到 VCC_3V3,这是 USB 全速设备的标准做法,用来告诉主机这是一个全速设备。如果 R11 漏掉或者阻值不对,电脑会识别不到 USB 设备。原理图中 D1 和 D2 是电源指示灯和状态指示灯,D1 红色接 VCC_3V3 通过 R1(510 欧)限流,D2 绿色接 PC13 通过 R5(510 欧)限流。PC13 驱动 LED 时要注意,这个引脚只能吸收有限电流,510 欧在 3.3V 下电流约 3mA,安全。
提示:USB 的 D+ 和 D- 走线要等长、差分阻抗 90 欧姆,虽然原理图不体现这些,但自己画 PCB 时如果忽略,USB 通信会不稳定。
5. 避坑与排查:原理图看懂了,板子还是有问题怎么办
5.1 现象:SWD 能识别芯片但下载失败
原因:通常是 Flash 写保护或者选项字节被改乱。F103C8T6 的 Flash 有读写保护位,如果之前用某个程序开启了保护,后续下载会被拒绝。另外,如果 BOOT0 在上电时被拉高,芯片进入系统存储器启动,SWD 虽然能连上,但下载地址不对。
解决:用 ST-Link Utility 或 OpenOCD 执行全片擦除,解除保护。OpenOCD 命令是stm32f1x mass_erase 0。擦除后把 BOOT0 跳回 0,重新上电再下载。
5.2 现象:3.3V 电压正常但芯片发热
原因:VDD 和 GND 之间短路,或者某个 GPIO 被外部电路灌入大电流。原理图中 VCC_3V3 和 GND 之间有多颗去耦电容,如果焊接时电容击穿,就会短路。另外,如果 PA13 或 PA14 被外部强上拉,而芯片内部又配置为输出低,也会发热。
解决:断电后用万用表测 VCC_3V3 和 GND 之间的电阻,正常应该在几百欧以上。如果接近 0,逐个拆去耦电容,找到短路的那颗。如果是 GPIO 问题,检查原理图中该引脚的外部连接,确认没有冲突。
5.3 现象:晶振不起振,程序跑不起来
原因:匹配电容不匹配、晶振质量差、或者 PCB 走线太长。8MHz 晶振的起振时间通常在几毫秒到几十毫秒,如果程序里把 HSE 作为时钟源且没有等待起振标志,就会卡在时钟初始化。
解决:先用示波器看 OSC_OUT 有没有波形。如果没有,把匹配电容换成 10pF 试试,或者换一颗晶振。程序里在RCC_ClockSecuritySystemCmd之前加超时判断,避免死等。
5.4 现象:USB 插上电脑没反应
原因:R11(1.5k 上拉)漏焊或阻值错误,或者 D+ 和 D- 接反。原理图中 PA12 是 D+,PA11 是 D-,如果画板时交换了,电脑会识别为未知设备。
解决:先量 PA12 对 VCC_3V3 的电阻,正常是 1.5k。如果无穷大,补焊 R11。如果电阻正常,检查 USB 线序,Micro USB 的 D+ 和 D- 在标准线里是固定的,但有些廉价线会省掉数据线,换一根线试试。
5.5 现象:复位按钮按下去没反应
原因:S1 的封装焊反了,或者 C3 短路。轻触开关有四个脚,如果焊的是对角两个脚,按下时不会导通。
解决:用万用表蜂鸣档测 S1 按下时是否导通。如果不通,重新焊接或换开关。同时测 NRST 对地电阻,正常应该是 10k 左右(R2 的阻值),如果接近 0,查 C3 是否短路。
6. 从原理图到自己的板子:三个必须核对的网络和一份检查清单
拿到这份 PDF 原理图后,最直接的用法是抄板改板。但抄板不是照搬,而是理解每个网络的意图后做取舍。我一般会先把三个关键网络单独拎出来核对:第一是 VCC_3V3 网络,确认所有 VDD、VDDA、BOOT 上拉、LED 限流电阻的电源端都接对了;第二是 GND 网络,确认去耦电容、晶振匹配电容、复位电容的接地端没有悬空;第三是 NRST 网络,确认只有 R2、C3、S1 和 P5 的 RST 引脚挂在这条线上,没有其他外设误接。这三个网络查完,板子基本不会有大问题。
下面这份检查清单是我每次打样前都会过一遍的,你可以直接拿去用:
| 检查项 | 正常表现 | 异常处理 |
|---|---|---|
| VCC_3V3 对 GND 电阻 | 几百欧以上 | 低于 100 欧查短路 |
| NRST 上电电平 | 3.3V | 0V 查 R2/C3/S1 |
| BOOT0 上电电平 | 0V | 3.3V 查跳线帽 |
| OSC_OUT 波形 | 8MHz 正弦 | 无波形换电容或晶振 |
| SWDIO 对 VCC_3V3 | 内部上拉,约 10k | 无穷大查 PA13 焊接 |
| USB D+ 对 VCC_3V3 | 1.5k | 无穷大补 R11 |
最后说一个进阶技巧:如果你要把 F103C8T6 换成 F103CBT6 或者 F103RCT6,原理图里大部分网络不用动,但要注意 VDD 引脚数量和 VDDA 的位置可能不同。C8T6 是 48 引脚,VDD_1、VDD_2、VDD_3 分别在 24、36、48 脚,VDDA 在 9 脚;CBT6 也是 48 脚,基本兼容;但 RCT6 是 64 脚,VDD 引脚更多,去耦电容也要相应增加。改芯片型号时,先把数据手册的引脚定义表对着原理图过一遍,别只看封装。
从那以后我每次拿到新的最小系统板,都会先打印一份原理图,用荧光笔把 VCC_3V3、GND、NRST 三条网络描出来,再上电。这个习惯帮我省下了至少三块板子的返工时间。希望帮到你。
本文还有配套的精品资源,点击获取