ARTICLE DETAIL

资讯详情

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

STM32F103C8T6最小系统原理图绘制实战:从电源、时钟到复位电路

STM32F103C8T6最小系统原理图绘制实战:从电源、时钟到复位电路 1. 为什么值得亲手画一遍STM32F103C8T6最小系统STM32F103C8T6这颗芯片在嵌入式圈子里几乎无人不晓。它属于ST的F1系列基于ARM Cortex-M3内核主频72MHz64KB Flash、20KB SRAM48个引脚LQFP封装。价格便宜、资料丰富、生态成熟是很多人从51单片机进阶到32位平台的第一颗芯片。市面上现成的“最小系统板”一抓一大把十几块钱就能买到一块那为什么还要自己画原理图、自己打板我的答案很直接买板子只能让你“用”它画板子才能让你“懂”它。最小系统是整个单片机能够跑起来的最低硬件条件它包含了电源、时钟、复位、启动配置、调试接口这几个核心模块。你把这几个模块的每一个电阻、每一个电容为什么放在那里搞清楚了后面画任何外设电路都不会慌。而且在实际项目中你往往需要把STM32直接嵌入到自己的板子上而不是插一块现成的核心板——这时候最小系统的设计能力就是硬门槛。这篇文章我会从零开始把STM32F103C8T6最小系统的原理图绘制过程完整拆解一遍。工具用的是立创EDA嘉立创EDA因为它的元件库和国产供应链结合得最紧密对新手也最友好。内容会覆盖芯片选型与封装确认、电源模块设计、时钟电路、复位电路、启动模式配置、SWD调试接口、去耦电容布局以及原理图绘制过程中的各种实操细节和踩坑经验。不管你是刚学完51单片机想往上走一步还是已经用过STM32但一直用现成核心板、没自己画过最小系统的这篇内容都能直接拿来参考。2. 动手之前芯片选型与工具准备2.1 STM32F103C8T6的引脚功能快速梳理在画原理图之前必须先把芯片的引脚功能吃透。STM32F103C8T6是48引脚LQFP封装引脚大致可以分成几类电源引脚VDD数字电源引脚9、24、36、48、VSS数字地引脚8、23、35、47、VDDA模拟电源引脚7、VSSA模拟地引脚6。注意VDD有4个引脚不是只有一个画图的时候每一个都要接。时钟引脚PD0/OSC_IN引脚5、PD1/OSC_OUT引脚6。外部晶振就接在这两个脚上。复位引脚NRST引脚7。注意引脚7在STM32F103C8T6上是NRST不是VDDA——VDDA在48脚封装上是引脚9。这一点很多人第一次画会搞混一定要对着数据手册确认。启动配置引脚BOOT0引脚44、BOOT1/PB2引脚20。BOOT1和PB2是复用的。调试接口SWDIO/PA13引脚34、SWCLK/PA14引脚37。SWD调试只需要这两根线加电源和地。GPIO剩下的PA0-PA15、PB0-PB15、PC13-PC15等按需引出即可。注意不同封装的STM32F103引脚定义不同LQFP48和LQFP64的电源引脚位置完全不一样。画图前务必下载对应封装的官方数据手册Datasheet对照Pinouts and pin description章节逐个确认。2.2 立创EDA的工程创建与元件库选择打开立创EDA专业版新建一个工程命名为“STM32F103C8T6_MinSystem”。然后新建原理图文件。接下来最关键的一步是找元件。立创EDA有两个库来源系统库和立创商城库。系统库里的符号比较通用但封装可能不全立创商城库直接关联实际可购买的物料符号和封装都是现成的推荐优先用商城库。搜索“STM32F103C8T6”你会看到多个结果。选择那个品牌为ST意法半导体、封装为LQFP-48的条目。放置到画布上之后双击元件可以查看它的符号和对应的PCB封装。确认封装是LQFP-480.5mm间距这个很重要——如果封装选错了后面PCB阶段会直接报废。其他需要准备的元件清单元件规格数量作用芯片STM32F103C8T6 LQFP481主控晶振8MHz 无源晶振1主时钟晶振电容22pF 06032时钟负载电容复位电容100nF 06031复位滤波复位电阻10kΩ 06031上拉复位按键轻触开关 3x4mm1手动复位去耦电容100nF 06034每个VDD引脚一个储能电容10μF 08051电源入口启动电阻10kΩ 06032BOOT0/BOOT1下拉排针2.54mm 1x41SWD接口排针2.54mm 1x202GPIO引出LED0805 红色1电源指示LED限流电阻1kΩ 06031LED限流这份清单是基于常见的最小系统设计实践整理的实际项目中可以根据需要增减。比如你不打算引出所有GPIO排针可以少放几个不需要电源指示灯LED和电阻也可以省掉。2.3 原理图绘制的基本设置在开始连线之前先做几个设置能省很多事栅格设置把栅格设为100mil2.54mm这是最常用的间距引脚对齐不容易出错。图纸尺寸A4就够了最小系统元件不多。网络标签命名规范建议用“功能_引脚”的格式比如“SWDIO”“SWCLK”“BOOT0”“NRST”电源用“3V3”和“GND”。命名统一后面检查网络连接的时候一眼就能看懂。3. 最小系统五大核心模块的原理图设计3.1 电源模块3.3V供电与去耦电容的讲究STM32F103C8T6的工作电压范围是2.0V到3.6V典型值3.3V。最小系统板上通常不集成稳压芯片而是通过排针从外部输入3.3V。但如果你打算用5V供电比如USB供电就需要加一颗LDO比如AMS1117-3.3或者RT9013。我这次的设计是直接输入3.3V所以电源模块比较简单一个电源输入排针一个10μF的储能电容加上每个VDD引脚旁边的100nF去耦电容。去耦电容是很多人容易忽略的地方。STM32F103C8T6有4个VDD引脚引脚9、24、36、48每个引脚旁边都应该放一个100nF的电容就近接地。为什么是100nF而不是10μF因为100nF的电容自谐振频率高能有效滤除高频噪声而10μF的电容自谐振频率低适合滤除低频纹波。两者配合使用效果最好但最小系统板上每个VDD脚配一个100nF是基本要求。实操心得去耦电容在原理图上看起来就是一个小电容接地但在PCB布局时它必须尽可能靠近对应的VDD引脚走线越短越好。如果原理图阶段就把电容和引脚的网络标签对应清楚比如C1对应VDD1PCB布局时就不会搞混。VDDA引脚9是模拟电源给ADC和内部模拟电路供电。即使你不用ADC也建议把VDDA接到3.3V并通过一个100nF电容去耦。VSSA引脚8直接接地。有些设计会在VDDA和3.3V之间加一个磁珠或0Ω电阻做模拟和数字电源的隔离最小系统板上不加也能正常工作但如果你后续要用ADC采集精度要求高的信号建议预留这个位置。3.2 时钟电路8MHz晶振与负载电容计算STM32F103C8T6有两个时钟源内部RC振荡器HSI8MHz和外部晶振HSE。内部RC精度一般在±1%左右做串口通信勉强够用但做USB或者对时序要求高的应用就不行了。所以最小系统板上通常会焊一个8MHz的外部无源晶振。晶振电路很简单晶振两端分别接PD0OSC_IN和PD1OSC_OUT每个引脚再通过一个电容接地。这两个电容叫负载电容容值需要根据晶振的规格来算。公式是这样的CL (C1 × C2) / (C1 C2) Cstray其中CL是晶振的负载电容查晶振数据手册常见的是20pFCstray是PCB上的杂散电容一般取3-5pF。假设CL20pFCstray5pF那么(C1×C2)/(C1C2) 15pF。如果C1C2则C1/215pFC1C230pF。但实际常用的值是22pF因为很多晶振的CL标称是20pF而实际PCB杂散电容可能更小22pF是一个比较稳妥的折中值。我实测过用22pF配8MHz晶振STM32F103C8T6的HSE启动很稳定串口通信波特率误差在可接受范围内。如果你手头只有20pF或者30pF也能用但极端情况下可能会起振困难或者频率偏差偏大。注意晶振下方不要走任何信号线PCB布局时晶振要尽量靠近芯片走线尽量短且等长。晶振外壳如果是金属的建议接地。3.3 复位电路NRST引脚的正确接法STM32F103C8T6的NRST引脚是低电平复位。也就是说当NRST被拉到低电平时芯片复位释放后芯片开始运行。标准的复位电路是一个10kΩ电阻从NRST上拉到3.3V一个100nF电容从NRST接地再加一个轻触按键并联在电容两端。按键按下时NRST被拉到地芯片复位松开后电容通过电阻充电NRST电压缓慢上升产生一个复位延时。这个延时时间怎么算RC充电时间常数τ R × C 10kΩ × 100nF 1ms。NRST的复位阈值电压大概在1.5V左右具体查数据手册从0V充到1.5V大约需要0.7个τ也就是0.7ms左右。这个延时足够芯片内部电路稳定了。有些设计会在NRST和地之间再加一个反向二极管比如1N4148作用是快速泄放电容上的电荷保证连续复位时不会因为电容没放完电而失效。最小系统板上不加也能用但如果你经常需要手动复位调试加上会更可靠。实操心得NRST引脚内部有上拉电阻但阻值比较大大概40kΩ左右外部再加一个10kΩ上拉可以增强抗干扰能力。另外NRST走线要尽量短远离高频信号线否则容易误触发复位。3.4 启动模式配置BOOT0和BOOT1怎么接STM32F103C8T6的启动模式由BOOT0和BOOT1两个引脚决定BOOT0BOOT1启动模式0X从主Flash启动正常运行10从系统存储器启动出厂Bootloader11从SRAM启动调试用正常运行时BOOT0接低电平通过10kΩ电阻下拉到地BOOT1也接低电平。BOOT1和PB2是复用引脚如果你在应用中需要用到PB2作为普通GPIO那BOOT1就不能固定接死需要根据启动模式要求处理。最小系统板上我通常的做法是BOOT0通过一个10kΩ电阻下拉到地同时预留一个跳线帽或者排针方便需要时把BOOT0拉到高电平进入串口下载模式。BOOT1直接通过10kΩ电阻下拉到地因为从SRAM启动的场景很少用。注意BOOT0引脚在芯片内部没有上拉或下拉必须外部处理。如果悬空芯片可能随机进入不同的启动模式导致程序跑不起来。这是新手最容易踩的坑之一。3.5 SWD调试接口最少需要几根线SWDSerial Wire Debug是ARM Cortex-M系列常用的调试接口只需要两根信号线SWDIOPA13和SWCLKPA14加上电源和地一共四根线。在原理图上我通常会放一个1x4的排针标注为“SWD”引脚顺序是3.3V、SWDIO、SWCLK、GND。这样用DAPLink或者ST-Link连接的时候直接插上去就行不用每次对着线序找。有些设计还会把NRST也引到调试接口上这样调试器可以控制芯片复位。如果你用的是DAPLink它支持复位控制把NRST引出来会更方便。但最小系统板上四根线已经足够下载和调试程序了。实操心得SWDIO和SWCLK走线尽量等长不要和其他高频信号线平行走太远。如果调试时经常连接失败可以在SWDIO和SWCLK上各串一个100Ω电阻能改善信号完整性。另外PA13和PA14在芯片复位后默认就是SWD功能不需要额外配置。4. 原理图绘制实操从放置元件到网络检查4.1 元件放置与引脚对齐技巧在立创EDA里放置元件时建议按功能模块分区摆放。比如左上角放电源模块右上角放芯片芯片左边放时钟电路右边放复位电路下边放SWD接口和启动配置。这样连线的时候思路清晰检查也方便。放置STM32F103C8T6的时候注意它的引脚在符号上可能不是按物理顺序排列的而是按功能分组。立创EDA的商城库符号通常会把电源引脚放在顶部地引脚放在底部GPIO按端口分组放在两侧。这种排列方式对画图很友好但你要对照数据手册确认每个引脚的功能标注是否正确。连线的时候用网络标签Net Label比直接拉线更清晰。比如VDD引脚不直接连到电源符号而是放一个“3V3”的网络标签GND引脚放“GND”标签。这样原理图看起来干净PCB阶段网络连接也不会出错。4.2 网络标签命名规范与连接检查网络标签的命名我建议遵循这几个原则电源用“3V3”和“GND”不要用“VCC”和“VSS”因为STM32的电源引脚叫VDD和VSS容易混淆。信号线用功能名比如“SWDIO”“SWCLK”“NRST”“BOOT0”。晶振引脚用“OSC_IN”和“OSC_OUT”不要用“PD0”“PD1”因为PD0和PD1在STM32F103C8T6上就是OSC_IN和OSC_OUT但用功能名更直观。如果同一个网络有多个连接点确保标签拼写完全一致。立创EDA对大小写敏感“SWDIO”和“swdio”会被当成两个不同的网络。画完原理图后一定要用立创EDA的“设计规则检查”DRC功能跑一遍。它会检查悬空引脚、重复网络标签、电源短路等问题。我见过太多人画完直接导出PCB结果发现某个VDD引脚忘了接板子打回来才发现浪费时间和打板费。4.3 从原理图到PCB封装确认与网表导出原理图检查无误后下一步是导出网表并生成PCB。在立创EDA里直接点“设计”-“转换原理图到PCB”就行。但在转换之前必须确认每个元件的PCB封装都正确。特别是STM32F103C8T6的LQFP-48封装要确认引脚间距是0.5mm焊盘尺寸和官方推荐一致。立创EDA商城库里的封装通常是经过验证的但如果你用的是自己画的封装一定要对照数据手册的Recommended PCB layout章节检查。晶振的封装也要注意。8MHz无源晶振常见的有5032、3225、2016等封装最小系统板上用5032或者直插的HC-49S都可以。我一般用5032贴片封装体积小焊接也不难。注意导出网表之前再次确认BOOT0、BOOT1、NRST、SWDIO、SWCLK这几个关键网络的连接。这几个网络如果画错板子打回来可能直接跑不起来排查起来很麻烦。5. 常见问题与排查技巧实录5.1 芯片不启动、晶振不起振怎么查这是最小系统板最常见的问题。板子打回来焊好芯片上电发现程序下载不进去或者下载进去了但不运行。排查思路如下第一步查电源。用万用表量每个VDD引脚的电压应该是3.3V。如果某个引脚电压不对检查对应的去耦电容是否虚焊或者PCB走线是否断开。第二步查复位。量NRST引脚的电压正常应该是3.3V左右。如果一直是低电平检查复位按键是否短路或者电容是否击穿。第三步查晶振。用示波器量OSC_IN引脚应该有8MHz的正弦波。如果没有检查晶振是否焊反无源晶振不分方向但封装焊盘可能不对称负载电容是否焊错。如果示波器探头接上去之后晶振就起振了说明负载电容偏大换小一点的试试。第四步查BOOT0。量BOOT0引脚的电压正常应该是0V。如果是高电平芯片会进入系统存储器启动模式不会运行你下载的程序。第五步查SWD连接。如果SWD连不上检查SWDIO和SWCLK是否接反排针是否虚焊。DAPLink的指示灯如果一直闪红灯说明连接失败。5.2 SWD连接失败、下载报错的排查思路SWD连接失败的原因很多我整理了一个速查表现象可能原因解决方法找不到设备电源未接通检查3.3V和GND连接找不到设备SWDIO/SWCLK接反交换两根线能找到但下载失败芯片被读保护用STM32CubeProgrammer解除保护下载后不运行BOOT0电平不对确认BOOT0为低连接不稳定走线太长或干扰缩短SWD走线加串阻复位后连接失败NRST被拉低检查复位电路还有一个容易被忽略的问题有些DAPLink或者ST-Link的固件版本太老不支持STM32F103C8T6的新批次芯片。遇到这种情况升级调试器固件通常能解决。5.3 电源纹波过大、ADC采样不准的处理如果你在用ADC功能发现采样值跳动很大首先要查电源纹波。用示波器交流耦合档量3.3V电源如果纹波超过50mV说明去耦不够。处理方法在每个VDD引脚旁边再加一个1μF的电容和100nF并联。VDDA引脚单独用一个10Ω电阻加100nF电容做RC滤波能显著改善ADC精度。另外ADC的参考电压就是VDDA如果VDDA不稳定采样值肯定不准。最小系统板上VDDA和VDD之间可以用一个0Ω电阻或者磁珠连接减少数字电路对模拟电源的干扰。实操心得我遇到过一块板子ADC采样值一直偏高查了半天发现是VDDA引脚忘了接。STM32F103C8T6的VDDA在LQFP48封装上是引脚9不是引脚7。引脚7是NRST。这个坑我踩过不止一次每次画新板子都要对着数据手册确认一遍。5.4 自己画最小系统板容易踩的五个坑最后总结一下我自己踩过的坑希望能帮你省点时间坑一VDD引脚漏接。STM32F103C8T6有4个VDD不是1个。漏接任何一个芯片都可能工作不稳定。坑二BOOT0悬空。BOOT0内部没有上下拉悬空时电平不确定芯片可能随机进入下载模式。坑三晶振负载电容选错。22pF是常用值但如果你用的晶振CL标称是12.5pF22pF就偏大了可能导致起振困难。坑四复位电容太大。100nF是常用值但如果用1μF复位延时太长调试器可能连接不上。坑五SWD排针顺序搞反。不同厂家的DAPLink排针顺序可能不一样画板子之前先确认你手头调试器的线序。6. 从最小系统到实际项目的扩展思路最小系统画完之后它就是一个可靠的硬件平台。你可以在这个基础上扩展各种外设加一个CH340做串口通信加一个OLED屏做显示加一个DHT11做温湿度采集加一个TB6612做电机驱动。这些外设的原理图设计本质上都是在最小系统的基础上增加新的模块核心的电源、时钟、复位、调试接口是不变的。如果你打算把STM32F103C8T6用到实际产品中还需要考虑几个额外的问题电源的稳定性加TVS管防浪涌、EMC加共模电感、滤波电容、PCB层叠四层板比两层板抗干扰能力强很多、以及代码加密STM32F103C8T6支持读保护可以通过选项字节设置。我个人在实际操作中的体会是最小系统虽然简单但它是整个硬件设计的地基。地基打牢了后面加什么外设都是水到渠成的事。反过来如果最小系统有隐患比如电源去耦不够、复位电路不可靠后面调试外设的时候就会各种莫名其妙的问题查起来非常痛苦。所以花时间把最小系统画好、焊好、测好绝对是值得的。
返回列表