1. 为什么一块最小系统板值得反复打磨
STM32F103C8T6这颗料,圈子里叫它"蓝药丸"或者"最小系统板",几乎是每个嵌入式工程师入门ARM Cortex-M3的第一块板子。它便宜、好买、资料多,48个引脚塞进了72MHz主频、64KB Flash、20KB SRAM,还有CAN、USB、多个USART和SPI,性价比放到今天依然能打。但真正自己动手从原理图到PCB走一遍的人会发现,这块板子看着简单,坑却不少——电源纹波、晶振不起振、复位电路误触发、SWD下载失败、BOOT引脚配置错误,随便一个都能让你在调试台上耗掉一整个下午。
这篇内容就是把我自己画这块板子踩过的坑、验证过的方案、以及一些教科书上不会写的细节,完整地摊开来讲。适合已经会基本EDA操作、想自己画一块能稳定跑起来的最小系统板的同学,也适合画过几版但总有小毛病、想搞清楚"为什么这么设计"的工程师。核心关键词就三个:STM32F103C8T6、最小系统核心板、原理图与PCB设计。我会从整体思路讲到具体参数计算,再到实操步骤和排查技巧,尽量做到你照着做就能复现。
先说清楚一个前提:最小系统不等于"能点亮LED就行"。一个合格的最小系统核心板,至少要保证MCU能稳定上电、能可靠复位、能正常下载程序、晶振能起振、电源干净、BOOT模式可切换。这五条是底线,任何一条出问题,后面写再多代码都是白搭。所以设计的时候,思路要围绕"稳定性"而不是"能跑就行"来展开。
2. 整体方案设计与核心思路拆解
2.1 最小系统的边界到底在哪里
很多人对"最小系统"的理解有偏差,以为只要把MCU焊上去、接个电源就行。实际上,STM32F103C8T6要能正常工作,外围必须包含这几块:电源电路(3.3V稳压)、复位电路、时钟电路(外部晶振)、启动模式配置电路(BOOT0/BOOT1)、以及调试接口(SWD)。这五块缺一不可,少一个都可能出现"程序下载不进去"或者"上电不运行"的情况。
我见过有人为了省事,把BOOT0直接接地、BOOT1也接地,结果想用串口下载的时候发现进不去Bootloader,只能拆板子改电路。所以我的建议是:BOOT0用一个跳线帽或者0欧电阻预留出来,BOOT1也留个选择位。多两个元件,换来的是调试灵活性,这笔账很划算。
另外,去耦电容这块也是重灾区。STM32F103C8T6有多个VDD和VSS引脚,每个电源引脚旁边都应该放一个100nF的陶瓷电容,越靠近引脚越好。VBAT引脚如果不用电池,也要接VDD并加去耦。这些细节在数据手册的电源部分写得清清楚楚,但很多人画图的时候直接忽略了。
2.2 电源方案怎么选:LDO还是DC-DC
最小系统板的输入电源通常是5V(USB或者外部适配器),MCU需要3.3V。这里有两个选择:LDO线性稳压和DC-DC开关稳压。
LDO的优点是电路简单、输出纹波小、没有开关噪声,缺点是效率低、发热大。如果输入5V输出3.3V,压差1.7V,假设电流100mA,那LDO自身就要消耗0.17W的功率,SOT-23封装的LDO会明显发热。但对于最小系统板这种几十到一百多毫安的负载,LDO完全够用,而且纹波小对ADC采样和晶振稳定性更友好。
DC-DC效率高,但需要电感、二极管、反馈电阻,布局不好还会引入开关噪声,干扰MCU的模拟部分。除非你的板子要带很多外设、电流需求大,否则最小系统板用LDO是更稳妥的选择。
我常用的方案是AMS1117-3.3或者RT9013。AMS1117便宜好买,但静态电流偏大、压差要求高(约1.1V),输入5V时输出3.3V没问题。RT9013压差更低、静态电流更小,适合电池供电场景。选哪个看你的实际需求,但记住一点:LDO的输入输出都要加电容,输入侧建议10uF,输出侧建议10uF加100nF,这样能有效抑制纹波和瞬态响应。
2.3 晶振电路:8MHz主晶振和32.768kHz RTC晶振
STM32F103C8T6的主时钟来源有几个选项:内部HSI(8MHz)、外部HSE(通常8MHz)、内部LSI、外部LSE(32.768kHz)。最小系统板一般都会焊一个8MHz的外部晶振,因为HSE的精度比HSI高得多,而且用HSE配合PLL可以稳定跑到72MHz。
晶振电路看起来简单,就两个电容加一个晶体,但坑特别多。负载电容的计算是关键:CL = (C1 * C2) / (C1 + C2) + Cstray,其中Cstray是PCB走线的寄生电容,一般取3到5pF。假设晶振的负载电容要求是20pF,那C1和C2大概各取22pF到27pF。但实际选值还要看晶振手册,不同厂家的晶振负载电容要求不一样。
我踩过的坑是:用了错误的负载电容,导致晶振起振困难,有时候能起振有时候不能,特别在低温环境下更容易出问题。后来用示波器测晶振引脚,发现波形幅度很小、频率偏移,换了匹配的电容之后就稳定了。所以晶振电容不要随便抄别人的值,一定要看自己用的晶振手册。
另外,晶振的布局也很讲究。晶振和负载电容要尽量靠近MCU的OSC引脚,走线要短、要对称,下方最好不要走其他信号线,尤其是高频信号。晶振下方铺地可以,但不要铺电源。有些设计还会在晶振旁边加一个1M欧的反馈电阻,STM32内部其实已经有这个电阻了,外部一般不需要再加。
32.768kHz的RTC晶振是可选的,如果你不用RTC功能,可以不焊。但如果要焊,同样要注意负载电容,通常是6pF或12.5pF,对应的电容值在10pF到22pF之间。RTC晶振的走线更要小心,因为它频率低、驱动能力弱,容易被干扰。
2.4 复位电路:阻容复位还是专用复位芯片
STM32F103C8T6的NRST引脚是低电平复位,内部有上拉电阻,但为了可靠复位,外部一般会加一个100nF电容到地,再配一个10k欧的上拉电阻。这就是最经典的阻容复位电路。
但阻容复位有个问题:如果电源上升速度慢,或者有抖动,复位引脚的电平可能处于不确定状态,导致MCU反复复位或者不复位。所以有些设计会用专用的复位芯片,比如MAX809或者STM32内部的POR/PDR电路。实际上STM32F103内部已经有上电复位和掉电复位电路,外部阻容复位主要是为了手动复位和增强抗干扰能力。
我的做法是:NRST引脚接一个100nF电容到地,再并一个10k欧上拉到3.3V,同时接一个复位按键。按键按下时NRST拉低,松开后电容充电,复位释放。这个电路简单可靠,实测下来没问题。注意电容不要太大,否则复位释放太慢,影响启动时间;也不要太小,否则抗干扰能力差。100nF是个比较平衡的值。
2.5 BOOT模式配置:别小看这两个引脚
BOOT0和BOOT1(PB2)决定了MCU上电后的启动模式。BOOT0=0时从主Flash启动,这是正常运行的模式;BOOT0=1、BOOT1=0时从系统存储器启动,也就是Bootloader模式,可以用串口下载程序;BOOT0=1、BOOT1=1时从SRAM启动,一般用于调试。
很多最小系统板为了省事,把BOOT0直接接地,这样确实能正常运行,但想用串口下载的时候就麻烦了。我的建议是BOOT0用一个2.54mm的排针加跳线帽,或者用一个0欧电阻选择。BOOT1一般不用改,直接接地就行,因为从SRAM启动的场景很少。
这里有个细节:BOOT0引脚在复位期间的电平会被锁存,所以跳线帽要在上电前就设置好。如果你在运行中改变BOOT0,不会立即生效,必须复位后才能进入对应的启动模式。
3. 原理图设计细节与参数计算
3.1 电源部分的完整设计
电源部分从USB的5V或者外部5V输入开始。首先加一个自恢复保险丝或者肖特基二极管做防反接保护,然后接LDO的输入端。LDO输入端加一个10uF的钽电容或者陶瓷电容,输出端加10uF加100nF。
这里有个计算:LDO的功耗P = (Vin - Vout) * Iout。假设Vin=5V,Vout=3.3V,Iout=150mA,那P = 1.7 * 0.15 = 0.255W。SOT-23封装的LDO热阻大约250°C/W,温升就是0.255 * 250 = 64°C。如果环境温度25°C,结温就是89°C,还在安全范围内。但如果电流再大,就要考虑换封装或者加散热铜皮。
去耦电容的布局:每个VDD引脚旁边放一个100nF,VBAT引脚也放一个100nF。另外在电源入口处放一个10uF的 bulk电容。这些电容要尽量靠近引脚,走线要短而粗。我一般会在PCB上把100nF电容放在MCU的同一面,紧贴引脚,电源走线先经过电容再进引脚。
3.2 晶振电路的参数确定
以8MHz晶振为例,假设晶振手册给出的负载电容CL=20pF,PCB寄生电容Cstray取4pF。那外部电容C1=C2=2*(CL - Cstray) = 2*(20-4) = 32pF。但实际常用的值是22pF到33pF,因为晶振的实际负载电容和手册值可能有偏差,而且Cstray的估算也不精确。
我的做法是:先按计算值选电容,焊好之后用频率计或者示波器测晶振频率,如果偏差大就调整电容值。一般来说,电容偏大频率会偏低,电容偏小频率会偏高。对于8MHz晶振,频率偏差在几十ppm以内都可以接受,因为PLL会倍频到72MHz,偏差也会被放大,所以晶振精度很重要。
晶振的走线:OSC_IN和OSC_OUT两根线要尽量短、尽量对称,最好包地处理。晶振下方不要走其他信号线,尤其是SWD或者USB的差分线。如果板子空间允许,晶振周围可以加一个接地屏蔽罩的焊盘,但一般最小系统板不需要这么讲究。
3.3 复位电路的参数选择
NRST引脚的复位电路:100nF电容到地,10k欧上拉到3.3V。复位按键并联在电容两端,按下时NRST拉低。
复位时间常数τ = R * C = 10k * 100nF = 1ms。复位释放后,NRST电压从0上升到3.3V的63%需要1ms,上升到90%需要2.3ms。STM32的复位阈值大约是2V左右,所以复位释放时间大约在1ms到2ms之间。这个时间足够MCU完成上电初始化。
如果电容取大了,比如1uF,那τ=10ms,复位释放要20多ms,启动会变慢。如果电容取小了,比如10nF,τ=0.1ms,抗干扰能力就差,容易误复位。所以100nF是个比较合适的值。
3.4 SWD调试接口的接线
SWD接口只需要两根线:SWDIO和SWCLK,再加上GND和3.3V。SWDIO对应PA13,SWCLK对应PA14。这两个引脚在MCU内部有上拉,外部一般不需要再加。
但要注意:PA13和PA14在复位后默认是SWD功能,如果你在程序里把它们配置成普通GPIO,那下次下载程序的时候就连不上了。所以调试接口的引脚要谨慎复用,或者用SWD的复位引脚(NRST)配合下载器强制复位。
SWD接口的布局:尽量靠近MCU,走线短而直,不要和晶振或者电源走线平行。如果板子上有多个GND引脚,SWD的GND要单独走一根线到MCU的GND,不要和功率地混在一起。
3.5 其他外围电路:LED、按键、USB
最小系统板一般会加一个电源指示灯和一个用户LED。电源指示灯接在3.3V和GND之间,串一个1k欧电阻。用户LED接在某个GPIO上,比如PC13,串一个470欧到1k欧的电阻。
按键可以加一个复位按键和一个用户按键。用户按键接在某个GPIO上,另一端接地,GPIO配置为上拉输入。注意按键要加消抖电容,一般100nF就够了。
USB接口如果只是供电,那只需要VBUS和GND。如果要用来通信,那D+和D-要接PA12和PA11,并且要加22欧的匹配电阻。USB的差分线要走90欧姆的差分阻抗,走线要等长、平行、尽量短。
4. PCB布局布线的实操要点
4.1 布局原则:先大后小,先核心后外围
PCB布局的第一步是把MCU放在板子中间或者偏一侧,然后围绕MCU放置晶振、复位电路、去耦电容、LDO、接口。
晶振要尽量靠近MCU的OSC引脚,走线长度最好控制在10mm以内。去耦电容要放在MCU的同一面,紧贴VDD引脚,电源走线先经过电容再进引脚。LDO要放在电源入口附近,输入输出电容紧贴LDO引脚。
SWD接口放在板子边缘,方便插下载器。USB接口也放在边缘,方便插线。BOOT跳线放在容易操作的位置,不要被其他元件挡住。
4.2 电源走线:宽度和过孔的计算
电源走线的宽度要根据电流来算。1盎司铜厚的情况下,1mm宽的走线大约能承载1A的电流,温升10°C。但实际设计要留余量,我一般用0.5mm到1mm的走线宽度。
过孔的数量也要算:一个0.3mm孔径的过孔大约能承载0.5A的电流。如果电源电流是200mA,那一个过孔就够了。但为了降低阻抗,我一般会放两个过孔。
电源走线要尽量短而粗,避免走细长线。如果板子有多个电源层,那最好用平面分割,但最小系统板一般是双层板,所以电源走线要手动优化。
4.3 晶振走线:短、对称、包地
晶振的走线是最讲究的。OSC_IN和OSC_OUT两根线要尽量短,最好不超过10mm。两根线要对称,长度差控制在1mm以内。走线下方不要走其他信号线,尤其是高频信号。
晶振周围可以包地,但包地要完整,不要有断点。包地的过孔要密集,间距小于λ/20,对于8MHz信号,波长是37.5米,λ/20是1.875米,所以过孔间距只要小于1.8米就行,实际上随便放几个过孔就够了。
晶振的负载电容要放在晶振和MCU之间,走线要短。电容的接地端要直接接到GND平面,不要走长线。
4.4 去耦电容的布局:靠近引脚,先电容后引脚
去耦电容的作用是提供瞬态电流,所以必须靠近MCU的电源引脚。我一般把100nF电容放在MCU的同一面,紧贴引脚,电源走线先经过电容再进引脚。
电容的接地端要直接接到GND平面,过孔要尽量靠近电容的焊盘。如果板子是双层板,那GND走线要尽量宽,最好铺地。
多个去耦电容之间不要串联,要并联。每个VDD引脚都要有独立的去耦电容,不要共用。
4.5 接地处理:单点接地还是多点接地
最小系统板的接地一般用多点接地,也就是铺地。双层板的底层可以整层铺地,顶层的空白区域也铺地,然后通过过孔连接。
但要注意:模拟地和数字地要分开。STM32F103C8T6有VDDA和VSSA引脚,这是模拟电源和模拟地。如果板子上有ADC或者DAC应用,那VDDA要单独走线,VSSA要单独接地,最后在一点汇合。
如果不用模拟功能,VDDA可以接VDD,VSSA可以接VSS。但为了保险,我一般还是会把VDDA和VSSA单独处理,加一个磁珠或者0欧电阻连接。
4.6 丝印和标注:方便调试和焊接
丝印要清晰标注每个引脚的功能,尤其是电源、地、SWD、BOOT、晶振这些关键引脚。元件位号要放在元件旁边,不要被挡住。
我一般会在板子上标注版本号、日期、设计者信息,方便后续维护。接口的引脚定义也要标清楚,比如SWD接口的1脚是3.3V、2脚是SWDIO、3脚是SWCLK、4脚是GND。
5. 实操过程与核心环节实现
5.1 从零开始画原理图的完整流程
第一步:新建工程,选择STM32F103C8T6的符号。如果库里没有,可以从官网下载或者自己画。自己画的时候要注意引脚编号和名称要和数据手册一致。
第二步:放置MCU,然后依次放置电源电路、复位电路、晶振电路、BOOT电路、SWD接口、LED和按键。
第三步:连接网络。电源网络用VDD_3V3和GND,晶振网络用OSC_IN和OSC_OUT,复位网络用NRST,SWD网络用SWDIO和SWCLK。
第四步:检查连接。用ERC(电气规则检查)工具检查有没有未连接的引脚、电源冲突、短路等问题。
第五步:分配封装。每个元件都要指定正确的封装,比如MCU用LQFP48,电阻电容用0603或者0805,晶振用HC-49S或者贴片晶振。
第六步:生成网表,导入PCB。
5.2 关键参数的实测与验证
晶振频率的测量:用示波器接在OSC_OUT引脚上,探头要选10X档,避免探头电容影响晶振。测到的频率应该在8MHz附近,偏差在几十ppm以内。
电源纹波的测量:用示波器接在3.3V和GND之间,探头要选AC耦合,带宽限制到20MHz。测到的纹波应该在几十mV以内,如果超过100mV就要检查去耦电容和LDO。
复位时间的测量:用示波器接在NRST引脚上,按下复位按键,观察NRST从低到高的上升时间。应该在1ms到2ms之间。
SWD通信的验证:用ST-Link或者J-Link连接SWD接口,用STM32CubeProgrammer或者Keil MDK尝试连接。如果能读到芯片ID,说明SWD通信正常。
5.3 焊接与调试的注意事项
焊接顺序:先焊MCU,再焊晶振、复位电路、LDO,最后焊接口和按键。MCU的引脚比较密,建议用热风枪或者细烙铁头,加助焊剂,避免连锡。
焊接温度:无铅焊锡的熔点大约217°C,烙铁温度建议320°C到350°C,热风枪温度建议300°C到350°C。温度太高会损坏元件,温度太低会虚焊。
调试步骤:先不焊MCU,只焊电源部分,上电测3.3V是否正常。然后焊MCU,测晶振是否起振。然后连SWD,测能否下载程序。最后焊其他外围,测功能是否正常。
5.4 程序下载与运行验证
用STM32CubeMX配置时钟:HSE选8MHz,PLL倍频到72MHz,AHB、APB1、APB2的分频系数按默认设置。生成代码后,在main函数里加一个LED闪烁的程序。
编译下载:用Keil MDK或者STM32CubeIDE编译,用ST-Link下载。下载成功后,复位MCU,观察LED是否闪烁。
如果LED不闪,检查:BOOT0是否接地、晶振是否起振、复位电路是否正常、电源是否稳定、SWD是否连接正确。
6. 常见问题与排查技巧实录
6.1 晶振不起振的排查思路
晶振不起振是最常见的问题之一。排查步骤:
测晶振引脚电压:正常情况下OSC_IN和OSC_OUT的电压应该在1V到2V之间,接近VDD/2。如果电压是0V或者3.3V,说明晶振没起振。
检查负载电容:电容值是否匹配晶振的负载电容要求。如果不确定,可以试着换小一点的电容,比如从22pF换到10pF。
检查焊接:晶振和电容是否虚焊,引脚是否短路。
检查PCB布局:晶振走线是否太长,是否靠近干扰源。
换晶振:有些晶振质量不好,起振困难,换一个品牌的试试。
6.2 SWD连接失败的常见原因
SWD连接失败的原因很多,常见的有:
- BOOT0没有接地,MCU进入了Bootloader模式。
- SWDIO和SWCLK接反了。
- NRST没有接,下载器无法复位MCU。
- MCU的SWD引脚被程序配置成了普通GPIO。
- 电源不稳定,MCU工作异常。
- 下载器的驱动没有安装好。
排查方法:先用万用表测SWDIO和SWCLK的对地阻抗,正常应该在几十k欧到几百k欧之间。如果阻抗很低,说明有短路。然后测NRST电压,正常应该是3.3V。最后用下载器的复位模式,选择"Connect under reset"。
6.3 电源纹波过大的解决方法
电源纹波过大可能导致MCU工作不稳定、ADC采样不准、晶振频率偏移。解决方法:
- 增加去耦电容:每个VDD引脚加100nF,电源入口加10uF。
- 换LDO:有些LDO的纹波抑制比不好,换一个PSRR高的LDO。
- 优化布局:去耦电容靠近引脚,电源走线短而粗。
- 加LC滤波:在电源入口加一个磁珠和电容组成的LC滤波器。
6.4 复位电路误触发的处理
复位电路误触发表现为MCU频繁复位或者上电不运行。原因可能是:
- 复位电容太小,抗干扰能力差。
- 复位走线太长,引入了干扰。
- 复位按键没有消抖电容。
- 电源上升速度慢,复位释放时间不够。
解决方法:增大复位电容到100nF,缩短复位走线,加消抖电容,检查电源上升时间。
6.5 常见问题速查表
| 问题现象 | 可能原因 | 排查方法 | 解决方案 |
|---|---|---|---|
| 晶振不起振 | 负载电容不匹配 | 测晶振引脚电压 | 调整电容值 |
| SWD连接失败 | BOOT0未接地 | 测BOOT0电压 | 接地或跳线 |
| 电源纹波大 | 去耦电容不足 | 示波器测纹波 | 增加去耦电容 |
| 频繁复位 | 复位电容太小 | 测NRST波形 | 增大电容 |
| 程序下载后不运行 | BOOT模式错误 | 测BOOT0/BOOT1 | 设置正确模式 |
| LED不亮 | GPIO配置错误 | 测GPIO电压 | 检查程序 |
| 发热严重 | LDO功耗过大 | 测LDO电流 | 换LDO或降低电流 |
6.6 独家避坑技巧
第一个坑:晶振的负载电容不要照抄别人的值。我见过有人用22pF的电容配6pF负载电容的晶振,结果晶振频率偏了100多ppm,PLL倍频后偏差更大,串口通信都出问题。一定要看自己用的晶振手册。
第二个坑:BOOT0不要直接接地。留一个跳线帽,调试的时候方便。我因为BOOT0接地,想用串口下载的时候拆了好几次板子。
第三个坑:去耦电容不要省。有人觉得100nF电容太多,只放一个10uF的,结果MCU工作不稳定。每个VDD引脚都要有100nF,这是底线。
第四个坑:SWD接口的GND要单独走线。如果和功率地混在一起,下载的时候容易受干扰,连接不稳定。
第五个坑:LDO的输入输出电容不要省。有人只放输出电容,不放输入电容,结果LDO自激振荡,输出电压不稳。
第六个坑:晶振下方不要走线。我见过有人在晶振下方走了一根PWM信号线,结果晶振频率被调制,MCU跑飞。
第七个坑:复位按键要加消抖电容。不加的话,按一次复位可能触发多次复位,MCU启动异常。
第八个坑:PCB的丝印要标清楚。调试的时候找不到引脚,浪费时间。
7. 从设计到量产的延伸思考
7.1 国产替代料的选型考量
STM32F103C8T6的国产替代料不少,比如GD32F103C8T6、APM32F103C8T6、CH32F103C8T6等。这些料在引脚和寄存器层面基本兼容,但也有一些差异。
GD32F103C8T6的主频可以跑到108MHz,Flash和SRAM更大,但功耗也更高。APM32F103C8T6的功耗更低,适合电池供电。CH32F103C8T6的价格更便宜,但生态和资料相对少一些。
选替代料的时候要注意:晶振的负载电容要求可能不同,复位电路的门限电压可能不同,SWD的时序可能不同。最好先买样品测试,确认兼容性后再批量使用。
7.2 PCB打样和SMT的注意事项
PCB打样的时候要注意:板厚选1.6mm,铜厚选1盎司,表面处理选沉金或者喷锡。沉金的可焊性更好,但价格贵一些。喷锡便宜,但平整度差一些。
SMT的时候要注意:元件的封装要和PCB的焊盘匹配,钢网的开口要合适,回流焊的温度曲线要调好。MCU的引脚比较密,容易连锡,建议用免清洗助焊剂。
7.3 后续功能扩展的方向
最小系统板跑通之后,可以扩展很多功能:加一个OLED显示屏,加一个DHT11温湿度传感器,加一个WS2812B灯带,加一个TB6612电机驱动,加一个编码器接口,加一个CAN收发器,加一个USB转串口芯片。
扩展的时候要注意:电源的电流要够,GPIO的驱动能力要够,通信接口的电平要匹配。比如WS2812B需要5V供电,但数据线是3.3V电平,可能需要电平转换。
7.4 加密和固件保护
STM32F103C8T6支持读保护(RDP)和写保护(WRP)。读保护可以防止别人通过SWD读出Flash里的程序,写保护可以防止程序被篡改。
设置读保护的方法:用STM32CubeProgrammer或者ST-Link Utility,在Option Bytes里设置RDP等级。等级1是读保护,等级2是永久读保护(不可逆)。设置之前要确认程序已经调试完毕,因为设置读保护后SWD就读不出Flash了。
固件保护还可以用唯一ID加密:每个STM32F103C8T6都有一个96位的唯一ID,可以用这个ID生成密钥,程序运行时校验密钥,防止固件被复制到其他芯片上运行。
7.5 低功耗设计的考虑
如果最小系统板要用在电池供电的场景,低功耗设计就很重要。STM32F103C8T6支持睡眠、停止、待机三种低功耗模式。待机模式的电流可以低到2uA左右。
低功耗设计的要点:不用的外设要关闭时钟,不用的GPIO要配置成模拟输入或者下拉,LDO要选静态电流小的,LED要选低功耗的或者去掉。
晶振也可以选择低功耗的,比如32.768kHz的RTC晶振在待机模式下可以保持运行,主晶振可以关闭。
8. 个人实操体会与建议
画这块板子前后我打了五版,前两版都有各种小问题,第三版开始稳定。最大的体会是:最小系统板看着简单,但每一个元件、每一根走线都有它的道理,不能随便省。
晶振的负载电容一定要看手册,不要抄别人的值。BOOT0一定要留跳线,不要直接接地。去耦电容一定要每个VDD引脚都放,不要省。SWD接口的GND一定要单独走线,不要和功率地混在一起。
还有一点:PCB布局的时候,先放MCU,再放晶振和去耦电容,再放LDO和接口。晶振和去耦电容要尽量靠近MCU,LDO要靠近电源入口。走线的时候,电源线要粗,信号线要短,晶振线要对称。
最后分享一个小技巧:板子焊好之后,先不要急着上电,用万用表测一下3.3V和GND之间的阻抗,正常应该在几百欧到几千欧之间。如果阻抗很低,说明有短路,要先排查再上电。这个习惯帮我避免了好几次烧芯片的事故。
这个板子后续还可以扩展成一个完整的开发平台,加显示屏、传感器、通信模块,做成一个通用的嵌入式开发板。但那是下一步的事了,先把最小系统跑稳,后面的事情自然水到渠成。