ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

STM32F103C8T6最小系统原理图设计:从电源、时钟到复位与SWD下载的完整指南

STM32F103C8T6最小系统原理图设计:从电源、时钟到复位与SWD下载的完整指南 1. 为什么值得亲手画一遍STM32F103C8T6最小系统很多人入门STM32的第一块板子都是直接买现成的最小系统板——十几块钱包邮插上就能跑。但如果你打算真正把硬件这块搞明白我建议你至少亲手画一次STM32F103C8T6的最小系统原理图。原因很直接最小系统是所有复杂项目的“地基”电源、复位、时钟、启动配置、下载接口这五件事搞不清楚后面接什么外设都是空中楼阁。STM32F103C8T6这颗芯片LQFP48封装72MHz主频64KB Flash20KB SRAM属于经典到不能再经典的入门型号。它的最小系统原理图看起来简单但真正动手画的时候你会发现每一个电容、每一个电阻、每一个跳线帽的位置都有讲究。我见过太多人照着别人的图抄了一遍板子打回来发现晶振不起振、复位一直拉低、BOOT引脚接错导致程序跑飞。这些问题在原理图阶段就能避免前提是你知道每个元件为什么在那里。这篇文章面向的是有一定电路基础、想从“买模块”过渡到“自己画板”的嵌入式爱好者。我会用立创EDA作为绘图工具从芯片选型、电源设计、时钟电路、复位电路、启动模式配置到SWD下载接口把STM32F103C8T6最小系统原理图的每一个细节拆开讲清楚。不是让你照着抄而是让你理解每一根线背后的逻辑。画完之后你拿到的不只是一张图而是一套可以复用到任何STM32项目上的硬件设计思路。2. 动手之前先把芯片的脾气摸清楚2.1 引脚功能分组与最小系统的边界STM32F103C8T6有48个引脚但最小系统真正用到的其实只有几组关键引脚。我习惯在画图之前先把引脚按功能分组这样画原理图的时候不会乱。第一组是电源引脚VDD24脚、36脚、48脚、VSS23脚、35脚、47脚、VDDA9脚、VSSA8脚。注意VDD有三组不是重复标注而是芯片内部不同模块的供电入口每一个都必须接。VDDA是模拟部分的供电即使你不用ADC也建议接上并做滤波处理。第二组是时钟引脚PD0/OSC_IN5脚、PD1/OSC_OUT6脚。这两个脚接外部晶振如果不接晶振芯片也能靠内部RC振荡器跑但精度差很多串口通信容易出问题。第三组是复位引脚NRST7脚。这个脚低电平复位内部有上拉但外部还是要接一个复位电路。第四组是启动配置引脚BOOT044脚和BOOT1/PB220脚。这两个脚决定芯片上电后从哪里启动很多人忽略BOOT1其实它也有作用。第五组是下载调试引脚SWDIO/PA1334脚、SWCLK/PA1437脚。用SWD模式下载程序只需要这两根线比JTAG省引脚。剩下的就是GPIO和复用功能引脚了最小系统不需要全部引出但建议把常用的几组排针预留出来方便后续扩展。2.2 国产替代型号的兼容性判断现在市面上STM32F103C8T6的国产替代型号不少比如GD32F103C8T6、APM32F103C8T6、CH32F103C8T6等。这些芯片在引脚上基本是Pin-to-Pin兼容的原理图可以直接复用但有几个细节需要注意。GD32F103的供电范围是2.6V到3.6VSTM32是2.0V到3.6V如果你用3.3V供电两者都没问题。但GD32的Flash擦写次数和时序略有差异下载算法可能需要调整。APM32的ADC参考电压范围稍有不同如果你对模拟精度要求高VDDA的滤波电容要重新计算。CH32F103虽然引脚兼容但内核是RISC-V架构固件完全不兼容原理图可以照搬但程序要重写。我的建议是原理图按STM32F103C8T6的标准画焊接的时候先焊原装芯片调通再换国产替代验证。这样出了问题容易定位是硬件还是芯片本身的差异。2.3 封装选择与PCB布局的提前考量LQFP48封装的引脚间距是0.5mm手工焊接难度中等需要一定的拖焊技巧。如果你对自己的焊接手艺没信心可以考虑买转接板或者直接用核心板模块。但既然要画原理图我默认你打算自己打板焊接。在画原理图阶段就要考虑PCB布局的问题。比如去耦电容必须尽量靠近芯片的VDD引脚晶振要靠近OSC_IN和OSC_OUT复位电路的走线要短。这些约束在原理图上体现不出来但你在画图的时候就要心里有数不然后面画PCB的时候会发现元件摆不开。3. 电源部分别小看那几个电容3.1 3.3V稳压电路的选择逻辑STM32F103C8T6的工作电压是2.0V到3.6V典型值3.3V。供电方案通常有两种一种是直接用外部3.3V电源另一种是从5V降压到3.3V。如果你用USB供电VBUS是5V需要一颗LDO降压到3.3V。常用的型号有AMS1117-3.3、LM1117-3.3、RT9013等。AMS1117便宜好买但静态电流较大效率不高压差要求1.1V以上。RT9013静态电流只有25μA适合电池供电的场景。我一般选AMS1117-3.3因为便宜且货源充足。但要注意AMS1117的输出电容不能太小否则容易自激振荡。数据手册推荐输出端接22μF钽电容我实测用10μF MLCC加1μF MLCC也能稳定工作但如果你对稳定性要求高还是按手册来。LDO的输入端也要接电容一般10μF加0.1μF组合滤除低频和高频噪声。输入输出电容的接地端要尽量靠近LDO的GND引脚这个在PCB布局的时候要特别注意。3.2 去耦电容的配置与计算STM32F103C8T6有三个VDD引脚和一个VDDA引脚每个VDD引脚旁边都要放一个0.1μF的去耦电容。这三个电容的作用是滤除芯片内部开关噪声防止电源波动导致芯片工作异常。0.1μF这个值不是随便选的。芯片内部的门电路在开关瞬间会产生高频噪声频率大概在几十MHz到几百MHz。0.1μF的MLCC在这个频段的阻抗最低能有效把噪声旁路到地。如果你用1μF低频滤波效果更好但高频阻抗反而上升用0.01μF高频好但容量不够。所以0.1μF是折中后的最佳选择。除了每个VDD引脚旁边的0.1μF整个板子上还要放一个10μF的钽电容或者MLCC作为全局储能电容。这个电容的位置可以稍微远一点但也不能太远一般放在电源入口附近。VDDA的滤波要更讲究一些。除了0.1μF还要加一个1μF的电容并且最好串联一个磁珠或者小电阻形成LC滤波。如果你不用ADCVDDA可以直接接3.3V但滤波电容还是要保留。3.3 电源指示与保护电路电源指示灯不是必须的但强烈建议加上。一颗LED加一个1kΩ限流电阻接在3.3V和GND之间能让你一眼看出板子有没有上电。LED选0603封装的红色或绿色电流大概2mA到3mA亮度足够又不费电。限流电阻的计算很简单LED正向压降按2V算电源3.3V电流取3mA电阻就是(3.3-2)/0.003≈433Ω。实际选1kΩ也没问题电流小一点亮度暗一点但更省电。保护电路方面如果你用USB供电建议在VBUS和LDO之间加一个自恢复保险丝防止短路烧电脑USB口。保险丝选0805封装的额定电流500mA跳闸电流1A。再加一个TVS二极管防静电型号选SMAJ5.0A钳位电压9.2V能有效吸收静电脉冲。4. 时钟电路晶振不起振的锅往往在这里4.1 外部晶振的参数选择STM32F103C8T6的外部高速晶振HSE推荐8MHz配合内部PLL倍频到72MHz。为什么选8MHz而不是其他频率因为STM32的PLL输入范围是4MHz到16MHz8MHz正好在中间倍频系数9倍得到72MHz是官方推荐的最佳配置。晶振选无源晶振负载电容CL通常选20pF。匹配电容的计算公式是C1C22×(CL-Cstray)其中Cstray是PCB走线的寄生电容一般取3pF到5pF。所以C1C2≈2×(20-5)30pF。实际选22pF到33pF都可以我一般用22pF实测起振稳定。晶振的精度选±20ppm就够了太高精度浪费钱太低精度串口通信容易出错。封装选5032或3225贴片晶振比直插的HC-49S省空间。4.2 匹配电容与反馈电阻的取舍匹配电容的作用是调整晶振的谐振频率让它在标称频率上工作。如果电容选大了频率偏低选小了频率偏高。22pF是一个比较安全的起点如果你发现串口通信误码率高可以用示波器测一下晶振频率然后微调电容。反馈电阻RF的作用是给晶振提供直流偏置让它工作在非线性区的线性段。STM32内部已经集成了反馈电阻外部不需要再加。但有些国产替代芯片内部没有集成这时候需要在OSC_IN和OSC_OUT之间加一个1MΩ的电阻。画原理图的时候可以预留这个位置调试的时候根据实际情况决定焊不焊。4.3 晶振布局的注意事项晶振在PCB上的布局比原理图更重要。晶振和匹配电容要尽量靠近芯片的OSC_IN和OSC_OUT引脚走线长度不要超过10mm。走线要包地处理晶振下方不要走其他信号线尤其是高频信号。晶振外壳要接地如果是贴片晶振外壳焊盘直接接到GND。如果是直插晶振外壳用一根线接到GND。这样能屏蔽外部干扰提高起振可靠性。还有一点晶振下方不要铺铜或者铺铜但不要连接到任何网络。因为铜箔和晶振引脚之间会形成寄生电容影响频率稳定性。5. 复位与启动模式两个容易被忽视的细节5.1 复位电路的阻容取值STM32F103C8T6的NRST引脚内部有上拉电阻典型值40kΩ。外部复位电路通常是一个10kΩ上拉电阻加一个0.1μF电容到地再加一个复位按键。上拉电阻的作用是保证NRST在常态下为高电平。10kΩ这个值既能保证足够的驱动能力又不会在按键按下时消耗太大电流。如果你用100kΩ抗干扰能力会下降用1kΩ按键按下时电流太大。电容的作用是滤除复位引脚上的毛刺同时在上电时提供一个延时复位。0.1μF配合10kΩ时间常数τRC10k×0.1μ1ms足够让电源稳定后再释放复位。复位按键选轻触开关并联在电容两端。按下时NRST接地芯片复位松开时电容充电NRST缓慢上升到高电平。这个缓慢上升的过程就是复位延时保证电源完全稳定后再启动。5.2 BOOT0和BOOT1的配置逻辑BOOT0和BOOT1决定芯片上电后从哪里启动。BOOT00时从主Flash启动这是正常运行模式。BOOT01且BOOT10时从系统存储器启动这是串口下载模式。BOOT01且BOOT11时从SRAM启动一般不用。实际使用中BOOT0通过一个10kΩ电阻下拉到地同时用一个跳线帽或者按键可以拉到3.3V。BOOT1/PB2通过一个10kΩ电阻下拉到地一般不需要改动。为什么要用电阻而不是直接接地因为BOOT0在芯片内部有弱下拉但为了确保可靠外部还是要加一个10kΩ下拉。跳线帽的作用是方便切换模式如果你只用SWD下载BOOT0直接接地就行不需要跳线帽。5.3 启动模式切换的实操建议我建议在板子上留一个BOOT0的跳线帽虽然SWD下载不需要改BOOT0但万一SWD引脚被禁用或者芯片锁死还可以通过串口下载来救砖。串口下载需要把BOOT0拉到3.3V然后复位芯片进入系统存储器启动模式通过USART1下载程序。跳线帽选2.54mm间距的和排针配套。如果你追求小巧可以用0805封装的0Ω电阻代替跳线帽需要切换的时候用烙铁焊上或焊下。但这种方式不灵活调试阶段还是跳线帽方便。6. SWD下载接口两根线搞定调试6.1 SWD与JTAG的取舍STM32支持SWD和JTAG两种调试接口。JTAG需要5根线TCK、TMS、TDI、TDO、TRSTSWD只需要2根线SWDIO、SWCLK。对于最小系统来说SWD明显更合适省引脚省空间。SWDIO对应PA13SWCLK对应PA14。这两个引脚在芯片内部有上拉但外部还是建议加上拉电阻10kΩ到3.3V。上拉电阻的作用是保证空闲时引脚为高电平防止误触发。SWD接口的排针一般用4针或5针VCC、GND、SWDIO、SWCLK再加一个RESET。RESET可选但建议加上方便调试器复位芯片。6.2 下载器的兼容性与接线常用的下载器有ST-Link V2、DAPLink、J-Link等。ST-Link V2便宜好用支持SWD和SWIM驱动安装简单。DAPLink开源支持拖拽下载适合批量生产。J-Link功能最强但价格贵个人学习没必要。接线的时候注意下载器的VCC不要接到板子的3.3V上除非你确定板子没有其他供电。因为下载器的VCC是输出板子的3.3V也是输出两个输出对接会打架。正确的做法是只接GND、SWDIO、SWCLK板子单独供电。如果你要用下载器给板子供电那板子上就不要接LDO直接用下载器的3.3V。但下载器的3.3V输出电流有限一般只有100mA到200mA带不动太多外设。6.3 调试接口的PCB布局要点SWDIO和SWCLK的走线要尽量短不要超过50mm。如果走线太长信号质量下降下载容易失败。走线要远离晶振和电源开关节点避免干扰。排针的布局要方便插拔一般放在板子边缘。如果板子要装在壳子里排针要朝外或者用弯针。排针周围不要放高元件否则下载器插不进去。还有一点SWDIO和SWCLK不要接其他外设这两个引脚在下载的时候会被调试器占用。如果你非要用PA13和PA14做GPIO下载的时候要先把外设断开否则下载器无法识别芯片。7. 从原理图到PCB几个容易翻车的地方7.1 网络标号与连线检查画完原理图之后一定要用立创EDA的“设计规则检查”功能跑一遍。重点检查有没有悬空的引脚、有没有重复的网络标号、电源和地的连接是否完整。我习惯把VDD和VSS用网络标号标注而不是直接连线。这样图面更整洁但前提是网络标号要写对。VDD和VDD_3V3是两个不同的网络不能混用。GND和GNDA也要分开最后在电源入口处单点连接。7.2 封装匹配与BOM核对原理图画完之后每个元件都要指定封装。STM32F103C8T6选LQFP-48晶振选5032或3225电阻电容选0603或0805排针选2.54mm。封装选错了PCB画得再好也焊不上。BOM表要核对清楚型号、封装、数量、位号。特别是电阻电容同一个阻值可能有多个位号不要漏掉。我一般会在立创EDA里直接生成BOM然后对照原理图逐个检查。7.3 接地策略与星型接地的实操接地是PCB设计里最容易被忽视但又最重要的一环。STM32最小系统虽然简单但接地没做好ADC精度差、通信误码率高、复位异常等问题都会冒出来。我的做法是数字地和模拟地分开铺铜在电源入口处用0Ω电阻或者磁珠单点连接。晶振下方的地要单独处理不要和数字地混在一起。去耦电容的接地端要就近打孔到地平面不要走长线。星型接地在最小系统里体现为每个去耦电容的GND引脚先连到一起再统一接到电源入口的GND。这样避免地电流在芯片下方流动减少干扰。8. 画完之后怎么验证原理图没问题8.1 用立创EDA的仿真功能预检查立创EDA专业版支持简单的电路仿真虽然不能完全替代实际测试但能帮你发现一些低级错误。比如电源短路、LED限流电阻太小、复位电路时间常数不对等。仿真的时候重点看几个点3.3V输出是否稳定、复位引脚上电波形是否正常、晶振电路是否起振。如果仿真结果和预期不符先检查原理图不要急着打板。8.2 打板前的DRC与DFM检查打板之前一定要跑DRC设计规则检查和DFM可制造性设计检查。DRC检查线宽、线距、过孔大小是否符合工艺要求。DFM检查焊盘间距、阻焊开窗、丝印是否清晰。嘉立创的DFM检查比较严格如果你的设计有问题它会直接标红。常见的DFM问题有焊盘太小、丝印压焊盘、过孔离焊盘太近。这些问题在打板前改掉比打回来再改省事得多。8.3 首板调试的排查顺序板子打回来之后不要急着焊芯片。先焊电源部分测3.3V输出是否正常。然后焊复位电路测NRST上电波形。再焊晶振测起振情况。最后焊芯片测SWD能否识别。如果SWD识别不到芯片先检查供电、复位、BOOT0。这三个都没问题再检查SWDIO和SWCLK的接线。如果还是不行可能是芯片锁死了用串口下载试试能不能救回来。我在实际调试中遇到最多的问题是晶振不起振、复位一直拉低、BOOT0接错。这三个问题占了调试失败的八成以上。所以画原理图的时候这三个部分要反复检查不要想当然。9. 一些个人经验和踩坑记录画STM32F103C8T6最小系统原理图这件事我前后画过十几版踩过的坑基本都集中在几个地方。第一个坑是去耦电容漏画尤其是VDDA的滤波电容总觉得不用ADC就不接结果后来用ADC的时候发现精度差得离谱回头补焊电容才解决。第二个坑是晶振匹配电容选错用了10pF结果串口通信误码率很高换成22pF之后稳定了。第三个坑是BOOT0直接接地没有留跳线帽后来芯片锁死只能用串口下载但BOOT0焊死了改不了只能飞线。还有一个经验画原理图的时候把每个元件的参数都标注清楚不要只写“电容”“电阻”。0.1μF和10μF的电容在原理图上看起来一样但焊错了板子就工作不正常。位号也要连续不要跳号否则BOM表对不上。最后说一个关于国产替代的体会。我用GD32F103C8T6替换STM32F103C8T6的时候原理图完全没改直接焊上去就能跑。但APM32F103C8T6替换的时候发现ADC的参考电压需要重新校准VDDA的滤波电容从0.1μF换成1μF之后精度才达标。所以国产替代不是简单的Pin-to-Pin就行外围电路还是要根据具体型号微调。如果你打算把这块板子做成核心板建议把所有的GPIO都引出排针电源和地多留几组。这样后面接外设的时候不用飞线直接插杜邦线就行。排针的间距选2.54mm和面包板兼容。板子尺寸控制在50mm×30mm以内方便插在面包板上。画完原理图之后不要急着打板。先发给有经验的朋友看一眼或者发到论坛上让大家挑挑毛病。很多低级错误自己看不出来别人一眼就能发现。打板一次几十块钱但浪费的时间远不止这个数。
返回列表