☰
STM32F103C8T6核心板DIY全攻略:嘉立创EDA从原理图到PCB实战
2026/10/6 20:24:54 网站建设 项目流程

STM32F103C8T6这颗料,放在今天来看依然是个很有意思的选择。它不算新,甚至可以说有点"老",但架不住它便宜、资料多、生态成熟,拿来做学习板、验证板、小批量产品的核心控制单元都特别顺手。我前后用嘉立创EDA画过不下十块基于这颗芯片的板子,从最早那种"能跑就行"的粗糙版本,到后来慢慢把电源、晶振、复位、下载接口这些细节都抠到位,中间踩过的坑确实不少。这篇内容就是把我从零画一块STM32F103C8T6核心板的完整过程拆开来讲,包括原理图怎么搭、封装怎么选、PCB怎么布局布线、星型接地怎么处理、打样前要检查哪些东西。不管你是刚接触嘉立创EDA的新手,还是已经画过几块板子但想把这颗芯片的最小系统彻底搞明白的人,应该都能从里面找到能直接用的东西。

1. 为什么STM32F103C8T6核心板值得自己画一遍

1.1 市售最小系统板的几个现实问题

很多人入门STM32的第一步是买一块现成的最小系统板,十几块钱包邮,插上面包板就能跑。这个路径没问题,但用久了你会发现几个绕不开的麻烦。第一是引脚定义不统一,不同厂家的板子把BOOT跳线、复位按键、下载接口放在完全不同的位置,换一块板子就得重新对一遍接线。第二是电源部分做得比较随意,有些板子只给了一个AMS1117-3.3,输入输出电容加起来不到10微法,跑个ADC或者驱动个电机,电压纹波大得离谱。第三是板载资源要么太多要么太少,有的把CH340、OLED接口、按键全堆上去,板子比名片还大;有的又只剩芯片和晶振,连个电源指示灯都没有。

自己画一块的好处在于,你可以完全按自己的使用习惯来定。比如我习惯把SWD接口放在板子左侧、USB口放上方、所有GPIO按端口顺序排列在两侧,这样插面包板的时候走线特别顺。电源部分我会给足余量,输入输出各放两个电容,3.3V和5V都引出排针。这些细节看起来不起眼,但真正用起来的时候,顺手和不顺手差距很大。

1.2 嘉立创EDA在这类项目上的实际表现

嘉立创EDA分标准版和专业版两个版本,画这种规模的板子两个都够用。标准版上手更快,元件库和立创商城直接打通,搜型号就能找到现成的符号和封装;专业版在布线、铺铜、DRC这些环节更接近传统EDA软件的操作逻辑,适合以后要画更复杂板子的人。我自己的习惯是,简单的双面板用标准版,四层板或者有阻抗要求的用专业版。

这颗芯片的外围电路其实不复杂,但有几个地方特别容易出问题:晶振的负载电容取值、BOOT引脚的上拉下拉、复位电路的RC参数、还有电源的去耦电容布局。这些在嘉立创EDA里都有对应的处理方式,后面会一个个讲。另外要提一句,嘉立创EDA的元件库虽然全,但同一个型号可能有多个版本的符号和封装,选的时候一定要看清楚引脚编号和实际芯片是否一致,这个坑我踩过不止一次。

1.3 这块核心板最终要达成什么目标

在动手之前先把目标定清楚,不然后面很容易越画越乱。我这块板子的定位是:能独立供电、能通过SWD下载调试、能直接插面包板、所有GPIO按顺序引出、板载一个电源指示灯和一个用户LED、复位按键和BOOT选择跳线都要有。尺寸控制在50mm×30mm以内,双面板,1.6mm板厚,沉金工艺。成本方面,打样五片加上元器件,单板控制在十五块钱以内。

这个目标看起来简单,但每一项都对应着具体的设计决策。比如"能直接插面包板"意味着排针间距必须是2.54mm,板子宽度不能超过面包板中间槽的间距;"所有GPIO按顺序引出"意味着排针排列要按PA0到PA15、PB0到PB15这样排,不能东一个西一个;"独立供电"意味着要么有USB口,要么有DC座,或者两者都有。这些约束条件在画原理图之前就要想清楚,否则画到一半发现排针放不下,返工的成本很高。

2. 原理图阶段:从芯片符号到完整最小系统

2.1 在嘉立创EDA里找到正确的芯片符号和封装

打开嘉立创EDA,新建工程之后第一件事是放置STM32F103C8T6的符号。在元件库搜索框里输入型号,通常会出来好几个结果,有ST原厂的,也有第三方整理的。我一般优先选立创商城关联的符号,因为它的引脚定义和封装基本不会出错。选中之后要确认两件事:一是符号的引脚编号和实际芯片的LQFP48封装是否对应,二是封装是不是LQFP-48_7x7mm_P0.5mm这个规格。

这里有个细节值得说一下。STM32F103C8T6是48脚封装,但它的引脚分布不是按端口顺序排列的,PA、PB、PC各占一段,中间还夹着电源和地。如果你直接按符号上的顺序连线,画出来的原理图会很乱。我的做法是在符号放置之后,先不急着连线,而是把符号的引脚按功能分组:电源组(VDD、VDDA、VSS、VSSA)、时钟组(PD0、PD1)、复位组(NRST)、启动组(BOOT0、BOOT1)、下载组(PA13、PA14)、用户IO组。分组之后再连线,逻辑会清晰很多。

封装的选择同样重要。LQFP48的封装在嘉立创EDA里有现成的,但要注意焊盘长度和宽度。标准封装焊盘长度一般是1.5mm,宽度0.3mm,间距0.5mm。如果你打算手工焊接,可以适当把焊盘加长到1.8mm,这样烙铁头更容易接触到。如果是机器贴片,就按标准尺寸来。我一般会在封装里把丝印的引脚1标记做得明显一点,方便焊接的时候确认方向。

2.2 电源部分:AMS1117-3.3的外围该怎么配

STM32F103C8T6的工作电压是2.0V到3.6V,典型值3.3V。输入电源我设计了两路:一路是Micro USB座,另一路是2.54mm排针,方便从外部电源模块供电。两路输入都经过一个SS34肖特基二极管做防反接,然后进入AMS1117-3.3稳压。

AMS1117-3.3这颗LDO很常见,但它的外围电容配置有讲究。输入侧我放了两个电容:一个10微法的钽电容和一个100纳法的陶瓷电容,并联在输入端。输出侧同样放两个:一个22微法的钽电容和一个100纳法的陶瓷电容。为什么要用钽电容而不是电解电容?因为钽电容的等效串联电阻(ESR)更低,在高频下的滤波效果更好,而且体积小。100纳法的陶瓷电容负责滤除高频噪声,钽电容负责储能和低频滤波,两者配合才能把纹波压下来。

这里有个经验值可以参考:AMS1117-3.3在输出电流500mA的时候,输入输出压差至少要1.1V才能保证稳定工作。也就是说,如果输入是5V,输出3.3V,压差1.7V,没问题;但如果输入是4.2V的锂电池,压差只有0.9V,这时候输出可能就不稳了。所以如果你打算用锂电池供电,要么换低压差的LDO,要么在电池和LDO之间加一个升压电路。我自己的板子因为主要用USB供电,所以没这个问题,但如果你有电池供电的需求,这一点一定要提前考虑。

另外,AMS1117-3.3的散热也要注意。它的封装是SOT-223,中间那个大焊盘是散热用的,必须接到GND铜皮上,而且铜皮面积要尽量大。如果输出电流长期在300mA以上,建议在焊盘周围多铺一些铜,或者加过孔把热量导到背面。我实测过,在5V输入、3.3V输出、200mA负载的情况下,芯片表面温度大概在45度左右,手摸上去是温的,不算烫。但如果负载到了500mA,温度会明显上升,这时候散热铜皮就很重要了。

2.3 晶振电路:8MHz主晶振和32.768kHz RTC晶振的取舍

STM32F103C8T6有两个晶振接口:一个是主晶振,接PD0和PD1,通常用8MHz;另一个是RTC晶振,接PC14和PC15,通常用32.768kHz。主晶振是必须的,因为芯片上电后默认使用内部8MHz RC振荡器,精度只有1%左右,做串口通信的时候波特率误差会比较大。外接8MHz晶振配合PLL倍频到72MHz,系统时钟就稳了。

晶振的负载电容怎么算?公式是CL = (C1 × C2) / (C1 + C2) + Cstray,其中Cstray是PCB上的寄生电容,一般取3到5皮法。如果你用的晶振规格书上写着负载电容是20皮法,那么C1和C2各取20皮法左右,实际焊接的时候可以用22皮法的瓷片电容,误差不大。但如果你用的是负载电容12.5皮法的晶振,C1和C2就要取12皮法左右。这个参数一定要看晶振的规格书,不能随便拿两个20皮法的电容就往上焊。

RTC晶振这块,如果你不需要用到实时时钟功能,PC14和PC15可以悬空,或者配置成普通GPIO。但如果要用RTC,32.768kHz晶振和匹配电容就必须加上。RTC晶振的负载电容通常是6皮法或12.5皮法,对应的匹配电容分别是10皮法和18皮法左右。另外,RTC晶振的走线要尽量短,最好在晶振下面铺一层地铜做屏蔽,减少干扰。

我在实际画板的时候,主晶振和RTC晶振都放了,但RTC晶振的匹配电容留了两个位置,一个焊盘焊电容,另一个焊盘空着,方便根据实际晶振调整。这个做法在打样阶段特别有用,因为你不知道手头的晶振负载电容到底是多少,多留一个位置就多一个调整的余地。

2.4 复位与BOOT电路:几个电阻电容的取值逻辑

复位电路很简单,一个10k电阻上拉到3.3V,一个100纳法电容到地,再加一个复位按键并联在电容两端。按键按下的时候,NRST被拉到地,芯片复位;松开的时候,电容通过电阻充电,NRST缓慢上升到3.3V,完成上电复位。这个RC时间常数是10k × 100nF = 1毫秒,足够芯片完成复位。

BOOT电路稍微复杂一点。STM32F103C8T6有两个启动选择引脚:BOOT0和BOOT1(PB2)。BOOT0决定启动模式,BOOT1配合BOOT0选择具体的启动区域。通常的配置是:BOOT0通过一个10k电阻下拉到地,同时通过一个跳线帽可以选择接到3.3V;BOOT1通过一个10k电阻下拉到地,也可以选择接到3.3V。这样默认情况下从主闪存启动,需要串口下载的时候把BOOT0跳到3.3V,BOOT1保持接地,复位后进入系统存储器启动模式。

这里有个细节:BOOT0和BOOT1的电阻不能省。我见过有人直接把BOOT0接到跳线帽中间脚,两边分别接3.3V和地,省掉了下拉电阻。这样在跳线帽没插的时候,BOOT0是悬空的,芯片可能随机进入某种启动模式,非常不稳定。正确的做法是保留下拉电阻,跳线帽只负责选择是否上拉到3.3V。

另外,复位按键我一般用3mm×6mm×2.5mm的贴片轻触开关,手感比那种4.5mm×4.5mm的插件按键好,而且高度低,不会挡住面包板上的其他元件。按键旁边可以放一个100纳法的电容做硬件消抖,但STM32的复位引脚内部已经有滤波电路,所以这个电容不是必须的。我一般会放一个位置,但实际焊接的时候看情况决定要不要装。

2.5 SWD下载接口和用户LED的连线方式

SWD接口只需要两根线:SWDIO(PA13)和SWCLK(PA14),再加上3.3V和GND,一共四根线。我一般用2.54mm的4Pin排针,按GND、SWCLK、SWDIO、3.3V的顺序排列,这样和常见的ST-Link下载器线序一致,不容易插反。排针旁边可以放一个丝印标注,写明每个引脚的功能。

用户LED我接在PC13上,因为PC13在LQFP48封装里位置比较靠边,走线方便。LED的限流电阻用1k,接在3.3V和LED阳极之间,LED阴极接PC13。这样PC13输出低电平的时候LED亮,输出高电平的时候LED灭。为什么用1k而不是330欧?因为STM32的GPIO在输出低电平的时候可以吸收20mA电流,但为了降低功耗和发热,1k的电阻把电流限制在3.3mA左右,亮度足够,而且对芯片更友好。

电源指示灯我接在3.3V和GND之间,用一个1k电阻和一个红色LED串联。这个灯一直亮着,用来确认板子是否上电。虽然会消耗一点电流,但3.3mA的功耗可以忽略不计。如果你对功耗特别敏感,可以把电源指示灯去掉,或者用一个跳线帽控制。

3. PCB布局:把原理图变成能用的板子

3.1 板框尺寸和元件摆放的优先级

板框我定的是50mm×30mm,这个尺寸刚好能放下所有元件,而且插面包板的时候不会超出太多。板框画好之后,先放四个角的安装孔,孔径3mm,周围留出5mm的禁布区,防止螺丝头压到走线。

元件摆放的优先级是这样的:先放芯片,因为它是核心,位置定了其他元件才能围着它排;再放晶振,因为晶振要尽量靠近芯片的PD0和PD1引脚,走线越短越好;然后放电源部分,AMS1117和它的电容要放在板子边缘,方便散热和接线;最后放排针、按键、LED这些外围元件。

芯片我放在板子正中间偏左的位置,这样左右两侧的排针到芯片的走线长度比较均衡。晶振放在芯片下方,紧挨着PD0和PD1引脚。电源部分放在板子右上角,USB座放在上方边缘,排针放在左右两侧。复位按键放在板子左下角,方便手指按到。用户LED放在芯片上方,电源指示灯放在电源部分旁边。

这里有个经验:排针的排列顺序要按端口来,PA0到PA15放左侧,PB0到PB15放右侧,PC13到PC15放右下角。每个排针旁边用丝印标注端口号,字体大小用0.8mm,清晰可辨。排针的间距是2.54mm,焊盘孔径1.0mm,这样既能插面包板,也能焊排针座。

3.2 电源走线的宽度和铺铜策略

电源走线的宽度直接决定了板子的载流能力。1盎司铜厚的情况下,1mm宽的走线大概能过1A电流,温升10度左右。我这块板子的最大电流不超过500mA,所以电源走线用0.5mm宽就够了。但为了保险起见,我把3.3V和5V的主干走线加宽到0.8mm,GND走线用铺铜代替,不单独走线。

铺铜的策略是:顶层和底层都铺GND铜,铜皮和走线之间的间距设为0.3mm,铜皮和板框之间的间距设为0.5mm。铺铜的时候选择"实心填充"而不是"网格填充",因为实心铜的阻抗更低,屏蔽效果更好。铺完之后要做一次DRC检查,确认没有孤岛铜和尖锐夹角。

AMS1117的散热焊盘要特别注意。SOT-223封装的中间大焊盘是散热用的,必须和GND铜皮充分连接。我的做法是在焊盘下面放四个过孔,孔径0.3mm,把热量从顶层导到底层铜皮。过孔要盖油,防止焊接的时候锡流到底层。另外,AMS1117周围的铜皮面积要尽量大,至少覆盖芯片周围5mm×5mm的范围。

3.3 晶振走线的包地处理和长度控制

晶振走线是这块板子上最敏感的部分。8MHz晶振的走线要尽量短,最好控制在10mm以内,而且要走成差分线的形式,两条线尽量平行等长。晶振下面不要走其他信号线,尤其是高频信号。晶振的匹配电容要放在晶振和芯片之间,不能放在晶振的外侧。

包地处理是这样的:在晶振走线的两侧各放一排过孔,过孔间距1mm,把晶振区域围起来,然后在这些过孔上铺GND铜。这样做的目的是形成一个屏蔽腔,减少外界干扰对晶振的影响。晶振的金属外壳如果有的话,也要接地,但一般的贴片晶振没有外壳接地脚,所以只能靠包地来处理。

RTC晶振的走线要求更高,因为32.768kHz的信号更微弱。我的做法是把RTC晶振放在芯片的PC14和PC15引脚旁边,走线长度控制在5mm以内,匹配电容紧贴晶振放置。RTC晶振下面铺一层GND铜做屏蔽,铜皮不要开窗,保持完整。

3.4 星型接地在混合信号板上的具体做法

星型接地的核心思想是:所有地线最终汇聚到一个点,避免不同电路模块之间的地电流互相干扰。在这块板子上,我把地分成了三个区域:模拟地(VDDA和VSSA相关)、数字地(VDD和VSS相关)、电源地(AMS1117的GND)。三个区域在芯片下方的一个点上汇聚,这个点就是星型接地的中心。

具体做法是:在芯片下方放一个0欧姆电阻或者一个窄铜皮桥,把模拟地和数字地连接起来。AMS1117的GND单独走一条线到星型中心,不和数字地混在一起。晶振的GND也单独走线到星型中心。这样做的目的是让模拟部分的噪声不通过数字地传导到电源部分,反之亦然。

实际画板的时候,星型接地不需要画得特别复杂。我的做法是在芯片下方留一个2mm×2mm的铜皮区域,所有地线都往这个区域汇聚,然后从这个区域引出一条宽走线到电源地。铺铜的时候,模拟地和数字地分别铺,中间用0.5mm的间隙隔开,只在星型中心处连接。这样既保证了地的完整性,又避免了地环路。

4. 布线细节:从SWD到GPIO的走线规则

4.1 SWD信号线的长度匹配和阻抗控制

SWD接口的SWCLK和SWDIO是两根高速信号线,虽然STM32的SWD速率一般不超过10MHz,但走线还是要讲究一点。我的做法是:两根线尽量平行走,长度差控制在5mm以内,线宽0.25mm,间距0.25mm。走线不要跨过晶振区域,也不要和电源走线平行太长距离。

SWD排针放在板子左侧,芯片的PA13和PA14引脚在芯片右侧,所以走线要从芯片下方绕过去。绕的时候尽量走直线,不要拐太多弯。如果必须拐弯,用45度角或者圆弧,不要用90度角。走线经过的区域如果有过孔,要保证过孔和走线之间的间距足够,一般0.3mm以上。

SWD接口旁边可以放一个100纳法的电容到地,用来滤除高频噪声。这个电容不是必须的,但在调试的时候如果发现下载不稳定,加上这个电容往往能解决问题。我一般会预留一个位置,实际焊接的时候看情况决定。

4.2 GPIO排针的走线顺序和过孔使用

GPIO排针的走线原则是:按端口顺序排列,走线尽量短,不要交叉。PA0到PA15放在左侧排针,PB0到PB15放在右侧排针,PC13到PC15放在右下角。每个端口的走线从芯片引脚直接拉到对应的排针焊盘,中间不要绕路。

如果走线必须换层,尽量在排针附近换层,不要在芯片附近换层。过孔用0.3mm孔径,0.6mm焊盘,这样对走线的阻抗影响最小。每个过孔旁边可以放一个GND过孔,形成回流路径,减少信号完整性问题。

排针的焊盘我一般用椭圆形,长1.8mm,宽1.0mm,这样焊接的时候锡更容易附着。排针的丝印标注要清晰,每个引脚旁边写上端口号,字体用0.8mm,颜色用白色,和绿色阻焊形成对比。

4.3 电源指示灯的限流电阻和走线宽度

电源指示灯的走线很简单,从3.3V排针引一条线到LED阳极,LED阴极通过1k电阻到GND。走线宽度0.3mm就够了,因为电流只有3.3mA。LED的焊盘用标准0805封装,电阻也用0805,这样焊接方便,而且占板面积小。

用户LED的走线从PC13引脚到LED阴极,中间串一个1k电阻。走线宽度0.25mm,长度尽量短。LED放在芯片上方,靠近板子边缘,这样从外面看比较明显。LED的颜色我一般用蓝色,因为蓝色LED的亮度高,低电流下也能看清楚。

这里有个小技巧:LED的限流电阻可以并联一个跳线焊盘,如果需要更亮的LED,可以把跳线短接,把电阻旁路掉。但这样电流会增大到20mA左右,对芯片的GPIO来说接近极限,所以不建议长期这样用。我一般只预留位置,不实际短接。

4.4 铺铜后的DRC检查和孤岛铜处理

铺铜完成之后,一定要做DRC检查。嘉立创EDA的DRC会检查线宽、间距、过孔、焊盘等参数,确保符合制造工艺要求。我一般把DRC规则设置为:最小线宽0.2mm,最小间距0.2mm,最小过孔0.3mm,最小焊盘0.5mm。这些参数嘉立创的工艺都能做到,而且不会增加成本。

DRC检查之后,如果有孤岛铜,也就是没有连接到任何网络的铜皮,要手动删除或者用"删除孤岛"功能处理。孤岛铜在焊接的时候可能会脱落,造成短路或者开路。另外,尖锐夹角的铜皮也要处理,因为尖锐夹角在蚀刻的时候容易过度腐蚀,导致铜皮断裂。嘉立创EDA有"平滑铜皮"的功能,可以把尖锐夹角变成圆弧。

最后要检查的是丝印。丝印不能压在焊盘上,否则焊接的时候会影响锡膏的附着。丝印的字体大小要统一,一般用0.8mm到1mm,颜色用白色。板子上的重要信息,比如板名、版本号、日期,可以放在板子边缘的空白区域。

5. 打样前的最后检查与焊接调试

5.1 生成Gerber文件和打样参数设置

Gerber文件是发给板厂的标准格式,嘉立创EDA可以直接导出。导出的时候要确认几个参数:层数选双面板,板厚1.6mm,铜厚1盎司,阻焊颜色选绿色,丝印颜色选白色,表面处理选沉金。沉金比喷锡贵一点,但焊接性能更好,尤其是细间距的LQFP封装,沉金的平整度更高,不容易虚焊。

导出Gerber之后,用嘉立创EDA自带的Gerber查看器检查一遍,确认每一层都正确。重点看顶层和底层的走线、阻焊开窗、丝印标注。阻焊开窗要确保焊盘完全露出,不能有阻焊覆盖。丝印要确保没有压在焊盘上,字体清晰可辨。

打样数量我一般选5片,因为5片的单价最低,而且足够做验证。如果板子比较复杂,可以选10片,留一些备用。打样周期一般3到5天,加急的话可以做到24小时,但费用会高一些。

5.2 手工焊接LQFP48封装的实操要点

LQFP48封装的焊接是这块板子最大的挑战。引脚间距0.5mm,引脚宽度0.3mm,手工焊接需要一定的技巧。我的做法是:先用烙铁在焊盘上涂一层薄锡,然后把芯片放上去,对准引脚1的位置,用镊子固定。接着用烙铁头蘸少量锡,沿着引脚一排一排地拖焊。拖焊的时候烙铁头要贴着引脚根部,速度要快,不要停留太久,否则容易把焊盘烫掉。

拖焊完之后,用放大镜检查有没有连锡。如果有连锡,用吸锡线把多余的锡吸掉,或者用助焊剂加烙铁重新拖一遍。助焊剂很重要,它能让锡的流动性更好,减少连锡的概率。我一般用松香助焊剂,焊接前在引脚上涂一层,焊接后用酒精清洗干净。

焊接完成之后,先用万用表测一下电源和地之间有没有短路。如果有短路,不要上电,先检查是不是有锡渣或者连锡。确认没有短路之后,再上电测电压。3.3V输出应该在3.3V左右,误差不超过0.1V。如果电压不对,检查AMS1117的输入输出电容和反馈电阻。

5.3 上电后的最小系统验证流程

上电之后,先看电源指示灯是否亮。如果不亮,检查LED的方向和限流电阻。然后测3.3V排针的电压,确认在3.3V左右。接着用ST-Link连接SWD接口,打开STM32CubeProgrammer,看能不能识别到芯片。如果能识别到,说明最小系统基本正常。

识别到芯片之后,写一个最简单的GPIO翻转程序,让PC13上的用户LED闪烁。如果LED能闪,说明芯片、晶振、复位、下载接口都正常。如果LED不闪,检查晶振是否起振,可以用示波器测PD0引脚,看有没有8MHz的正弦波。如果没有起振,检查晶振的匹配电容和焊接情况。

最后测一下所有GPIO排针的连通性,用万用表蜂鸣档,一端接芯片引脚,另一端接对应的排针焊盘,确认没有开路。如果有开路,检查走线和过孔。这一步虽然简单,但能发现很多焊接和设计上的问题。

5.4 常见问题排查:晶振不起振和SWD识别不到

晶振不起振是最常见的问题之一。原因通常有三个:匹配电容取值不对、晶振焊接不良、芯片的PD0和PD1引脚虚焊。排查的时候先用示波器测PD0,如果没有波形,把匹配电容换小一点试试,比如从22皮法换成12皮法。如果换了电容还是不起振,检查晶振的焊接,用烙铁重新烫一下晶振的四个焊盘。如果还是不行,可能是芯片坏了,换一块芯片试试。

SWD识别不到芯片,原因可能是SWDIO和SWCLK接反了、复位引脚被拉低、BOOT0被拉高、或者芯片没有供电。排查的时候先测3.3V排针的电压,确认芯片有电。然后测NRST引脚的电压,正常应该是3.3V。如果NRST是0V,检查复位按键是不是卡住了,或者复位电容是不是短路了。接着测BOOT0的电压,正常应该是0V。如果BOOT0是3.3V,检查跳线帽是不是插错了。

还有一个容易被忽略的问题:ST-Link的固件版本太老,不支持STM32F103C8T6。这种情况升级ST-Link的固件就能解决。另外,SWD接口的线太长也会导致识别不到,尽量用短一点的杜邦线,20cm以内比较稳。

6. 几个让板子更好用的设计细节

6.1 排针的丝印标注和防呆设计

排针的丝印标注看起来是小事,但用起来的时候差别很大。我的做法是每个排针旁边都标注端口号,比如PA0、PA1、PA2,字体用0.8mm,颜色用白色。电源排针标注3.3V、5V、GND,用不同的颜色区分,比如3.3V用黄色,5V用红色,GND用黑色。这样插线的时候不容易插错。

防呆设计方面,SWD接口的排针可以用4Pin的插座,而不是排针,这样插反了插不进去。USB座用Micro USB,虽然现在Type-C更流行,但Micro USB的焊接难度低,而且线材便宜。如果你打算用Type-C,要注意Type-C的焊盘间距更小,手工焊接难度更大。

6.2 预留的调试测试点和扩展接口

调试测试点很重要,尤其是当你需要测某个信号的时候。我在板子上预留了几个测试点:3.3V、5V、GND、NRST、BOOT0、SWCLK、SWDIO。测试点用1mm的焊盘,不焊元件,需要测的时候用万用表表笔或者示波器探头直接接触。

扩展接口方面,我预留了一个I2C接口和一个UART接口。I2C接口接PB6和PB7,UART接口接PA9和PA10。这两个接口用4Pin排针引出,方便连接OLED、传感器、串口模块等外设。虽然这块板子的定位是核心板,但多留两个接口不会增加多少成本,用起来的时候会方便很多。

6.3 板载LED和按键的复用思路

用户LED接在PC13上,这个引脚同时也是RTC的入侵检测引脚,但在普通应用里可以当普通GPIO用。如果你需要两个LED,可以把另一个LED接在PA0上,但PA0同时也是唤醒引脚,上电的时候会有短暂的高电平,LED会闪一下。这个现象不影响使用,但要知道原因。

复位按键除了复位功能,还可以当普通按键用,只要在程序里不配置NRST引脚就行。但NRST引脚内部有上拉电阻,按下的时候会拉低,松开的时候会弹回高电平,所以只能做瞬时按键,不能做自锁开关。如果你需要自锁开关,可以外接一个拨动开关,接在GPIO和GND之间。

6.4 从核心板到实际项目的过渡建议

这块核心板画完之后,你可以把它当成一个验证平台,用来测试各种外设和程序。当你需要做实际项目的时候,可以把核心板的原理图复制过去,去掉不需要的部分,加上项目特有的电路。比如你要做一个密码锁,可以在核心板的基础上加一个矩阵键盘接口、一个电磁锁驱动电路、一个蜂鸣器电路。核心板的电源部分、晶振部分、复位部分、下载部分都可以直接复用。

我自己的习惯是,每做一个新项目,都从核心板的原理图开始改,这样能保证最小系统的可靠性。核心板上的元件都是经过验证的,不会出现莫名其妙的问题。改完之后,把核心板的PCB也复制过去,调整一下布局,加上项目特有的电路,就能快速完成一块新板子的设计。

另外,如果你打算把这块板子做成产品,要注意STM32F103C8T6的国产替代问题。现在市面上有一些 pin-to-pin 兼容的国产芯片,价格更低,但外设和寄存器可能有差异。如果你只是做学习板或者验证板,用原厂的芯片没问题;如果是批量产品,可以考虑国产替代,但一定要先做充分的测试,确认软件兼容性。

我在实际画板的过程中,最大的体会是:原理图上的每一个元件、每一条走线,都要有明确的理由。不要因为"别人都这么画"就照抄,也不要因为"看起来差不多"就随便选参数。晶振的负载电容、电源的滤波电容、复位电路的RC时间常数,这些参数背后都有具体的计算逻辑。搞懂这些逻辑,你画的板子才能稳定可靠,而不是靠运气。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询