1. 为什么值得亲手画一遍STM32F103C8T6最小系统
STM32F103C8T6这颗芯片,在嵌入式圈子里几乎无人不晓。它属于ST的F1系列,基于ARM Cortex-M3内核,主频72MHz,64KB Flash、20KB SRAM,48个引脚,LQFP封装。价格便宜、资料丰富、生态成熟,是很多人从51单片机进阶到32位平台的第一颗芯片。市面上现成的“最小系统板”一抓一大把,十几块钱就能买到一块,那为什么还要自己画原理图、自己打板?
我的答案很直接:买板子只能让你“用”它,画板子才能让你“懂”它。最小系统是整个单片机能够跑起来的最低硬件条件,它包含了电源、时钟、复位、启动配置、调试接口这几个核心模块。你把这几个模块的每一个电阻、每一个电容为什么放在那里搞清楚了,后面画任何外设电路都不会慌。而且在实际项目中,你往往需要把STM32直接嵌入到自己的板子上,而不是插一块现成的核心板——这时候,最小系统的设计能力就是硬门槛。
这篇文章我会从零开始,把STM32F103C8T6最小系统的原理图绘制过程完整拆解一遍。工具用的是立创EDA(嘉立创EDA),因为它的元件库和国产供应链结合得最紧密,对新手也最友好。内容会覆盖:芯片选型与封装确认、电源模块设计、时钟电路、复位电路、启动模式配置、SWD调试接口、去耦电容布局,以及原理图绘制过程中的各种实操细节和踩坑经验。不管你是刚学完51单片机想往上走一步,还是已经用过STM32但一直用现成核心板、没自己画过最小系统的,这篇内容都能直接拿来参考。
2. 动手之前:芯片选型与工具准备
2.1 STM32F103C8T6的引脚功能快速梳理
在画原理图之前,必须先把芯片的引脚功能吃透。STM32F103C8T6是48引脚LQFP封装,引脚大致可以分成几类:
- 电源引脚:VDD(数字电源,引脚9、24、36、48)、VSS(数字地,引脚8、23、35、47)、VDDA(模拟电源,引脚7)、VSSA(模拟地,引脚6)。注意VDD有4个引脚,不是只有一个,画图的时候每一个都要接。
- 时钟引脚:PD0/OSC_IN(引脚5)、PD1/OSC_OUT(引脚6)。外部晶振就接在这两个脚上。
- 复位引脚:NRST(引脚7)。注意,引脚7在STM32F103C8T6上是NRST,不是VDDA——VDDA在48脚封装上是引脚9。这一点很多人第一次画会搞混,一定要对着数据手册确认。
- 启动配置引脚:BOOT0(引脚44)、BOOT1/PB2(引脚20)。BOOT1和PB2是复用的。
- 调试接口:SWDIO/PA13(引脚34)、SWCLK/PA14(引脚37)。SWD调试只需要这两根线加电源和地。
- GPIO:剩下的PA0-PA15、PB0-PB15、PC13-PC15等,按需引出即可。
注意:不同封装的STM32F103引脚定义不同,LQFP48和LQFP64的电源引脚位置完全不一样。画图前务必下载对应封装的官方数据手册(Datasheet),对照Pinouts and pin description章节逐个确认。
2.2 立创EDA的工程创建与元件库选择
打开立创EDA专业版,新建一个工程,命名为“STM32F103C8T6_MinSystem”。然后新建原理图文件。接下来最关键的一步是找元件。
立创EDA有两个库来源:系统库和立创商城库。系统库里的符号比较通用,但封装可能不全;立创商城库直接关联实际可购买的物料,符号和封装都是现成的,推荐优先用商城库。
搜索“STM32F103C8T6”,你会看到多个结果。选择那个品牌为ST(意法半导体)、封装为LQFP-48的条目。放置到画布上之后,双击元件可以查看它的符号和对应的PCB封装。确认封装是LQFP-48(0.5mm间距),这个很重要——如果封装选错了,后面PCB阶段会直接报废。
其他需要准备的元件清单:
| 元件 | 规格 | 数量 | 作用 |
|---|---|---|---|
| 芯片 | STM32F103C8T6 LQFP48 | 1 | 主控 |
| 晶振 | 8MHz 无源晶振 | 1 | 主时钟 |
| 晶振电容 | 22pF 0603 | 2 | 时钟负载电容 |
| 复位电容 | 100nF 0603 | 1 | 复位滤波 |
| 复位电阻 | 10kΩ 0603 | 1 | 上拉 |
| 复位按键 | 轻触开关 3x4mm | 1 | 手动复位 |
| 去耦电容 | 100nF 0603 | 4 | 每个VDD引脚一个 |
| 储能电容 | 10μF 0805 | 1 | 电源入口 |
| 启动电阻 | 10kΩ 0603 | 2 | BOOT0/BOOT1下拉 |
| 排针 | 2.54mm 1x4 | 1 | SWD接口 |
| 排针 | 2.54mm 1x20 | 2 | GPIO引出 |
| LED | 0805 红色 | 1 | 电源指示 |
| LED限流电阻 | 1kΩ 0603 | 1 | LED限流 |
这份清单是基于常见的最小系统设计实践整理的,实际项目中可以根据需要增减。比如你不打算引出所有GPIO,排针可以少放几个;不需要电源指示灯,LED和电阻也可以省掉。
2.3 原理图绘制的基本设置
在开始连线之前,先做几个设置,能省很多事:
- 栅格设置:把栅格设为100mil(2.54mm),这是最常用的间距,引脚对齐不容易出错。
- 图纸尺寸:A4就够了,最小系统元件不多。
- 网络标签命名规范:建议用“功能_引脚”的格式,比如“SWDIO”“SWCLK”“BOOT0”“NRST”,电源用“+3V3”和“GND”。命名统一,后面检查网络连接的时候一眼就能看懂。
3. 最小系统五大核心模块的原理图设计
3.1 电源模块:3.3V供电与去耦电容的讲究
STM32F103C8T6的工作电压范围是2.0V到3.6V,典型值3.3V。最小系统板上通常不集成稳压芯片,而是通过排针从外部输入3.3V。但如果你打算用5V供电(比如USB供电),就需要加一颗LDO,比如AMS1117-3.3或者RT9013。
我这次的设计是直接输入3.3V,所以电源模块比较简单:一个电源输入排针,一个10μF的储能电容,加上每个VDD引脚旁边的100nF去耦电容。
去耦电容是很多人容易忽略的地方。STM32F103C8T6有4个VDD引脚(引脚9、24、36、48),每个引脚旁边都应该放一个100nF的电容,就近接地。为什么是100nF而不是10μF?因为100nF的电容自谐振频率高,能有效滤除高频噪声;而10μF的电容自谐振频率低,适合滤除低频纹波。两者配合使用效果最好,但最小系统板上,每个VDD脚配一个100nF是基本要求。
实操心得:去耦电容在原理图上看起来就是一个小电容接地,但在PCB布局时,它必须尽可能靠近对应的VDD引脚,走线越短越好。如果原理图阶段就把电容和引脚的网络标签对应清楚(比如C1对应VDD1),PCB布局时就不会搞混。
VDDA(引脚9)是模拟电源,给ADC和内部模拟电路供电。即使你不用ADC,也建议把VDDA接到3.3V,并通过一个100nF电容去耦。VSSA(引脚8)直接接地。有些设计会在VDDA和3.3V之间加一个磁珠或0Ω电阻,做模拟和数字电源的隔离,最小系统板上不加也能正常工作,但如果你后续要用ADC采集精度要求高的信号,建议预留这个位置。
3.2 时钟电路:8MHz晶振与负载电容计算
STM32F103C8T6有两个时钟源:内部RC振荡器(HSI,8MHz)和外部晶振(HSE)。内部RC精度一般在±1%左右,做串口通信勉强够用,但做USB或者对时序要求高的应用就不行了。所以最小系统板上通常会焊一个8MHz的外部无源晶振。
晶振电路很简单:晶振两端分别接PD0(OSC_IN)和PD1(OSC_OUT),每个引脚再通过一个电容接地。这两个电容叫负载电容,容值需要根据晶振的规格来算。
公式是这样的:CL = (C1 × C2) / (C1 + C2) + Cstray
其中CL是晶振的负载电容(查晶振数据手册,常见的是20pF),Cstray是PCB上的杂散电容,一般取3-5pF。假设CL=20pF,Cstray=5pF,那么(C1×C2)/(C1+C2) = 15pF。如果C1=C2,则C1/2=15pF,C1=C2=30pF。但实际常用的值是22pF,因为很多晶振的CL标称是20pF,而实际PCB杂散电容可能更小,22pF是一个比较稳妥的折中值。
我实测过,用22pF配8MHz晶振,STM32F103C8T6的HSE启动很稳定,串口通信波特率误差在可接受范围内。如果你手头只有20pF或者30pF,也能用,但极端情况下可能会起振困难或者频率偏差偏大。
注意:晶振下方不要走任何信号线,PCB布局时晶振要尽量靠近芯片,走线尽量短且等长。晶振外壳如果是金属的,建议接地。
3.3 复位电路:NRST引脚的正确接法
STM32F103C8T6的NRST引脚是低电平复位。也就是说,当NRST被拉到低电平时,芯片复位;释放后,芯片开始运行。
标准的复位电路是一个10kΩ电阻从NRST上拉到3.3V,一个100nF电容从NRST接地,再加一个轻触按键并联在电容两端。按键按下时,NRST被拉到地,芯片复位;松开后,电容通过电阻充电,NRST电压缓慢上升,产生一个复位延时。
这个延时时间怎么算?RC充电时间常数τ = R × C = 10kΩ × 100nF = 1ms。NRST的复位阈值电压大概在1.5V左右(具体查数据手册),从0V充到1.5V大约需要0.7个τ,也就是0.7ms左右。这个延时足够芯片内部电路稳定了。
有些设计会在NRST和地之间再加一个反向二极管(比如1N4148),作用是快速泄放电容上的电荷,保证连续复位时不会因为电容没放完电而失效。最小系统板上不加也能用,但如果你经常需要手动复位调试,加上会更可靠。
实操心得:NRST引脚内部有上拉电阻,但阻值比较大(大概40kΩ左右),外部再加一个10kΩ上拉可以增强抗干扰能力。另外,NRST走线要尽量短,远离高频信号线,否则容易误触发复位。
3.4 启动模式配置:BOOT0和BOOT1怎么接
STM32F103C8T6的启动模式由BOOT0和BOOT1两个引脚决定:
| BOOT0 | BOOT1 | 启动模式 |
|---|---|---|
| 0 | X | 从主Flash启动(正常运行) |
| 1 | 0 | 从系统存储器启动(出厂Bootloader) |
| 1 | 1 | 从SRAM启动(调试用) |
正常运行时,BOOT0接低电平(通过10kΩ电阻下拉到地),BOOT1也接低电平。BOOT1和PB2是复用引脚,如果你在应用中需要用到PB2作为普通GPIO,那BOOT1就不能固定接死,需要根据启动模式要求处理。
最小系统板上,我通常的做法是:BOOT0通过一个10kΩ电阻下拉到地,同时预留一个跳线帽或者排针,方便需要时把BOOT0拉到高电平进入串口下载模式。BOOT1直接通过10kΩ电阻下拉到地,因为从SRAM启动的场景很少用。
注意:BOOT0引脚在芯片内部没有上拉或下拉,必须外部处理。如果悬空,芯片可能随机进入不同的启动模式,导致程序跑不起来。这是新手最容易踩的坑之一。
3.5 SWD调试接口:最少需要几根线
SWD(Serial Wire Debug)是ARM Cortex-M系列常用的调试接口,只需要两根信号线:SWDIO(PA13)和SWCLK(PA14),加上电源和地,一共四根线。
在原理图上,我通常会放一个1x4的排针,标注为“SWD”,引脚顺序是:3.3V、SWDIO、SWCLK、GND。这样用DAPLink或者ST-Link连接的时候,直接插上去就行,不用每次对着线序找。
有些设计还会把NRST也引到调试接口上,这样调试器可以控制芯片复位。如果你用的是DAPLink,它支持复位控制,把NRST引出来会更方便。但最小系统板上,四根线已经足够下载和调试程序了。
实操心得:SWDIO和SWCLK走线尽量等长,不要和其他高频信号线平行走太远。如果调试时经常连接失败,可以在SWDIO和SWCLK上各串一个100Ω电阻,能改善信号完整性。另外,PA13和PA14在芯片复位后默认就是SWD功能,不需要额外配置。
4. 原理图绘制实操:从放置元件到网络检查
4.1 元件放置与引脚对齐技巧
在立创EDA里放置元件时,建议按功能模块分区摆放。比如左上角放电源模块,右上角放芯片,芯片左边放时钟电路,右边放复位电路,下边放SWD接口和启动配置。这样连线的时候思路清晰,检查也方便。
放置STM32F103C8T6的时候,注意它的引脚在符号上可能不是按物理顺序排列的,而是按功能分组。立创EDA的商城库符号通常会把电源引脚放在顶部,地引脚放在底部,GPIO按端口分组放在两侧。这种排列方式对画图很友好,但你要对照数据手册确认每个引脚的功能标注是否正确。
连线的时候,用网络标签(Net Label)比直接拉线更清晰。比如VDD引脚不直接连到电源符号,而是放一个“+3V3”的网络标签;GND引脚放“GND”标签。这样原理图看起来干净,PCB阶段网络连接也不会出错。
4.2 网络标签命名规范与连接检查
网络标签的命名我建议遵循这几个原则:
- 电源用“+3V3”和“GND”,不要用“VCC”和“VSS”,因为STM32的电源引脚叫VDD和VSS,容易混淆。
- 信号线用功能名,比如“SWDIO”“SWCLK”“NRST”“BOOT0”。
- 晶振引脚用“OSC_IN”和“OSC_OUT”,不要用“PD0”“PD1”,因为PD0和PD1在STM32F103C8T6上就是OSC_IN和OSC_OUT,但用功能名更直观。
- 如果同一个网络有多个连接点,确保标签拼写完全一致。立创EDA对大小写敏感,“SWDIO”和“swdio”会被当成两个不同的网络。
画完原理图后,一定要用立创EDA的“设计规则检查”(DRC)功能跑一遍。它会检查悬空引脚、重复网络标签、电源短路等问题。我见过太多人画完直接导出PCB,结果发现某个VDD引脚忘了接,板子打回来才发现,浪费时间和打板费。
4.3 从原理图到PCB:封装确认与网表导出
原理图检查无误后,下一步是导出网表并生成PCB。在立创EDA里,直接点“设计”->“转换原理图到PCB”就行。
但在转换之前,必须确认每个元件的PCB封装都正确。特别是STM32F103C8T6的LQFP-48封装,要确认引脚间距是0.5mm,焊盘尺寸和官方推荐一致。立创EDA商城库里的封装通常是经过验证的,但如果你用的是自己画的封装,一定要对照数据手册的Recommended PCB layout章节检查。
晶振的封装也要注意。8MHz无源晶振常见的有5032、3225、2016等封装,最小系统板上用5032或者直插的HC-49S都可以。我一般用5032贴片封装,体积小,焊接也不难。
注意:导出网表之前,再次确认BOOT0、BOOT1、NRST、SWDIO、SWCLK这几个关键网络的连接。这几个网络如果画错,板子打回来可能直接跑不起来,排查起来很麻烦。
5. 常见问题与排查技巧实录
5.1 芯片不启动、晶振不起振怎么查
这是最小系统板最常见的问题。板子打回来,焊好芯片,上电,发现程序下载不进去,或者下载进去了但不运行。排查思路如下:
第一步,查电源。用万用表量每个VDD引脚的电压,应该是3.3V。如果某个引脚电压不对,检查对应的去耦电容是否虚焊,或者PCB走线是否断开。
第二步,查复位。量NRST引脚的电压,正常应该是3.3V左右。如果一直是低电平,检查复位按键是否短路,或者电容是否击穿。
第三步,查晶振。用示波器量OSC_IN引脚,应该有8MHz的正弦波。如果没有,检查晶振是否焊反(无源晶振不分方向,但封装焊盘可能不对称),负载电容是否焊错。如果示波器探头接上去之后晶振就起振了,说明负载电容偏大,换小一点的试试。
第四步,查BOOT0。量BOOT0引脚的电压,正常应该是0V。如果是高电平,芯片会进入系统存储器启动模式,不会运行你下载的程序。
第五步,查SWD连接。如果SWD连不上,检查SWDIO和SWCLK是否接反,排针是否虚焊。DAPLink的指示灯如果一直闪红灯,说明连接失败。
5.2 SWD连接失败、下载报错的排查思路
SWD连接失败的原因很多,我整理了一个速查表:
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| 找不到设备 | 电源未接通 | 检查3.3V和GND连接 |
| 找不到设备 | SWDIO/SWCLK接反 | 交换两根线 |
| 能找到但下载失败 | 芯片被读保护 | 用STM32CubeProgrammer解除保护 |
| 下载后不运行 | BOOT0电平不对 | 确认BOOT0为低 |
| 连接不稳定 | 走线太长或干扰 | 缩短SWD走线,加串阻 |
| 复位后连接失败 | NRST被拉低 | 检查复位电路 |
还有一个容易被忽略的问题:有些DAPLink或者ST-Link的固件版本太老,不支持STM32F103C8T6的新批次芯片。遇到这种情况,升级调试器固件通常能解决。
5.3 电源纹波过大、ADC采样不准的处理
如果你在用ADC功能,发现采样值跳动很大,首先要查电源纹波。用示波器交流耦合档量3.3V电源,如果纹波超过50mV,说明去耦不够。
处理方法:在每个VDD引脚旁边再加一个1μF的电容,和100nF并联。VDDA引脚单独用一个10Ω电阻加100nF电容做RC滤波,能显著改善ADC精度。
另外,ADC的参考电压就是VDDA,如果VDDA不稳定,采样值肯定不准。最小系统板上,VDDA和VDD之间可以用一个0Ω电阻或者磁珠连接,减少数字电路对模拟电源的干扰。
实操心得:我遇到过一块板子,ADC采样值一直偏高,查了半天发现是VDDA引脚忘了接。STM32F103C8T6的VDDA在LQFP48封装上是引脚9,不是引脚7。引脚7是NRST。这个坑我踩过不止一次,每次画新板子都要对着数据手册确认一遍。
5.4 自己画最小系统板容易踩的五个坑
最后总结一下我自己踩过的坑,希望能帮你省点时间:
坑一:VDD引脚漏接。STM32F103C8T6有4个VDD,不是1个。漏接任何一个,芯片都可能工作不稳定。
坑二:BOOT0悬空。BOOT0内部没有上下拉,悬空时电平不确定,芯片可能随机进入下载模式。
坑三:晶振负载电容选错。22pF是常用值,但如果你用的晶振CL标称是12.5pF,22pF就偏大了,可能导致起振困难。
坑四:复位电容太大。100nF是常用值,但如果用1μF,复位延时太长,调试器可能连接不上。
坑五:SWD排针顺序搞反。不同厂家的DAPLink排针顺序可能不一样,画板子之前先确认你手头调试器的线序。
6. 从最小系统到实际项目的扩展思路
最小系统画完之后,它就是一个可靠的硬件平台。你可以在这个基础上扩展各种外设:加一个CH340做串口通信,加一个OLED屏做显示,加一个DHT11做温湿度采集,加一个TB6612做电机驱动。这些外设的原理图设计,本质上都是在最小系统的基础上增加新的模块,核心的电源、时钟、复位、调试接口是不变的。
如果你打算把STM32F103C8T6用到实际产品中,还需要考虑几个额外的问题:电源的稳定性(加TVS管防浪涌)、EMC(加共模电感、滤波电容)、PCB层叠(四层板比两层板抗干扰能力强很多)、以及代码加密(STM32F103C8T6支持读保护,可以通过选项字节设置)。
我个人在实际操作中的体会是,最小系统虽然简单,但它是整个硬件设计的地基。地基打牢了,后面加什么外设都是水到渠成的事。反过来,如果最小系统有隐患,比如电源去耦不够、复位电路不可靠,后面调试外设的时候就会各种莫名其妙的问题,查起来非常痛苦。所以花时间把最小系统画好、焊好、测好,绝对是值得的。