首页 / 资讯中心 / 文章详情

STM32电源引脚详解:VDD、VDDA、VBAT接法与避坑指南

STM32电源引脚详解:VDD、VDDA、VBAT接法与避坑指南 ★ FEATURED ARTICLE
画过几块STM32板子之后回头看新手最容易翻车的地方往往不是原理图逻辑而是电源引脚。VDD、VDDA、VBAT这三个词看着像亲戚实际作用完全不同接法也各有讲究。很多第一次画板的朋友直接在芯片周围摆一圈电容然后所有电源脚哗啦一下连到3.3V上完事。运气好能跑运气不好就是下载失败、复位不稳定、ADC读数乱跳、RTC一断电就归零。这篇就把这三个电源域是什么、该怎么接、常见坑在哪一次说清楚给准备画STM32最小系统板或者做项目板的朋友做个参考。1. 先说清楚STM32的电源引脚到底分几种1.1 VDD主电源为什么芯片要长这么多脚VDD是芯片的数字主电源给内核、Flash、SRAM、数字外设这些“数字电路”供电。打开STM32的数据手册你会看到VDD这一项标注了VDD2.0~3.6VF1系列其他系列略有差异但基本都在这附近。有意思的是一颗芯片上通常有不止一个VDD引脚。以常见的LQFP48封装F103C8T6为例VDD有三个VSS也有三个分布在芯片不同位置。第一次画板的人容易犯嘀咕这三个VDD是各管一摊还是内部连在一起的从电气逻辑上讲芯片内部是连在一起的一个大网络的多个引脚同时引出。这么做不是吃饱了撑的而是为了降低芯片内部的寄生电阻和寄生电感。电源电流从PCB流入芯片时如果只有一个引脚细长的内部走线会产生明显压降高频率翻转时还会因为寄生电感导致电压波动。多引脚并联相当于把内部电源网络“加粗”让电流分布更均匀。既然多个VDD内部相通那PCB上是不是可以只接一个引脚、其他空着严格说不行。每个VDD引脚对应的那一小段内部电路工作时的瞬态电流有差异。数据手册明确要求所有VDD、VSS都必须连接而且每个VDD引脚旁边要放去耦电容就是这个道理。多个VDD在PCB上的连接方式也值得注意。我见过一块板子把三个VDD用一条细线串过去像串糖葫芦一样最后一个引脚的供电走线走了绕远路。这不行。正确做法是尽量让每个VDD引脚都有独立的支路连接到主3.3V平面或粗走线每个引脚旁就近放一个100nF电容。电容的地脚要直接打过孔到地平层别跟相邻电容的地脚串成一串再落地否则高频噪声泄放路径太长。1.2 VDDA模拟电源比VDD更需要用心VDDA是模拟电源引脚给ADC、DAC、内部复位电路、内部参考电压等模拟部分供电。名字里多个A即Analog模拟。VDDA的电压范围跟VDD一样正常工作时要保证VDDA约等于VDD。但它的供电质量要求高得多。数字电路对电源噪声容忍度相对高模拟电路则不然ADC的量化结果直接受电源纹波影响。VDDA上如果趴着几百毫伏的开关噪声12位ADC的低几位基本就是噪声在读数。所以主流设计里VDDA不会直接裸露接VDD而是通过一个磁珠再进VDDA配合对地电容构成滤波网络。磁珠的作用是高频阻抗隔离对直流和低频电流几乎无损耗但对几十MHz以上的高频噪声呈现高阻抗相当于给模拟电源加了一道“隔音墙”。另外一个容易忽略的点有些芯片的VDDA和VDD之间内部存在一个寄生二极管或者上电时序逻辑。如果板子上VDDA完全悬空芯片可能上电后无法启动复位、下载器连不上、程序跑了但串口输出乱码。我在调试一块F103板子时遇到过“按下复位键才能正常工作”的怪现象排查到最后就是VDNA没接好导致的。如果用的芯片有VREF引脚F4系列部分型号、LQFP100及以上封装常见ADC的参考电压是单独引出的接法上要求比VDDA更严格需要单独滤波。而F103这类没有外部VREF引脚的型号内部参考电压直接取自VDDA所以VDDA的滤波质量就等于ADC参考电压的质量。1.3 VBAT备份域的后备电源很多人漏了它VBAT是备份域的供电引脚给RTC实时时钟、备份寄存器、LSE外部32.768kHz振荡器供电。所谓的“备份域”就是芯片内部一小块独立电源区域。主电源VDD掉电后只要VBAT还有电RTC继续走时备份寄存器里的数据也不丢失。VBAT的电压范围一般是1.8~3.6V比VDD宽。这意味着你可以用纽扣电池直接供电电压低至2V左右时RTC依然能跑。这设计背后的逻辑很直白产品主电源断电后靠一个后备电池维持时钟。很多新手板子的VBAT是直接悬空的。悬空不接芯片能跑吗能。平时上电工作时RTC也能用。但只要主电源一断开RTC立刻停摆时间归零。如果你的产品根本不需要断电保持时间VBAT悬空其实“不会爆炸”但这么做会在后续调试中埋雷——每次拔掉USB线再插上时间就跑偏了你还会误以为是自己RTC代码写错了。与其这样不如老老实实把VBAT接上。2. VDD和VDDA的接法从原理图到PCB2.1 去耦电容位置比容值更重要电源引脚旁边的去耦电容是新手画板子必须养成的第一个习惯。原理上没有多复杂芯片内部逻辑翻转的瞬间需要抽取瞬态电流这个电流从远处电源经过走线送过来时线上寄生电感会阻碍电流突变导致电源电压瞬间跌落。去耦电容就放在引脚旁边相当于一个“微型水库”引脚需要大电流时直接就近取水不用等远处水闸放水。容值选择上STM32官方参考设计一般是每个VDD引脚配一个100nF陶瓷电容整个芯片电源入口再放一个4.7uF~10uF的体电容。这组大电容负责中低频储能100nF负责高频瞬态响应。但位置更关键。100nF电容必须放在与对应VDD引脚尽可能近的位置走线要短过孔要紧挨着电容地焊盘打。我见过一块板子原理图电容一个不少但PCB布局时为了“好看”把所有电容整整齐齐放在芯片一排结果每个电容到VDD引脚都绕了一两厘米等于白放。高频去耦的瓶颈是寄生电感同样容值下引脚到电容的走线越长电感越大去耦效果越差。电容材质方面主流选X7R或X5R陶瓷电容。便宜耐用的MLCC。不要选Y5V这种电容温度特性差容量随温度和电压衰减严重DC偏压特性也不理想。还有个细节多个VDD引脚的去耦电容地脚不要共享一个过孔。一个电容一个过孔各自就近打孔下地。共享过孔会在地回流路径上引入额外的共用电感高频时效果大打折扣。2.2 VDDA的标准滤波电路磁珠加电容VDDA的典型接法是这样的VDD主电源经过一个磁珠常见选600Ω100MHz额定电流100mA以上连接到VDDA引脚VDDA对地接三颗电容1uF、100nF、10nF大小搭配覆盖不同频段VSSA与VSS直接相连通常就近单点连接即可。磁珠和电感不一样。电感是储能元件磁珠是损耗元件它把高频噪声以热量形式消耗掉。选磁珠主要看两个参数额定电流和100MHz下的阻抗。STM32这种芯片整个模拟部分电流很小几十mA足够100mA额定电流的磁珠富余得很常见料号比如BLM21AG601SN1D、MPZ1608S601A。为什么用磁珠而不用电阻电阻会分压磁珠直流电阻只有几十毫欧几乎不产生压降高频时阻抗飙升正好把噪声挡在外面。为什么不用电感电感体积大、成本高而且电感在高频下可能与电容发生谐振反而引入新的问题。磁珠适用范围更广对STM32这种板级滤波场景是更省心的选择。很多前辈的习惯是VDDA只用一颗磁珠加0.1uF和1uF实测下来也够用。想更稳妥再加一颗10nF。如果板子面积紧张至少保证1uF100nF别只放一颗100nF糊弄了事。有一种写法是错误的在VDD和VDDA之间串一个电阻。我在一块板子上见过这种接法画板的人看了一些电源滤波教程把电阻当磁珠用了。电阻在直流下会产生压降VDDA比VDD低个几十毫伏对芯片来说还能忍但电阻的噪声隔离能力远不如磁珠高频噪声直接透传ADC指标基本废掉。2.3 地怎么处理新手别折腾地平面分割关于模拟地AGND和数字地DGND很多教程讲得玄乎什么“单点连接”“星型接地”讲了一大堆。我的建议是STM32这种中等集成度的板子新手画第一版时别做地平面分割直接用一整块完整的地平面。为什么地平面分割如果没切好会制造地回路反而让噪声更严重。整块地平面的阻抗极低回流路径最短数字电路的噪声回流不会大面积串进模拟区域。模拟部分用走线布局来保护ADC采样信号、VDNA走线离数字信号远一点走线两侧让地平面保持完整不要被其他走线横穿割裂。如果你坚持要分割地平面至少要保证分割线不跨过模拟信号走线。跨分割线的走线电流被迫绕很远回流形成一个大环路天线后果比不分割还糟糕。况且STM32内部模拟和数字地本身是连通的你外部再“单点连接”本质上只是在让信号绕路。什么时候才需要认真考虑模拟地数字地分离当板上同时有大电流数字电路和高精度模拟采集比如几十安培电机驱动和24位ADC共存时才值得做分区处理。一个STM32最小系统板整块地平面足够。3. VBAT到底怎么接三种方案和适用场景3.1 方案一直接接3.3V最简单也最稳妥如果你做的板子不需要像手表一样在断电后继续保持走时把VBAT直接接到板上的3.3V电源即可。这是最省事的做法也是很多开发板默认的接法。接了3.3V之后板子一上电VBAT就有电RTC正常工作。缺点是一断电VBAT跟着掉电时间不保持。但对绝大多数学习板和评估板来说这个缺点无所谓。接线时VBAT引脚旁边也放一个100nF电容去耦。有些新手把VBAT直接飞线到3.3V不管了也行芯片能工作但加颗电容更稳妥。另一种常见接法是把VBAT接到板子的“常供电区域”也就是即使整机处于关机状态也有一路电源持续给VBAT供电。这种设计常见于有“关机”功能的产品MCU大部分电路断电但RTC不熄火。3.2 方案二纽扣电池供电注意防倒灌需要真正实现“断电保持时间”的产品用纽扣电池供电是最经典的路子。常见的电池型号CR1220或者CR2032尺寸小、容量够RTC和备份寄存器用几年。关键在于防倒灌和防过放原因和PC主板CMOS电池电路是同一个道理。原理上只要接二极管隔离就好系统3.3V存在时3.3V通过二极管给VBAT供电同时给电池充电如果你接的是可充电电池系统断电后电池通过另一个二极管给VBAT供电。两个二极管方向错开保证电流不会从高电位流向低电位互相灌。二极管的选型可以看这个场景的特点VBAT电流非常小RTC走时电流约1uA级别备份寄存器漏电也极小。所以用常见的1N4148小信号二极管就够压降零点几伏也没关系。如果追求低漏电可以用BAT54系列肖特基管反向漏电更小电池能用更久。接线举例3.3V通过SS14或1N4148正极接3.3V负极接VBAT接到VBAT电池正极也通过一个二极管接到VBATVBAT对地放一个100nF~1uF电容滤除高频噪声的同时在电池短暂接触不良时起到缓冲作用。从应用场景说只要VBAT电压保持在1.8V以上RTC就能维持工作。纽扣电池从满电3.0V左右掉到1.8V的时间非常长两三年轻轻松松。另外一个容易忽略的点不要把电池直接裸接VBAT——没有二极管系统上电时3.3V会反向灌入电池电池不是充电电池时会被充坏甚至漏液。有的低成本方案省略二极管直接接短时间能用时间长了风险很大。3.3 方案三超级电容短时保持的折中方案纽扣电池有寿命问题而且电池属于化学品过温、仓储、运输都有讲究。如果产品只需要断电后保持RTC几分钟到几天可以考虑用超级电容法拉电容作为后备电源。超级电容容量从0.1F到几F都有体积小、价格低、可反复充放电数十万次。0.1F的电容漏电电流按几十uA计算能撑几十分钟到几小时选1F级的大电容撑几天问题不大。实际能用多久取决于电容漏电、温度、备份域功耗等多个因素。电路接法简单电容正极接VBAT负极接地。但要注意充电电流限制。人体直接接时瞬间充电电流可能很大建议串联一个100~1000Ω的电阻限制充电电流防止上电瞬间电容把电源电压拉垮。电路上可以这样组织3.3V经过100~1kΩ的限流电阻接到超级电容正极超级电容正极再接到VBAT二极管可加可不加看你对“掉电后电容不要反哺系统”有没有要求。如果3.3V掉电后电容电压高于系统其它残压电流会通过其它路径泄放掉影响保持时间。超级电容的缺点是漏电相对明显温度越高漏电越大。夏天高温环境下0.1F电容可能一天就放完了所以要根据产品的实际断电时长合理选择容量。除了成本较高的场景这个方案的使用体验不错没有电池那些麻烦的认证问题环保上也更友好。3.4 方案四最小化设计——先接3.3V预留电池焊盘很多开发板最终选择的是“3.3V直连预留电池焊盘”的混合方案。默认把VBAT接到3.3V板上预留一个纽扣电池座的焊盘位置焊盘上串联一个100~1kΩ的电阻跳线。你用不到电池时就空着需要长时保持RTC时焊上电池座再改跳线即可。这个方案灵活性强而且不会干扰初次调试。如果你刚开始画第一块板建议优先采用这个方式你甚至可以先不装电池直接用3.3V直连验证功能。等要升级产品做长时间走时保持再补上电池电路。4. 新手画板最容易踩的五个电源坑4.1 VDDA悬空或者没滤波启动和ADC一起出问题VDDA接不好影响是两方面的。第一是启动问题芯片内部复位电路也挂在VDDA域里VDNA悬空时复位逻辑可能不正常轻则偶尔启动失败重则下载器都连不上。第二是ADC精度问题VDDA的噪声直接耦合进采样结果ADC读数跳字。症状是这样的上电后程序不跑按一下复位键又能跑或者串口能打印但ADC采集电压跳得非常离谱动辄几十LSB。你查代码查半天发现逻辑完全正确问题根本在硬件。解决办法前面讲过磁珠加电容这套接法必须落地。对F103这类低主频芯片如果你实在不想上磁珠直接把VDDA和VDD之间用短粗走线连接然后VDDA对地放1uF100nF实测大部分场景也能跑。但如果你想用ADC做数据采集磁珠还是建议加上成本就几毛钱。4.2 去耦电容放太远等于白放电容离引脚远导致的故障比想象中隐蔽。因为芯片大部分时间工作正常但高频率翻转IO口、点亮LED矩阵、驱动数码管刷新时瞬态电流飙升电源电压跌落表现为偶尔的数据错误或者程序跑飞。排查这类问题很费劲因为问题随机、难以复现。最好的办法就是从设计阶段就杜绝每个电源引脚附近放电容走线不超过3mm电容地脚独自过孔。布局阶段先放芯片和去耦电容再考虑其他器件的位置。常见迷惑言论是“我电容容量大不就行了”。电感才是高频瓶颈加大容值有效果但天花板很低。100nF的标准配置配合良好的布局足够应付STM32的工作特性。真正有限流瓶颈的大电流器件是电机驱动、无线模块这些那是另一个层面的电源设计问题。4.3 VBAT悬空RTC一断电就清零VBAT悬空时上电期间芯片正常工作你会很容易忽略它的存在。然后你写了一套RTC代码校准好时间拔电重启时间归零了。查代码、查初始化流程怎么都想不明白。这时候拿万用表量一下VBAT引脚——如果它跟GND之间阻值不对或者干脆就是悬空状态故障就锁定在这里了。处理方案前面已经给了只想让RTC在系统上电期间工作直接接3.3V就行需要断电保持再上电池或超级电容。另外补充一个点如果板子有LSE外部晶振VBAT域负责给LSE振荡器供电。VBAT悬空时LSE可能不起振RTC就会一直用不到外部晶振时间精度变差。你明明焊了32.768kHz晶振RTC却跑得忽快忽慢检查LSE状态时发现一直没起振原因可能就出在VBAT上。4.4 AMS1117输出电容选错3.3V纹波大到单片机复位AMS1117是经典的低成本LDO很多开发板用它从5V转3.3V。网上讨论过一个问题AMS1117输出端的钽电容换成陶瓷电容后会不会影响STM32工作答案是不能一概而论。AMS1117的稳定性对输出电容的ESR等效串联电阻有要求。原厂手册建议输出端用钽电容因为钽电容ESR较高一般几百毫欧到几欧正好落在LDO稳定工作区域。陶瓷电容ESR极低只有几毫欧对某些批次的AMS1117来说可能导致环路相位裕度不足输出端出现振荡或瞬态过冲。现实里的情况你手头只有陶瓷电容换了之后板子也能跑不代表没问题。陶瓷电容在负载突变时产生的电压过冲可能超过芯片绝对最大额定值一次两次没事长期下来影响可靠性。我自己遇到过一块板子用AMS1117加钽电容输出3.3V换成陶瓷电容后STM32在运行浮点运算密集型程序时偶尔自动复位换回钽电容就消失了。如果你想保留陶瓷电容比较稳的做法是在输出端串联一个0.5~1Ω的小电阻人为抬升ESR再配合陶瓷电容。电容本身用X7R/X5R容值10uF左右别用太小的。或者干脆换一颗对ESR不敏感的LDO比如XC6206、ME6211、RT9013这几颗用陶瓷电容就很稳。4.5 电源和复位、烧录之间的关系下载器连不上芯片很多人的第一反应是驱动问题、接线问题很少会想到电源。实际上供电质量差时ST-Link连接成功率会大降上电瞬间3.3V上升斜率太慢导致芯片上电复位时序不对调试器握手阶段就觉得目标芯片没准备好。常见的表现是板子单独供电能跑但一接ST-Link下载进度条卡在连接阶段或者按下复位键才能下载成功。排查顺序我会这么来先量3.3V是否稳定纹波大不大再量NRST引脚正常情况下引脚通过10kΩ电阻上拉到3.3V对地有一颗100nF电容按下复位键时拉低。NRST引脚的电容大小也有讲究。100nF配10kΩ上拉时间是毫秒级的正常。有新手把电容换成了4.7uF结果是上电后复位释放时间变长下载器一直在等待或者每次下载前要手动复位一次。如果你遇到这种情况查一下是不是复位电容太大了。还有BOOT0、BOOT1引脚。BOOT0必须用下拉电阻常见10kΩ接到GND让芯片从Flash启动。BOOT0悬空时上电后芯片可能意外进入Bootloader模式表现是下载正常但程序不运行或者下载后需要复位才跑这也是初学者常碰到的“电源周边问题”。5. 上电前的自查清单和实测排查方法5.1 上电前先做三件检查第一件事万用表二极管档量电源对地是否短路。红表笔接地黑表笔接3.3V正常情况会看到二极管压降读数因为电源网络对地有大电容刚开始会有一个电容充电过程。如果显示短路或者几毫欧电阻先别上电查焊接。第二件事确认所有电源引脚都有电压。在板上3.3V网络和GND之间量电压然后量芯片每个VDD引脚电压再量VDDA和VBAT。注意有些引脚可能藏在芯片底下不好下笔可以从最近的电容焊盘测量。第三件事用示波器看纹波。如果是自己画的电源电路插上USB或电源适配器后在去耦电容两端看3.3V波形纹波超过50~100mV就值得警惕。对LDO供电来说几十mV以内算正常超过200mV就需要查布线、查电容、查地平面。5.2 用示波器看电源波形判断复位问题如果你板子“偶尔启动失败”大概率是上电复位时序不过关。示波器探头接3.3V和NRST同时观察上电曲线。理论上3.3V上电要快、要单调上升不能缓慢爬坡更不能在中途跌个坑。STM32手册里对电源上升速率有要求一般要求不低于0.1V/ms实际设计越陡越好。如果电源上电慢复位释放的时机不确定内核可能在电源还没稳定时就开始执行程序跑飞、卡死都是可能的。处理方式电源路径上加总电容10uF~47uF能提供瞬时储能但会让上电变慢。对于3.3V LDO供电的结构通常在输入端5V侧加大电容输出端只要正常去耦即可。如果3.3V上电过慢可以看LDO的启动时间有些LDO有软启动功能反而会拉长启动时间叠加MCU复位时序就出问题。这种场景可以适当减小输出总电容或者选择启动更快的LDO。5.3 写一段小代码验证整个电源系统硬件没问题之后用代码做个快速验证。三分钟搞定能确认一大半电源相关隐患。第一步读芯片内部温度传感器和内部参考电压VREFINT。STM32内部自带一个约1.2V的参考电压ADC可以测它。如果你的VDDA足够干净实测值跟数据手册的典型值偏差很小如果偏差超过几十mV多半是VDNA有问题。第二步跑一个RTC写入与读回测试。写个当前时间然后系统复位重读看时间是否连续。这能验证VBAT域是否正常供电。如果时间是乱的重点检查VBAT。第三步反复开关电源几次观察程序是否每次都能正常启动、能否稳定进入main函数。如果偶尔卡在启动阶段就要回头看电源上升时间和复位电路。这三步跑完电源系统基本算是健康的。剩下的就是正常功能开发的问题了。最后说点个人经验。第一次画STM32最小系统板时我也踩过VDNA没接磁珠导致ADC乱跳的坑。当时查了一整天最后在论坛看到有人说“检查你的模拟电源滤波”一改就好了。后来第二版板子把VBAT直接接3.3V第三版加了电池座每一步改动都很小但稳定性提升非常明显。画板子这事电源设计做好了后面能省下大量调试时间。对着手册把VDD、VDNA、VBAT一个个接对你的板子就成功了一半。
阅读完成 · 觉得有帮助?
咨询建站