
嘉立创EDA这几年在国内创客圈和高校实验室里确实火原因也很直白上手快、元件库全、打样无缝衔接画完原理图直接下单PCB甚至还能顺便把元器件一起买齐。对于零基础想从Arduino过渡到STM32的朋友来说与其买一块现成的开发板不如自己亲手画一块最小系统扩展板成本低、电路结构看得明明白白后面做项目改板子也有底气。我写的这块板子定位很清楚STM32F103C8T6最小系统加扩展接口把CPU跑起来必要的电路画全再引出一排排IO口顺便放一个LED和按键用于点灯测试。整块板子按两层板设计成本控制在几十块钱以内焊接难度也低。本文就把从原理图到PCB再到打样的完整过程拆开讲新手可以直接照着画。1. 项目全景这块扩展板到底要做什么1.1 从“最小系统”说起核心需求拆解很多人第一次接触STM32时会直接买一块十几块钱的“蓝丸”或者“核心板”插上USB就能用。这种做法确实省事但它把最小系统电路完全封装在了板子内部MCU怎么供电、晶振怎么连接、复位电路长什么样统统看不到。等到自己想做一块定制板的时候就容易抓瞎。最小系统的定义其实很朴素能让MCU正常工作起来的最少外部电路。对STM32F103C8T6来说这个“最小”包含四块内容电源3.3V供电并且要在VDD引脚附近放置去耦电容。时钟外部8MHz晶振加两个负载电容或者直接用内部RC振荡器。复位NRST引脚接一个10kΩ上拉电阻到3.3V再接一个100nF电容到地。下载调试SWD接口只用SWDIO、SWCLK、GND三个引脚就能烧录程序。STM32F103C8T6是一款Cortex-M3内核的芯片Flash 64KBSRAM 20KB主频最高72MHz封装是LQFP48引脚不多非常适合手工焊接。把最小系统画对、跑通之后MCU部分就再也不会是玄学了。1.2 扩展板的功能定位与设计目标“最小系统扩展板”这个名字里“扩展”两个字才是点睛之笔。最小系统只能让芯片跑起来但要做项目还得接传感器、舵机、显示屏所以IO口必须引出来而且要有规矩地引出来。在设计这块板子时我给自己定了几个目标板子尺寸控制在5cm x 5cm以内这样打样价格最便宜。引出全部IO口做两排2.54mm间距的排针方便插面包板和杜邦线。板载一个电源指示灯和一个用户LED一个复位按键和一个用户按键。预留一个串口下载接口和一个SWD调试接口怎么烧录都方便。供电方式要灵活既可以用USB转TTL模块供电也可以用AMS1117直接从5V降压。这些目标一旦定下来后面的原理图设计就有章法了不会东一榔头西一棒子。1.3 核心器件选型思路为什么是这些型号器件选型是很多新手容易忽略的一步但其实它决定了板子的成本、焊接难度和稳定性。我的选型原则很简单能用常见的、贴片的、手册资料多的器件就绝不选冷门型号。主控芯片STM32F103C8T6LQFP48封装淘宝几块钱一片资料遍地都是选它没有风险。稳压芯片AMS1117-3.3SOT-223封装输入5V输出3.3V最大输出电流1A给MCU供电绰绰有余。SOT-223封装焊起来也不难适合新手。晶振8MHz无源晶振负载电容选两个20pF。这里多说一句负载电容不是随便选的值它要和晶振的负载电容参数匹配20pF对常见的8MHz晶振来说是一个稳妥的中间值。复位电路10kΩ电阻加100nF电容这是STM32参考手册里推荐的标准电路。去耦电容100nF的0603贴片电容每个VDD引脚旁边放一个VDDA引脚还要额外加一个1μF和一个10nF的组合。元件参数不需要记太多看懂数据手册里推荐的典型电路照着抄就行。设计师有时候做的不就是这件事。2. 环境准备与工程搭建2.1 嘉立创EDA的版本选择与安装嘉立创EDA现在有标准版和专业版两个大版本标准版是网页端客户端共存专业版基于更现代的架构功能和效率都有提升。我这边推荐直接上新版的专业版客户端理由有三个一是界面布局更接近主流的商业化EDA工具以后想转Altium Designer或者Kicad学习成本低二是布线功能、铺铜优化、DRC检查都比标准版强不少三是专业版对六层板以内的高速信号场景也能应付将来画更复杂的板子不用换工具。安装过程没什么好说的去官网下载对应系统的安装包一路下一步就行。安装完之后会要求注册账号注册一个因为后面保存工程、同步元件库、在线预览Gerber都要用到账号体系。外网访问和国内服务器的问题都不用担心这个工具的数据中心就在国内速度很快。2.2 创建工程与基础设置打开专业版点击“新建工程”会跳出一个对话框让你填工程名。工程名建议用拼音或者英文不要用中文虽然软件支持中文工程名但后面导出文件、下单打样时中文可能在第三方系统里出现编码问题。我的习惯是命名成“stm32f103_min_system_v1.0”这样的格式一眼看出是什么板子、什么版本。工程创建好之后会自动生成一张空白原理图和一个空白PCB文件。在开始画图之前先做几项关键设置单位切换成毫米mm国产板厂的工艺参数都是以毫米为单位的。网格大小设成0.5mm或1.27mm原理图连线时对齐更舒服。原理图图纸大小选A4适合这个规模的板子打印出来看也方便。这些设置都在菜单栏的“设置”里花两分钟调好后面的效率能提升不少。2.3 原理图符号与封装两套体系必须同时理解新手最容易被绕晕的一个概念就是原理图符号和PCB封装是两回事。原理图里那个方方正正的芯片图形只是为了让人看懂电路逻辑不代表芯片在板子上的样子而PCB封装定义了焊盘的位置、大小、间距是真正决定能不能焊上去的东西。嘉立创EDA的元件库把这两者结合得很好。在放置元件的时候可以从立创商城直接搜索选中元件后它会自动带上对应的原理图符号和PCB封装。这是我强烈推荐新手用嘉立创EDA的一个重要原因省去了自己画封装的步骤也避免了“原理图画好了但封装对不上”的常见翻车事故。选择元件时优先选带有“LCSC”编号的也就是立创商城有库存的元件。这样下单打样的时候可以一键同步BOM表从同一个平台把电阻电容芯片全部买齐省心。3. 原理图绘制一步步搭出最小系统3.1 电源电路设计稳压与去耦一次讲透先画电源电路。板子的输入是一个USB接口的5V电源也可以是排针上的5V引脚供电。5V进来之后经过AMS1117-3.3稳压到3.3V给MCU和所有外围电路使用。AMS1117的标准电路非常简单输入端接一个10μF钽电容滤波输出端接一个10μF钽电容和100nF瓷片电容并联然后才能接到MCU的VDD引脚。为什么需要两种不同容值的电容因为大容值电容负责稳住直流电压小容值电容负责滤除高频噪声两者是分工合作的关系不是重复。嘉立创EDA里放置AMS1117搜索元件编号就能找到很快。放置之后在它的输入和输出端分别加上电容再用网络标签Net Label把3V3和GND的网络标出来电源电路就算完成一半。记住网络标签的名字一定要一致比如所有3.3V节点都叫“3V3”别一会儿叫“3.3V”一会儿叫“VCC”否则DRC检查时不会报错但你自己看原理图会看晕。MCU的电源引脚还需要单独处理。STM32F103C8T6有VBAT、VDDA、VDD三个供电引脚它们都必须接3.3V。每个VDD引脚旁边放一个100nF去耦电容直接连到最近的GND过孔这是布板成败的关键之一。VDDA引脚接3.3V时额外加一个1μF和10nF的组合目的是给内部的模拟电路提供干净的电源。3.2 时钟电路8MHz晶振的负载电容怎么算时钟电路关系到MCU能不能正常工作。STM32F103C8T6使用外部8MHz晶振经过内部PLL倍频后得到72MHz主频。晶振电路只需两个元件一个8MHz无源晶振和两个负载电容。负载电容的取值有一个经验公式CL (C1 * C2) / (C1 C2) 杂散电容。当C1和C2都取20pF时串联结果是10pF再加上PCB走线和引脚引入的2到5pF杂散电容总共约12到15pF与晶振标称的负载电容大致匹配。这个匹配关系决定了晶振起振是否稳定、频率是否准确取值差太远会导致晶振不振荡或者频率偏移。画原理图时晶振放在MCU的OSC_IN和OSC_OUT两个引脚之间两个负载电容分别从晶振的两端连接到地。注意连线的网络名称OSC_IN和OSC_OUT不要和别的网络混在一起它们就是一对差分信号走线要短要直后面布PCB的时候还要单独照顾这对线。有些设计会额外画一个32.768kHz的RTC晶振用于低功耗模式的实时时钟。我这次没有画因为C8T6芯片没有原生的RTC晶振引脚外部32.768kHz需要额外用定时器或者外部RTC芯片才能实现划不来。如果要做低功耗时钟应用直接用内部LSI约40kHz凑合或者后面再设计独立RTC模块。3.3 复位电路与BOOT配置千万别漏掉复位电路是新手容易忽略但绝对不能忽略的部分。STM32的NRST引脚内部有上拉但引脚外部还是需要接一个10kΩ电阻拉到3.3V再接一个100nF电容到地。电阻提供上拉保证正常情况下NRST是高电平电容的作用是上电瞬间让NRST保持一段时间的低电平等待电源稳定后再释放起到上电复位的作用。然后接一个按键一头接NRST另一头接地按下时强制拉低复位。按键两端可以并联一个100nF电容做硬件消抖但我这里没加因为复位按键的需求就是干脆利落地复位消抖反而会让复位响应变慢没必要。BOOT引脚配置同样重要而且是新手烧录失败高发区。STM32F103的BOOT0和BOOT1引脚决定了芯片从哪个地址启动BOOT00BOOT1任意从Flash启动这是正常模式BOOT01BOOT10从系统存储器启动进入Bootloader用于串口烧录BOOT01BOOT11从SRAM启动调试用。实际使用中我们绝大多数情况都是从Flash启动所以BOOT0要接一个10kΩ下拉电阻到地BOOT1也同样下拉到地。同时预留跳帽接口用排针引出万一需要串口烧录模式直接用跳帽把BOOT0接到3.3V就行不用飞线。3.4 SWD下载调试接口两线就能烧录STM32支持两种下载方式JTAG和SWD。JTAG占用引脚多TCK、TMS、TDI、TDO、nRST等而SWD只用两根线SWDIO和SWCLK同时支持调试和下载效率差不多所以我板上只画了SWD接口非常省IO。SWD接口的引脚定义1脚3.3V、2脚SWDIO、3脚SWCLK、4脚GND。SWDIO和SWCLK引脚都要接10kΩ上拉电阻到3.3V这是手册推荐的目的是防止调试器连接时信号悬空导致不稳定。有一个细节值得注意SWD的两个引脚在STM32F103上默认复用为PA13和PA14一旦程序里把它们配置成普通GPIO就会导致下载器连不上芯片俗称烧死后锁死。解决办法是用ST-Link的“Connect under reset”模式或者先把BOOT0拉高让芯片不执行用户程序再去擦除Flash。这些小坑后面问题排查部分会详细讲。顺带在SWD接口旁边放一个串口接口USART1PA9和PA10用排针引出方便有些场景下用CH340模块直接下载程序或打印调试信息。串口电路本身只需要两根线TX、RX再共地不需要额外的电平转换芯片。3.5 扩展IO与板载外设点灯测试一键搞定最小系统的IO引出是这块扩展板的核心价值所在。STM32F103C8T6有PA、PB两组IO口每组16个再加上部分PC口和PD口一共大概37个可用IO。画出原理图后把每个IO口通过排针引出到板子边缘按顺序排列连成两排。排针用2.54mm间距这是面包板和杜邦线的标准间距方便直接插接。板载一个电源指示灯接3.3V串联1kΩ电阻和一个用户LED接PB1串联1kΩ电阻到3.3V。用户LED的作用是验证程序下载成功写一个最简单的点灯程序跑起来如果LED闪烁说明芯片、晶振、电源、下载链路全部正常最小系统就算正式跑通了。板载一个用户按键接地方式按下时把引脚拉低。用PA0引脚读取按键状态程序里配置成上拉输入就能检测按键事件。板载按键的意义是方便做中断实验不用每次测试都用杜邦线外接按键。4. PCB布局与布线实操4.1 板框规划与布局思路先定骨架再填细节原理图画完后点击“导入PCB”嘉立创EDA会自动把元器件散落到新建的PCB画布上同时还会有飞线连接各个引脚。这时不要急着布线先做布局。布局的质量决定了布线的难度和板子的电气性能。我首先把板框画成50mm x 50mm的正方形。在“工具”里选择“板框绘制”输入坐标就能画出来。板框用机械层Edge Layer绘制制板厂以这层为准切割外形。布局时遵守一个顺序原则先定主控芯片再定连接器最后放被动元件。芯片放在板子正中间偏上一点四边留出走线通道两排扩展排针分别放在左右两侧正对芯片的IO引脚让飞线不会交叉太严重电源电路放在板子一角远离晶振防止电源噪声干扰时钟信号。SWD接口放在板子下边缘靠近芯片的PA13和PA14解码引脚附近USB输入接口放在左边缘串口排针放在右边缘。位置不是绝对的核心思路是让高速和易受干扰的信号走线尽量短电源和地的连接尽量扎实。4.2 晶振与去耦电容的关键布局细节决定成败晶振是板上最娇贵的器件布局布线稍有不慎轻则频率偏移重则起振失败。晶振必须紧贴着STM32芯片的OSC_IN和OSC_OUT引脚放置两者之间的走线长度控制在10mm以内走线宽度可以适当加粗到0.3mm并且尽量保持等长、对称。晶振下方不要走任何信号线更不要铺铜。晶振工作在8MHz频率虽然不算高但它是通过晶体振动产生信号的下方如果铺铜或走线会引入寄生电容改变振荡频率还容易耦合其他信号噪声。我的习惯是晶振区域直接做禁布区DRC规则里设置一个Keepout区域。去耦电容的布局网上说法很多我的实操经验很明确挨着引脚放。100nF电容放在MCU对应VDD引脚的旁边连线尽可能短地接到引脚然后通过过孔直接下到GND平面。如果电容离引脚太远电源线上的电感会削弱它的滤波效果等于白放。有人喜欢给每个VDD配一个电容有人喜欢几个引脚共用一个我的建议是尽量每个VDD一个100nF0402封装放在背面正对着引脚效果最好。4.3 走线宽度与电源/地处理两层板的关键约束STM32F103C8T6的IO口电流很小一般不超过20mA信号线宽度用0.25mm到0.3mm就足够了。但这块板子的电源线和地线必须特殊对待不能和信号线一样细。3.3V电源网络我走0.5mm到1mm宽的走线从稳压芯片的输出端到MCU的各个VDD引脚。GND网络尽量不走线而是用铺铜来实现。两层板设计我通常把底层整个作为GND层大面积铺铜这样信号线在顶层走底层是一个完整的参考地平面信号回流路径短抗干扰能力强。有人说两层板不如四层板但在这个规模的板子上两层板完全够用关键在铺地铜的方式。铺铜时对GND网络执行“铺铜”命令覆盖整个板框区域然后再画几条缝合过孔把顶层的地和底层的地连起来。缝合过孔的间距建议在5mm到10mm之间这样能有效降低回路电感。4.4 星型接地到底怎么操作简单理解版网络上关于“星型接地”的说法很多而且互相矛盾。实际上星型接地的核心思想是让各个功能模块的电流在返回电源地时不要共享同一个回路避免互相干扰。它和“大面积铺地”并不矛盾关键看针对的是哪个频段的信号。对于STM32最小系统这种低速数字板最稳妥的接地方式是分开的电源地汇合再以一个点连通。具体操作分两步。第一步把AGND模拟地比如VDDA周围的电容滤波地和DGND数字地在原理图中分开命名第二步在PCB中AGND区域通过一个0Ω电阻或者一个磁珠连接到DGND域形成一个单点连接让模拟电路的返回电流不会穿过数字电路的回路。对于数字电路里的GND我的做法是正常铺铜不需要刻意分割。因为数字电路的抗噪能力较强分割反而会造成回流路径不连续产生额外的辐射和压降。模拟地和数字地的单点连接主要就是为了避免ADC采样时的噪声干扰如果你不用ADC把VDDA直接接3.3V、地直接接GND也不会出问题。5. DRC检查与Gerber导出5.1 DRC检查设置不达标会被板厂退回布线完成后先不要急着看3D效果图先做一遍设计规则检查DRC。嘉立创EDA的DRC可以自动检查走线宽度、过孔大小、安全间距、丝印位置等规则。我的最低检查标准设为线宽不小于0.2mm间距不小于0.2mm这基本是嘉立创打样工艺的常见下限。点开DRC设置把“检查安全间距”中“线与线”、“线与焊盘”、“线与过孔”等选项都打开。然后点“运行DRC”软件会列出所有违规项每一项都对应到具体的网络和坐标。常见的DRC报错包括线宽小于规则要求、焊盘间距过近、丝印覆盖焊盘等逐个双击查看修正即可。DRC检查这块板子通常能一次通过如果一直报错不要用忽略功能强制跳过因为板厂的工艺能力就摆在那里强行改规则可能导致做出来的板子断线或者短路。5.2 Gerber导出与在线预览下单前的最后一道保险PCB设计完成后嘉立创EDA支持一键导出Gerber文件。Gerber是行业标准的PCB制造格式包含每一层的图形数据。在“制造”菜单下选“Gerber”软件会生成一个压缩包里面有顶层铜层、底层铜层、顶层丝印、底层丝印、阻焊层、机械层等文件。强烈建议在导出Gerber后不要直接上传给板厂而是先用嘉立创EDA自带的“Gerber在线预览”或者第三方工具先看看每层内容是否正确。这一步能抓到很多隐藏问题比如丝印被切掉、板框没包含在文件里、铺铜层出现破碎。实际打样中我见过很多人提交Gerber后发现底层铺铜没生成或者丝印文字反了都是因为没有提前预览。下单时选择板子数量、层数、板材厚度和表面工艺。这个板子选1.6mm板厚、绿色阻焊、白色丝印、喷锡工艺就够用5片装价格几乎就是一杯咖啡钱。注意把“BOM表”和“坐标文件”也一起导出打样下单时可以顺手把元件一起买了。5.3 焊接清单手把手焊接STM32的最小系统拿到板子和元件之后焊接是最后一个硬关卡。STM32F103C8T6是LQFP48封装引脚密集但不算是高难度配合助焊剂和拖焊技巧新手练两次就能焊好。焊接流程推荐先焊主控芯片再焊电源电路然后是晶振和复位电路最后焊排针和LED。焊主控时先在PCB焊盘上涂一层薄薄的助焊剂把芯片对准丝印框用焊锡固定对角线上的两个引脚固定然后从一侧引脚开始用烙铁头蘸少量焊锡沿着引脚拖过去利用助焊剂让焊锡均匀流动。焊完后用放大镜检查引脚之间有没有粘连如果有加上助焊剂再拖一遍即可。晶振和电容都是小贴片直接用烙铁焊就行推荐使用刀头烙铁拖焊效率高。排针用排针座固定在面包板上对准PCB焊盘融锡固定就大功告成了。6. 常见问题与排查技巧实录6.1 问题速查表从不通电到下载失败实际调试过程中新手可能遇到一堆看起来莫名其妙的问题我把最常见的问题和排查思路整理成表格方便对照现象可能原因排查方法上电无反应电源指示灯不亮电源接反、AMS1117损坏、3.3V短路用万用表二极管档测3.3V对地阻值正常应大于几百Ω3.3V电压只有1.5V左右负载短路或AMS1117输入不足断开负载单独测稳压输出ST-Link连接失败提示No target connectedSWDIO/SWCLK接反、芯片被锁死、供电不足检查接线顺序尝试Connect under reset模式晶振不起振程序卡死在启动阶段负载电容选错、晶振焊歪、走线太长用示波器测OSC_IN引脚波形无波形则检查晶振程序下载成功但LED不闪IO口配置错误、上拉电阻没焊、LED方向反先点灯程序测试检查原理图IO编号是否对应复位按键按了没反应10kΩ上拉电阻焊错、按键虚焊测NRST引脚电压按下按键时应被拉低6.2 实际踩坑记录delay卡死和禁用JTAG我在调试这块板子时遇到过两个典型问题。第一个是程序里用了HAL_Delay函数结果发现卡在delay无法返回表现出来就是LED闪烁频率完全不对甚至卡住不动。排查后发现是系统时钟初始化没配好外部8MHz晶振没起振代码误以为时钟正常导致延迟时间被算错了几十倍。这个问题的根源是晶振虚焊重焊晶振后问题消失。第二个问题更有代表性。我在测试用的程序里把PA13和PA14配置成了普通GPIO用来驱动两个LED结果下载完第一次程序后ST-Link再也连不上芯片了报错信息显示连接超时。这就是经典的“禁用JTAG导致锁死”。STM32默认在上电时把PA13和PA14作为SWD功能如果程序把它们改成GPIO芯片内部就切断了调试接口。解决办法很简单把BOOT0引脚跳线接高电平3.3V重新上电让芯片进入系统存储器模式这时候调试接口不再执行用户程序ST-Link就能连上擦除Flash即可。这个坑踩过一次之后我所有测试程序里再也不会轻易动PA13和PA14。6.3 避坑清单给零基础朋友的五条忠告最后分享几条实操下来非常管用的经验都是常规教程里不会写的东西。第一焊完板子先不要插电用万用表蜂鸣档测3.3V和GND之间有没有短路再测5V和GND之间有没有短路确认无误再上电。很多板子烧坏就是因为电源短路。第二原理图和PCB之间的网络连接不要完全依赖软件自动提示养成自己在原理图里加网络标签的习惯标签名称要统一规范这样后期排查效率高很多。第三排针的方向要统一所有扩展IO排针旁边最好标注网络名称方便查线。我从第二版开始在排针旁边加了一行很小的丝印“PA0”、“PA1”等实际调试省下的时间远超画丝印的时间。第四如果加了电源指示灯串联电阻的阻值选大一点比如2kΩ否则LED过亮不但刺眼还会干扰周边信号。1kΩ是很多人喜欢用的值在新点亮环境下亮度偏高。第五晶振周围的走线如果布线空间允许最好在晶振两端加接地环让地线包围晶振区域能进一步减少电磁干扰对提高系统稳定性有非常明显的帮助。我个人在实际操作中有一个比较深的体会新手画第一块板子时总想把所有功能都塞进去接口越多越觉得高级。但真正做出来之后才发现板子上的大部分功能根本用不上反而增大了布线和排除故障的难度。把最小系统画到极致稳定扩展接口按需添加才是做硬件项目最务实的方式。这块STM32最小系统扩展板跑通之后下一步可以做的方向有很多比如在板上加一个USB转串口芯片做成全速USB接口或者加几路PWM输出和ADC输入直接驱动舵机和读取电位器甚至可以把MCU换成更大容量的STM32F103C8T6同系列芯片比如STM32F103RBT6引脚兼容但Flash翻倍。只要基础扎实这些扩展都不会太难。动手画一块吧自己做出的板子跑起来那一刻的成就感买一百块开发板都换不来。