问题1.
为了方便连接,我把stm32插在了PCB转接板上。PCB转接板上留出了串口通信端子。
在测试CH340通过PCB板给STM32供电并进行串口通信时,
CH340模块通过USB连接电脑,另一端连接到STM32。
预期:STM32正常亮灯并且OLED屏幕正常显示。
但是遇到如下的奇怪问题:
当STM32不连接ST-LINK时,STM32的灯不亮;
当连接ST-LINK时,即使ST-LINK不插电,灯也亮了。为什么?
原因分析
这是一个很典型的硬件供电问题。核心原因在于:你的电路板没有从CH340得到稳定的供电,但ST-LINK却通过其信号引脚(如SWDIO)向电路板反向提供了电压,导致部分电路意外得电。
- 电路板主供电(来自CH340)可能中断
STM32的灯不亮,最直接的原因就是5V电源没有成功送到板子上。
-
CH340模块本身可能并没有输出5V :你可以用万用表测量一下CH340模块上
VCC引脚与GND之间的电压。如果是0V,说明CH340没有向外供电。 -
CH340与电路板之间的5V连线可能存在虚接或断开 :检查一下连接
CH340 VCC到PCB 5V的线是否牢固。
- ST-LINK正在"倒灌"供电
当ST-LINK通过排线连接到你的PCB时,即使没有外接电源,它也可能通过信号线(如SWDIO或SWCLK)的高电平状态 ,向STM32的IO口保护二极管注入少量电流。这个电流虽然微弱,但足以点亮板上功耗很低的LED指示灯,造成"设备已启动"的假象。这种现象被称为漏电或倒灌。
ST-LINK内部的上拉电阻或它之前被其他设备供电后的残余电压,都可能导致这种情况。
解决方案
建议按以下顺序排查和解决:
第一步:验证CH340的供电能力
-
断开ST-LINK,确保电路板上只连接了CH340模块。
-
用万用表测量CH340模块上的
VCC和GND之间的电压。应为稳定的 5V。 -
测量PCB上STM32的
5V和GND引脚之间的电压。如果为0V,说明CH340到PCB之间的5V线路中断。
第二步:检查共地与接线
确保CH340的 GND 与PCB的 GND 已用导线直接相连。如果没有可靠的共地,即使有电压,电流也无法形成回路,电路无法工作。
第三步:预防"倒灌"(推荐操作)
为了防止ST-LINK在不供电时干扰电路或损坏器件,建议采取以下措施:
-
养成好习惯 :在对电路板进行调试或供电操作时,优先连接主电源(如CH340的USB线),确认LED亮起后,再连接ST-LINK进行程序下载或调试。拔掉ST-LINK时,也应先断开调试器,再断开主电源。
-
切断倒灌路径(硬件修改) :如果你经常需要在不供电时连接ST-LINK,可以在PCB设计或连线中,在ST-LINK的
SWDIO或VCC引脚上串联一个低压降的肖特基二极管(如1N5819),利用其单向导电性,阻止电流从ST-LINK流向STM32。这是比较稳妥的硬件解决方案。
第四步:检查STM32板上的供电跳线
如果你使用的是标准的Blue Pill开发板,检查板上的供电跳线(LDO选择) 是否设置正确。通常有一个跳线帽用于选择系统电源是从 5V 引脚输入还是从 USB 接口输入。要使用外部5V供电,请确保跳线帽连接的是 5V 和 LDO。
结果验证
| 测试状态 | CH340连接 | ST-LINK连接 | 观察结果 | 结论判断 |
|---|---|---|---|---|
| 正常 | ✅ 连接且USB上电 | ❌ 断开 | STM32 LED点亮 | ✅ CH340供电正常,ST-LINK无关 |
| 异常 | ✅ 连接但USB未上电 | ✅ 连接 | STM32 LED点亮 | ⚠️ 存在倒灌现象,需纠正 |
| 异常 | ✅ 连接且USB上电 | ❌ 断开 | STM32 LED不亮 | 🔧 CH340供电线路故障 |
最后,如果你能用万用表测量一下CH340模块上 VCC 与 GND 的电压,以及PCB上 5V 与 GND 的电压,这样就能更快锁定问题所在。
问题2.
STM32是否与PCB板共地?如果两者没有共地,会不会出现上述现象?
是的,如果没有共地,100%会出现你说的这种现象:CH340供电时STM32不工作,但一插上ST-LINK,灯反而亮了。 这背后的核心原因很简单:没有共地,电路就没有形成完整的电流回路。
如何判断是否共地?
判断方法非常简单,最可靠的就是用万用表测量电阻或通断。
-
方法一:电阻档测量
将万用表调到 电阻档(Ω) 或 通断档(带蜂鸣器符号) 。一支表笔点住 CH340模块上的GND ,另一支表笔点住 STM32板上的GND 。如果蜂鸣器响,或电阻值显示为 0Ω(或非常接近0),说明它们已经共地。
-
方法二:电压档测量
给CH340模块通电,用万用表直流电压档(DCV) ,一支表笔点住 STM32的GND ,另一支表笔点住 CH340的GND 。理论上,两点之间没有电压差,读数应为 0V。如果有电压读数,说明它们没有连接到一起。
没有共地,为什么ST-LINK一插反而亮了?
这是典型的电流回路借用 现象。你的PCB通过CH340的USB线连接到电脑,但很可能只连接了VCC(5V)线,GND线没有接。此时,从CH340到STM32的电力传输路径是不完整的,就像一个水池接了进水管却忘了接回水管,水无法流动,所以灯不亮。
当你插上ST-LINK时,ST-LINK的 GND 线 通过调试接口的线缆(通常是 20-pin 排线或 4-pin 连接线)连接到了你的PCB GND,而ST-LINK的USB端又连接到了电脑的GND。这时,ST-LINK的GND为你的PCB和CH340之间提供了一个额外的"回路通道",相当于把断了的水管重新接上了。于是,电流就能从CH340的VCC流出,经过STM32,点亮LED,再经过ST-LINK的GND线流回电脑,完成回路,所以灯就亮了。
这也可以解释为什么ST-LINK即使没有单独插电(其内部电路未激活),仅凭GND线就能让灯亮起来------因为在这种情况下,ST-LINK只是充当了一根导线(GND线)的角色,电力来源仍然是CH340模块的USB口。
总结与建议
| 现象 | 根本原因 | 解决方案 |
|---|---|---|
| 只接CH340,灯不亮 | CH340的GND没有接到STM32的GND,回路中断 | 补接GND线 |
| 同时接CH340和ST-LINK,灯亮了 | 电路通过ST-LINK的GND线意外接通了回路 | 这是偶然的"假好"现象,不能依赖 |
| 排查方向 | 优先检查CH340与PCB之间的GND线是否连接 | 用万用表通断档验证 |
用万用表测量一下CH340模块的GND和STM32板的GND之间的通断。如果确认没有连接,只需要补上一根GND线,再接上CH340的VCC,STM32就应该能正常启动并点亮LED了。