
1. 为什么这颗H743值得单独打一块核心板STM32H743VIT6这颗料在圈子里算是“性能过剩”和“刚刚够用”之间的一个甜蜜点。480MHz的Cortex-M7内核带双精度浮点单元2MB Flash、1MB RAMLQFP100封装引脚间距0.5mm手工焊接难度属于“有热风枪就能干”的级别。很多人第一次接触它是在正点原子或者野火的开发板上但开发板用久了就会发现一个问题板载资源太多真正做项目时用不上的外设占了一大片面积而且开发板的走线是通用设计碰到高速信号或者模拟采集场景底噪和串扰往往不尽如人意。所以自己画一块最小系统核心板本质上是在做三件事把MCU从开发板的“温室”里拎出来按自己项目的实际需求重新组织电源和时钟然后用一块邮票孔或者2.54mm排针的板子把它变成可复用的模块。这块板子画好了后面不管做电机控制、音频处理还是高速数据采集直接往上叠底板就行省掉重复布线的麻烦。我这次用的是Altium Designer 09也就是大家常说的AD09。虽然现在AD已经出到24了但AD09在中小企业和个人开发者里保有量依然很大安装包小、对电脑配置要求低、操作逻辑经典。不过AD09有个毛病默认的PCB规则和层叠设置对H743这种高速器件不太友好需要手动调不少东西。下面我把从原理图到PCB的完整流程拆开讲包括PLL锁相环的配置思路、电源树的设计、以及AD09里几个容易踩坑的地方。提示本文所有操作基于AD09但核心思路在AD其他版本、嘉立创EDA、KiCad里同样适用区别只在菜单位置。2. 原理图设计从电源树到PLL外围2.1 核心板的功能边界怎么定画原理图之前先想清楚一件事这块核心板到底要引出哪些资源。我的原则是“最小系统常用外设”具体包括电源部分5V输入经LDO转3.3V给MCU和数字外设再经低噪声LDO转3.3V模拟域给VDDA和VREF。时钟部分8MHz无源晶振做HSE32.768kHz晶振做LSE另外预留一个SMA座或者焊盘接外部时钟。调试部分SWD接口标准10pin 1.27mm排针带NRST和BOOT0。存储部分预留一个W25Q128的SPI Flash焊盘不焊也能用。引出IO所有GPIO通过2.54mm排针引出电源和地单独占几根。复位和启动复位按键、BOOT0跳线。这个边界定下来原理图大概在A3幅面内能画完不会太散。有人喜欢把USB、以太网PHY、SD卡全塞进去那就不是核心板了那是开发板。核心板的逻辑是“我只负责让MCU跑起来外设你底板自己加”。2.2 电源树设计3.3V不是随便接的H743的电源引脚分好几组VDD数字、VDDA模拟、VREF参考电压、VBAT备份域、VDDUSBUSB收发器。很多人图省事所有3.3V全接一起结果跑ADC的时候发现采样值跳得厉害或者USB枚举不稳定。正确的做法是分三路主3.3V用一颗AMS1117-3.3或者MP1584从5V降下来给VDD和VDDUSB供电。VDDUSB单独加一个磁珠或者0欧电阻方便以后调试。模拟3.3V从主3.3V经一颗低噪声LDO比如TPS7A4700再降一次给VDDA和VREF。如果对ADC精度要求不高可以用RC滤波代替但LDO更稳。VBAT接一颗CR1220纽扣电池座或者直接接主3.3V。如果不使用RTC和备份寄存器VBAT可以悬空但建议还是接上养成好习惯。每一路电源入口都要放一个10uF的钽电容或者MLCC做储能每个电源引脚旁边放一个100nF的MLCC做高频去耦。H743的VDD引脚有十几组100nF电容要放够别省。注意VDDA和VREF的供电质量直接决定ADC的有效位数。我实测过用AMS1117直接供VDDA12位ADC的有效位数大概只有9位多换成TPS7A4700之后能到11位左右。2.3 PLL锁相环外围晶振和负载电容怎么算H743的时钟树比较复杂但核心板只需要把HSE和LSE的外围画对就行。HSE用8MHz无源晶振负载电容的计算公式是CL (C1 * C2) / (C1 C2) Cstray其中Cstray是PCB走线和引脚寄生电容一般取3~5pF。晶振手册上给的负载电容CL通常是12pF或者18pF。假设CL12pFCstray4pF那么C1C22*(12-4)16pF。实际选15pF或者18pF都能起振但频率会有微小偏差。LSE用32.768kHz晶振负载电容通常是6pF或者12.5pF同样按公式算。LSE的走线要尽量短包地处理否则容易被干扰导致RTC走时不准。PLL的配置是在软件里做的但硬件上要保证HSE起振稳定。晶振下面不要走任何信号线铺地要完整。如果板子空间允许晶振周围加一圈地过孔做屏蔽。2.4 复位和启动电路别小看这两个电阻NRST引脚内部有上拉但外部还是建议加一个10k上拉和100nF下拉组成RC复位电路。复位按键并联在100nF电容两端按下时拉低NRST。BOOT0引脚通过一个10k电阻下拉到地同时预留一个跳线帽或者焊盘需要从系统存储器启动时短接到3.3V。BOOT1在H743上对应的是PB2或者某个复用引脚具体看参考手册。如果不用外部启动模式BOOT0下拉就够了。2.5 原理图绘制在AD09里的几个设置AD09默认的栅格是10mil画原理图够用但放置引脚密集的MCU符号时容易对不齐。建议把栅格改成5mil或者2mil用快捷键G切换。MCU的符号可以从ST官网下载也可以用AD自带的集成库但ST官网的符号更准确引脚定义和参考手册一致。画完原理图后一定要做ERC检查重点看电源引脚有没有漏接、输入引脚有没有悬空。AD09的ERC规则可以在Project - Project Options里调把“Unconnected Input Pin”设为Error避免漏掉。3. PCB布局把480MHz的信号关在笼子里3.1 层叠设计四层板是底线H743跑480MHz内部PLL和高速外设的边沿速率很快两层板很难保证信号完整性。我的建议是至少四层板Top信号、GND平面、PWR平面、Bottom信号。如果预算允许做六层板更好但四层板对最小系统来说够用了。四层板的层叠顺序和厚度层功能铜厚介质厚度Top信号器件1oz0.2mmInner1GND平面1oz0.5mmInner2PWR平面1oz0.2mmBottom信号1oz-总板厚控制在1.6mm。GND平面要完整不要被信号线割裂。PWR平面可以分割成3.3V、模拟3.3V、5V几个区域但分割线要远离高速信号。AD09里设置层叠在Design - Layer Stack Manager里添加Internal Plane层指定网络为GND和PWR。注意AD09的负片层显示逻辑和正片层不同第一次用容易看花眼。3.2 MCU摆放和去耦电容的“就近原则”H743的LQFP100封装引脚间距0.5mm焊盘宽度建议0.28mm长度1.5mm间距0.5mm。MCU放在板子中央四周留出至少5mm的空间放去耦电容和走线。去耦电容的摆放是布局的重中之重。每个VDD引脚旁边放一个100nF电容的GND端通过过孔直接打到GND平面过孔离焊盘越近越好最好在1mm以内。10uF的储能电容放在MCU电源入口处不用每个引脚都放。我见过有人把去耦电容放在MCU背面通过过孔连接。这种做法在低频板子上没问题但H743这种高速器件过孔电感会削弱高频去耦效果。能放正面就放正面实在放不下再放背面但过孔要打两个以上。3.3 晶振布局给时钟一个安静角落8MHz晶振和负载电容尽量靠近MCU的OSC_IN和OSC_OUT引脚走线长度控制在10mm以内且要等长。晶振下方铺地不要走任何其他信号线。晶振周围加一圈地过孔形成屏蔽墙。LSE晶振同理但32.768kHz的频率低对走线长度没那么敏感不过还是要远离电源和高速信号。AD09里可以用Design - Rules - Clearance设置晶振区域的间距规则比如晶振焊盘和其他信号线的间距设为0.5mm防止误连。3.4 电源布局LDO和滤波电容的配合LDO的输入输出电容要按手册推荐值放一般输入10uF、输出22uF。LDO的接地引脚要直接连到GND平面不要通过细线连。如果LDO发热量大焊盘要加散热过孔。模拟3.3V的LDO要远离数字电源最好放在板子另一侧。如果空间不够至少加一个电感或者磁珠做隔离。4. 布线实战AD09里的规则设置和走线技巧4.1 线宽和电流的关系H743的电源引脚电流不大但5V输入和3.3V输出的主干线要按电流算线宽。经验公式是1oz铜厚1mm线宽大约能过1A电流温升10度。如果5V输入最大500mA0.5mm线宽就够了。但为了保险主干线用0.8mm或者1mm。信号线用0.2mm或者0.25mm差分线如果有USB用0.2mm线宽、0.2mm间距阻抗控制在90欧姆。AD09里可以用Design - Rules - Width设置不同网络的线宽用Differential Pairs Editor设置差分对。4.2 过孔的选择和放置过孔用0.3mm孔径、0.6mm外径这是嘉立创的常规工艺。电源过孔可以多打几个信号过孔一个就够。过孔不要放在焊盘上除非做盘中孔但盘中孔成本高。AD09里放置过孔用Place - Via或者走线时按小键盘的“*”键切换层并自动放一个过孔。过孔的类型在Design - Rules - Routing Via Style里设置。4.3 高速信号的走线要求H743的GPIO翻转速率可以到100MHz以上虽然核心板引出的排针不会跑那么快但内部走线还是要按高速信号处理。原则是走线尽量短不要绕远路。不要跨分割平面如果必须跨加缝合电容。时钟信号包地处理两侧加地线并打过孔。差分对等长误差控制在5mil以内。AD09里可以用Interactive Length Tuning工具做等长但AD09的等长工具不太好用建议手动调整。4.4 铺铜和接地Top和Bottom层铺地铜铺铜间距设为0.3mm不要直接连到焊盘用热焊盘连接。GND平面上的过孔要足够多尤其是MCU周围和晶振周围。AD09里铺铜用Place - Polygon Pour铺完后要Rebuild。注意AD09的铺铜有时候会有孤岛用Tools - Polygon Pours - Shelve/Unshelve检查。5. 常见问题排查我踩过的坑和解决办法5.1 晶振不起振最常见的原因是负载电容选错或者走线太长。先用示波器看OSC_OUT有没有波形如果没有检查电容值。8MHz晶振的负载电容一般在15pF到22pF之间如果不起振试着减小到10pF。另外检查晶振的焊接有没有虚焊LQFP封装的引脚很容易连锡。5.2 ADC采样值跳动先检查VDDA和VREF的供电用示波器看有没有纹波。如果纹波大加LC滤波或者换LDO。另外检查模拟地和数字地的连接单点接地或者用0欧电阻连接。5.3 SWD连不上检查NRST有没有被拉低BOOT0是不是低电平。如果都正常检查SWDIO和SWCLK的走线有没有断线或者短路。AD09里可以用Design - Rules - Electrical检查短路。5.4 PCB打样回来发现丝印看不清AD09默认的丝印线宽是0.15mm嘉立创的最小丝印线宽是0.15mm但实际做出来会偏细。建议改成0.2mm字体高度1mm以上。5.5 常见问题速查表问题可能原因解决办法晶振不起振负载电容错误、走线太长调整电容值、缩短走线ADC跳动模拟电源纹波大加LDO、LC滤波SWD连不上NRST被拉低、BOOT0错误检查复位电路、BOOT0电平丝印看不清线宽太细改为0.2mm板子发热LDO压差大换开关电源或者降低输入电压6. 打样和焊接最后一步别翻车6.1 打样文件输出AD09输出Gerber在File - Fabrication Outputs - Gerber Files。注意单位选毫米格式选2:5层选所有用到的层。钻孔文件在File - Fabrication Outputs - NC Drill Files同样选毫米。打样前用CAM350或者嘉立创的在线工具检查Gerber重点看阻焊层和丝印层有没有重叠。6.2 焊接顺序先焊MCU用热风枪或者回流焊。LQFP100的引脚间距0.5mm手工焊需要一定的技巧。我的做法是先给焊盘上锡放上MCU对好位用热风枪320度吹锡融化后用镊子轻推MCU让它自动对齐。然后焊电源和晶振最后焊排针和按键。注意H743的LQFP100封装对静电敏感焊接时戴防静电手环烙铁接地。6.3 上电测试先不焊MCU只焊电源部分上电测3.3V和模拟3.3V是否正常。正常后再焊MCU用ST-Link连接SWD看能不能识别到芯片。如果能识别说明最小系统基本正常。然后写一个简单的GPIO翻转程序测晶振和PLL是否工作。如果GPIO翻转频率不对检查PLL配置。7. 个人经验总结这块板子我前后打了三次样第一次晶振不起振第二次ADC跳动第三次才稳定。踩过的坑主要是电源和晶振部分后来发现是AMS1117的纹波太大换成TPS7A4700之后问题解决。另外AD09的默认规则对高速信号不友好需要手动调线宽和间距。如果你也想画一块H743核心板我的建议是电源部分不要省晶振部分不要急PCB布局多花时间布线可以慢慢调。核心板画好了后面做项目就是搭积木省下来的时间远比画板子花的时间多。