STM32H723最小系统设计:从供电架构到SWD调试的实战指南
1. 为什么我选择死磕STM32H723最小系统第一次拿到STM32H723ZGT6这颗芯片的时候我盯着那个144脚的LQFP封装愣了好一会儿。550MHz的Cortex-M7内核1MB的SRAM还有那让人又爱又恨的供电架构——这玩意儿跟以前玩惯了的F103完全不是一个量级的东西。市面上大部分教程都在教你用F103C8T6搭最小系统那块蓝板子确实是经典但当你需要跑LWIP协议栈、做高速数据采集或者驱动RGB屏幕的时候F103那72MHz的主频和20KB的RAM就完全不够看了。STM32H723属于H7系列里的性价比选手主频比H743略低但价格友好不少关键是它保留了H7系列的核心架构双精度浮点单元、L1缓存、大容量SRAM还有那个让人又爱又恨的SMPSLDO混合供电设计。我这次搭最小系统的目标很明确——能稳定跑起来能通过SWD调试能外扩SDRAM最好还能把以太网PHY也预留上为后面跑LWIP做准备。最小系统这个词听起来简单但H723的最小系统跟F103的最小系统完全是两码事。F103你只要把电源、晶振、复位、BOOT引脚搞定就能跑H723你还得考虑内核供电、DCDC模式配置、VCAP电容、VDDLDO这些细节。一个地方搞错芯片要么不启动要么跑着跑着就死机而且这种问题特别难查因为万用表量电压都是对的但芯片就是不干活。这篇文章适合谁看如果你已经玩过F103或者F407的最小系统想往H7系列进阶那这篇内容就是为你准备的。如果你是完全的新手我建议先拿F103C8T6练手那块板子的原理图网上到处都是踩坑成本也低。H723这颗芯片光是电源部分就够你喝一壶的。2. 核心设计思路与方案选型2.1 供电架构的取舍SMPS还是LDOSTM32H723的供电设计是整个最小系统里最让人头疼的部分。芯片手册里给了三种供电方案纯LDO模式、SMPS直接供电模式、SMPSLDO混合模式。我一开始想偷懒用纯LDO毕竟简单但算了一下功耗就放弃了。H723在550MHz全速运行的时候内核电流能到300mA以上。如果用LDO从5V降到1.2V压差3.8V乘以0.3A光LDO上就要消耗1.14W的功率。这热量在小板子上根本散不出去芯片还没跑起来LDO先烫手了。所以SMPS方案是必须的效率能到85%以上发热量小很多。但SMPS模式有个坑它需要外接电感和电容而且对布局要求很高。我选的是2.2μH的屏蔽电感饱和电流至少1ADCR要小于100mΩ。电容用22μF的陶瓷电容ESR要低。这些参数不是随便选的电感值太小会导致纹波大太大则响应慢电容ESR高的话SMPS的输出纹波会直接影响内核稳定性。混合模式是我最终的选择。SMPS负责把5V降到1.2V左右然后LDO再稳压到1.1V给内核。这样既保证了效率又保证了电压精度。VCAP电容我用了两个2.2μF的陶瓷电容靠近芯片引脚放置这个电容的作用是稳定内核电压少了或者容值不对芯片直接不启动。2.2 晶振选型为什么我用了25MHz而不是8MHzF103最小系统上最常见的是8MHz晶振但H723我选了25MHz。原因很简单H723的PLL配置需要较高的输入频率才能跑到550MHz。用8MHz的话PLL倍频系数要设得很大抖动会累积时钟精度下降。25MHz晶振配合PLL倍频到550MHz只需要22倍抖动小很多。晶振的负载电容也要注意。我用的25MHz晶振规格书要求负载电容12pF那么两个匹配电容大概用18pF左右。这个值不是精确计算出来的因为PCB走线的寄生电容大概有3-5pF所以实际匹配电容要比理论值小一点。我试过用22pF起振没问题但频率偏了大概200Hz换成18pF之后就准了。高速外部晶振HSE的走线要尽量短最好在10mm以内而且下面要铺地屏蔽。我见过有人把晶振放在板子边缘走线拉了20多毫米结果起振时间要好几秒有时候干脆不起振。这种问题特别隐蔽因为换一块板子可能就好了你会以为是芯片问题。2.3 调试接口SWD还是JTAGSWD接口是必须的我留了一个标准的2x5 1.27mm排针。为什么不用JTAG因为SWD只需要两根线SWCLK和SWDIO加上电源和地一共四根线就够了省空间。而且SWD的速度完全够用H723的SWD时钟可以跑到50MHz以上下载程序几秒钟的事。但SWD有个细节要注意SWDIO和SWCLK上最好各串一个22Ω的电阻靠近芯片放置。这个电阻的作用是阻抗匹配减少信号反射。我一开始没加下载程序时好时坏加了之后就很稳定了。另外NRST引脚上要接一个100nF电容到地这个电容不能省否则复位信号会有毛刺。BOOT0引脚我通过一个10k电阻下拉到地同时留了一个跳线帽可以拉到3.3V。这样正常运行时从Flash启动需要进Bootloader的时候把跳线帽插上就行。BOOT1在H723上跟F103不太一样它跟其他功能复用我直接通过电阻下拉到地不折腾了。3. 硬件电路设计细节与实操要点3.1 电源部分的完整设计电源部分我分了三级第一级是5V输入通过一个Type-C接口进来加一个SS34二极管做防反接然后接一个220μF的电解电容做储能。第二级是SMPS电路用MP2145这颗DCDC芯片把5V降到1.2V。第三级是LDO用TLV755P把1.2V稳到1.1V给内核。MP2145的外围电路很关键。输入电容我用了一个10μF和一个100nF并联输出电容用了两个22μF并联。电感是2.2μH的SW引脚到电感的走线要短而粗至少20mil宽。反馈电阻的分压比要算准MP2145的基准电压是0.6V我要输出1.2V所以上电阻10k下电阻10k刚好分压一半。TLV755P的输入输出电容各用1μF就够了但输出端我额外加了一个100nF的小电容滤高频噪声。LDO的使能引脚直接接到5V上这样上电就工作。VCAP引脚上的两个2.2μF电容一定要用X7R或者X5R的陶瓷电容不能用Y5V因为Y5V的容值随电压变化太大实际容值可能只有标称的一半。注意SMPS的电感一定要用屏蔽电感否则辐射干扰会影响晶振和SWD信号。我试过用非屏蔽电感结果SWD下载经常失败换了屏蔽电感就好了。3.2 晶振与复位电路25MHz晶振我选的是5032封装的贴片晶振负载电容12pF精度±10ppm。两个匹配电容用18pF的NPO电容这个材质温度稳定性好。晶振下面铺地四周用接地过孔围起来减少干扰。复位电路很简单一个10k上拉电阻到3.3V一个100nF电容到地再加一个复位按键。但有个细节复位按键要并联一个0.1μF电容做消抖否则按一下可能触发多次复位。我一开始没加这个电容调试的时候按复位键芯片有时候启动有时候不启动后来加了电容就稳定了。NRST引脚内部有上拉电阻但阻值比较大大概40k左右所以外部还是要加一个10k的上拉保证复位信号的上升沿够快。复位信号的走线也要短最好在10mm以内而且不要跟SWD信号线平行走避免串扰。3.3 外扩SDRAM的预留设计虽然最小系统不一定要外扩SDRAM但我还是预留了FMC接口。H723的FMC支持SDRAM我选的是W9825G6KH这颗16MB的SDRAM芯片。地址线、数据线、控制线都引出来了但没焊芯片等需要的时候再焊。FMC的走线要注意等长。数据线D0-D15要尽量等长误差控制在5mm以内。地址线和控制线也要等长但要求没那么严格10mm以内就行。时钟线要单独走远离其他信号线最好包地处理。这些走线规则在画PCB的时候就要注意不然后面调SDRAM的时候会各种报错。SDRAM的电源也要单独处理用磁珠跟数字电源隔开减少噪声。去耦电容每颗芯片放一个100nF再加一个10μF的钽电容做储能。这些细节在最小系统阶段可能看不出差别但等你跑高速数据的时候差别就出来了。3.4 PCB布局与走线要点PCB我画的是四层板顶层信号第二层地第三层电源底层信号。四层板比两层板贵不了多少但信号完整性好太多。H723的SWD信号、晶振信号、SMPS的SW节点这些都要参考完整的地平面。SMPS的布局特别重要。输入电容要靠近MP2145的VIN引脚输出电容要靠近电感反馈电阻要靠近FB引脚。SW节点的铜皮面积要小减少辐射。电感下面不要走任何信号线尤其是晶振和SWD信号。晶振的布局前面说过了这里再强调一下晶振要靠近芯片的OSC_IN和OSC_OUT引脚走线要短下面铺地四周包地。晶振的匹配电容要靠近晶振放置不要放在芯片那边。SWD接口的布局也有讲究。SWCLK和SWDIO要尽量等长走线要短最好在50mm以内。如果走线太长下载速度要降下来否则容易出错。我一般把SWD接口放在板子边缘方便插拔但走线要控制好。4. 实操过程与核心环节实现4.1 焊接顺序与注意事项焊接这块板子我用了热风枪和烙铁配合。先焊电源部分因为电源不正常的话后面都白搭。MP2145是QFN封装底部有散热焊盘要用热风枪焊焊之前先在焊盘上涂一层薄薄的锡膏然后放芯片热风枪320度吹30秒左右。焊完电源后先不焊芯片上电测电压。5V输入正常1.2V输出正常1.1V输出正常这三个电压都对了我才焊芯片。这个步骤很重要我见过有人直接全焊完再上电结果电源有问题芯片直接烧了。H723是LQFP144封装引脚间距0.5mm焊接难度不小。我的做法是先对齐引脚固定对角两个脚然后拖焊。拖焊的时候烙铁头要干净锡量要少用0.3mm的细焊锡丝。焊完之后用放大镜检查有没有连锡特别是电源引脚和地引脚之间。实操心得焊LQFP封装的时候可以在焊盘上先涂一层助焊剂这样拖焊的时候锡会自动分开不容易连锡。焊完之后用洗板水清洗不然残留的助焊剂会导致漏电。4.2 上电测试与电压测量全部焊完之后先不插电用万用表测一下电源和地之间的电阻确认没有短路。正常的话电阻应该在几百欧以上如果只有几欧或者几十欧那肯定有短路要查。上电之后先测5V输入再测1.2V和1.1V。1.2V的误差要在±5%以内也就是1.14V到1.26V之间。1.1V的误差要在±3%以内也就是1.067V到1.133V之间。如果电压不对先查反馈电阻再查电感和电容。然后测VCAP引脚的电压应该在1.1V左右。如果VCAP电压不对芯片肯定不启动。VCAP电压不对一般是电容问题要么容值不对要么焊接不良。我遇到过VCAP电容虚焊的情况电压只有0.3V芯片完全不工作。晶振的起振也要测。用示波器探头10x档碰OSC_OUT引脚应该能看到25MHz的正弦波峰峰值大概1V左右。如果不起振先查匹配电容再查晶振本身。示波器探头的寄生电容会影响起振所以测的时候如果不起振拔掉探头再试。4.3 SWD连接与程序下载SWD连接我用的是ST-Link V3速度设到4MHz。第一次连接的时候如果芯片是空的ST-Link会提示找不到设备这时候按住复位键点连接然后松开复位键就能连上了。这个技巧在芯片刚焊好还没烧程序的时候特别有用。连接成功之后先读一下芯片ID确认是H723。然后烧一个最简单的LED闪烁程序验证芯片能正常运行。LED我接在PA5上串一个1k电阻到地。程序里配置PA5为推挽输出然后循环翻转。烧录的时候要注意H723的Flash编程算法跟F103不一样Keil里要选对算法。我一开始选错了算法烧录一直失败后来换成STM32H7x_2048.FLM就好了。这个算法文件在Keil的安装目录里如果没有的话要去官网下载。4.4 时钟配置与性能测试时钟配置我用CubeMX生成初始化代码。HSE选25MHzPLL配置成550MHz。具体参数是M5N110P1Q2。这样VCO频率是25/5*110550MHz系统时钟就是550MHz。AHB分频设成1APB1和APB2分频设成2这样APB时钟是275MHz。配置完之后跑一个CoreMark测试得分大概在3000分左右跟官方数据差不多。这个测试能验证时钟配置是否正确如果得分明显偏低说明时钟没跑满。我一开始PLL配置错了得分只有1500分查了半天才发现是分频系数设错了。注意H723在550MHz下运行的时候Flash需要配置等待周期。我设的是4个等待周期如果设少了会死机设多了性能下降。这个值要根据电压和频率查手册确定不能随便设。5. 常见问题与排查技巧实录5.1 芯片不启动的排查思路芯片不启动是最常见的问题排查思路要清晰。先测电压5V、3.3V、1.2V、1.1V、VCAP这五个电压都要对。如果哪个不对先修电源。电压都对了再查复位信号NRST应该是高电平按复位键应该拉低再拉高。复位信号正常的话查BOOT0引脚应该是低电平。BOOT0高电平的话芯片会进Bootloader不跑用户程序。BOOT0正常的话查晶振用示波器看OSC_OUT有没有波形。晶振正常的话查SWD能不能连上能连上的话说明芯片基本正常问题可能在程序里。如果SWD连不上先检查SWDIO和SWCLK有没有接反再检查有没有串电阻。都没问题的话可能是芯片焊接不良用热风枪重新吹一下芯片或者补焊一下电源引脚。5.2 SWD连接失败的常见原因SWD连接失败我遇到过好几次原因各不相同。第一次是SWDIO和SWCLK接反了调换之后就好了。第二次是没串22Ω电阻信号反射导致连接不稳定加了电阻就好了。第三次是复位电容太大用了1μF导致复位信号上升沿太慢换成100nF就好了。还有一种情况是芯片进入了低功耗模式SWD被关闭了。这时候要按住复位键点连接然后松开复位键在芯片启动之前连上。这个技巧在调试低功耗程序的时候特别有用。如果以上都试过了还是连不上可能是芯片坏了。我遇到过一颗芯片电源电压都正常但SWD就是连不上换了颗芯片就好了。这种概率不高但如果实在查不出问题换芯片试试。5.3 晶振不起振的处理方法晶振不起振的原因主要有三个匹配电容不对、晶振本身坏了、PCB走线太长。匹配电容不对是最常见的我一般先用18pF试不起振就换15pF或者22pF。晶振本身坏了的话换一颗新的试试。PCB走线太长的话只能改板子没别的办法。还有一种情况是晶振的负载电容跟规格书不符。有些晶振标称负载电容是12pF但实际用18pF才起振。这个没有定论只能试。我一般会准备几种容值的电容15pF、18pF、22pF挨个试。示波器测晶振的时候要注意探头的寄生电容会影响起振。如果探头一碰就不起振了说明匹配电容偏大换小一点的试试。或者用高阻抗的探头减少影响。5.4 程序跑飞与死机的排查程序跑飞一般是时钟配置或者电源问题。先查时钟配置用CubeMX生成的代码一般没问题但如果你手动改了PLL参数要仔细检查。Flash等待周期也要设对设少了会跑飞。电源问题也会导致跑飞。SMPS的输出纹波太大的话内核电压不稳程序就会跑飞。用示波器测1.2V和1.1V的纹波应该在50mV以内。如果纹波太大检查电感和电容或者增加输出电容。还有一种情况是堆栈溢出。H723的默认堆栈大小是0x400如果程序里用了大数组或者递归堆栈会溢出导致程序跑飞。可以在启动文件里把堆栈改大一点比如0x1000。5.5 常见问题速查表问题现象可能原因排查方法解决方法芯片不启动电源电压不对测5V、3.3V、1.2V、1.1V、VCAP修电源电路芯片不启动复位信号异常测NRST电压检查复位电路芯片不启动BOOT0电平错误测BOOT0电压检查BOOT0电阻SWD连不上SWDIO/SWCLK接反检查接线调换接线SWD连不上缺少匹配电阻检查电路串22Ω电阻晶振不起振匹配电容不对换不同容值电容试15pF/18pF/22pF晶振不起振走线太长检查PCB改板子程序跑飞时钟配置错误检查PLL参数重新配置程序跑飞电源纹波大测纹波增加输出电容程序跑飞堆栈溢出检查堆栈大小改启动文件6. 调试实战中的经验总结6.1 示波器与万用表的使用技巧调试硬件的时候示波器比万用表有用得多。万用表只能测平均值示波器能看到纹波和毛刺。测电源纹波的时候要用AC耦合带宽限制设到20MHz探头要用弹簧地线不能用鳄鱼夹否则会引入干扰。测晶振的时候要用10x探头1x探头的寄生电容太大会影响起振。如果示波器有高阻抗探头更好没有的话就用10x探头凑合。测SWD信号的时候要用高带宽探头至少100MHz否则看不到信号的上升沿。万用表主要用来测通断和电压。测通断的时候要确保板子没电否则测不准。测电压的时候要用好的表笔劣质表笔的接触电阻大测出来的电压偏低。6.2 焊接工具与材料的选择烙铁我用的是936焊台配刀头适合拖焊。热风枪用的是858D温度可调风量可调。焊锡丝用0.3mm的含铅锡丝含铅的比无铅的好焊熔点低流动性好。助焊剂用松香或者免洗助焊剂松香便宜但残留多免洗的贵但干净。焊LQFP封装的时候刀头比尖头好用。刀头可以同时接触多个引脚拖焊效率高。焊QFN封装的时候要用热风枪烙铁焊不了底部的散热焊盘。热风枪的温度设到320度左右风量设到最小避免吹跑小元件。洗板水要用无水的含水的洗板水会腐蚀元件。洗完之后要用热风枪吹干或者自然晾干。残留的洗板水会导致漏电特别是晶振电路和高阻抗电路。6.3 元件采购与替代方案H723ZGT6这颗芯片我在立创商城买的价格大概40多块钱。STM32的芯片假货不多但翻新片不少买的时候要选靠谱的渠道。我一般选立创或者得捷贵一点但放心。MP2145这颗DCDC芯片比较贵大概5块钱一颗。替代方案是MP2315便宜一半但电流小一点只有3A。H723的内核电流最大300mA3A完全够用。TLV755P的替代方案是RT9013也是1.1V输出便宜不少。晶振我用的是京华的25MHz贴片晶振1块钱一颗。替代方案是爱普生的贵一点但精度更高。电容电阻用国巨的就行便宜量又足。电感用顺络的屏蔽电感2块钱一颗。6.4 后续扩展方向这个最小系统跑起来之后可以扩展很多功能。我下一步打算把以太网PHY焊上跑LWIP协议栈。H723自带以太网MAC外接一个LAN8720A PHY就行。CubeMX里配置LWIP生成代码然后调通ping就行。还可以扩展USB接口H723自带USB OTG可以做成USB设备或者USB主机。USB设备的例子很多USB主机的少一点但也不难。还可以扩展SD卡接口用SDMMC外设跑FatFS文件系统。如果要做高速数据采集可以扩展ADC和DMA。H723的ADC是16位的采样率能到3.6MSPS配合DMA可以连续采集。还可以扩展SPI接口的ADC比如AD76068通道同步采样适合做电力监测。这个板子我画了四次才稳定下来前三次都有各种问题。第一次是电源纹波太大第二次是晶振不起振第三次是SWD连接不稳定。每次改板子都要重新焊接、重新调试挺折腾的。但每次解决问题之后对H723的理解就更深一层。现在这块板子跑550MHz很稳CoreMark得分3100多分跑LWIP也能ping通算是达到预期目标了。