我们在从事STM32单片机的应用开发及调试过程中,往往会碰到各类异常。其中有不少比例的问题跟电源有关。对于一个电子产品而言,电源部分很关键、很重要,但在实际开发调试中,我们偶尔会有意无意的忽视它。这里分享几个实际案例,以加强刺激,加深印象。
毕竟因为电源问题可能导致的异常很多很多,这里分享几个案例算是抛砖引玉,希望大家在调试中对电源方面加以重视。个人认为,往往电源出问题时导致的异常时并不太好分析,多数时候异常表现得更为诡异或没章法。【注:下面提到的案例中异常原因都与电源有关,但并不是说出现类似异常时一定是电源的原因。】
下面主要分享几个基于STM32应用的案例。
案例1:ADC功能异常
某人使用STM32芯片的ADC功能,发现ADC数据完全不对。反复核对供电、ADC硬件线路、来回验证ADC相关软件配置都没能解决问题,让人抓狂。后来一个个检查芯片的电源脚的连接情况,竟然发现VDDA没有连接电源。
案例2:STM32芯片的PLL无法正常工作
有人使用STM32F373开发产品,每次开启PLL都不能正常运行。如果不跑PLL,即运行基本HSI或HSE都没有问题。首先怀疑是软件配置方面的问题,可是即使使用ST官方的标准库和CUBE库中的例程测试也还是有问题。初步确认和检查,供电电源稳定,一度怀疑芯片品质问题。几经反复比较测试验证,后来发现MCU芯片的一个VDDA脚处于悬空状态,可靠接上电源后问题解决。因为PLL的正常工作也离不开VDDA的供电。
案例3:跟USB主机的VBUS引脚相连的GPIO容易坏掉
某客户反映STM32芯片某管脚使用一阵子后出现电平异常,进一步证实为该管脚坏损。大致使用情况如下面原理图所示:
STM32芯片从外部USB主机的VBUS取电。外部VBUS的供电经过一个LDO后再给STM32 MCU供电,同时,MCU的另外一个GPIO【PA9】与外部VBUS直接相连。
这个电路咋看上去貌似没什么问题。但由于外部VBUS 5v电源先要经过LDO再供给MCU,这里就有个延时,而GPIO PA9脚则是与VBUS直连。这就导致接上USB插头的一定时间内,VDD=0v,GPIO PA9的Vin=5v,进而出现VIN[5v]> (VDD+4.0v)的状况,超过了MCU芯片数据手册规定的相应GPIO最大输入电压。
所以在开发调试过程中,要注意遵守芯片的各个电源特性参数。
案例4:从STM32F1系列芯片移植到STM32F4时功能异常
曾有工程师反映,之前用STM32F1系列芯片好好的,后来因为产品需要,改用STM32F2或STM32F4芯片后,发现芯片根本不能正常工作,即使最简单的程序也跑不顺畅。后来发现其中有部分异常情况源于使用者没有处理VCAP引脚。STM32F1系列芯片没有外部VCAP引脚,而F2/F4等系列芯片有VCAP脚的,该类脚需外接合适的电容到地,以保证内核供电的稳定。【部分STM8也有VCAP脚】
案例5:JLINK无法连接STM32目标板
有人使用J-LINK调试STM32F071芯片的板子,通过JLINK与STM32F071目标板进行SWD连接,目标板已经供电。但发现不论是通过J-FLASH还是MDK,JLINK都没法与目标板连接上。
来回检查SWD的4根连接线VDD、SWDIO、SWCLK、GND,没有发现问题。因担心J-LINK驱动版本等问题,建议其使用STLINK进行连接,即使用ST官方的STLINK UTILITY软件工具也无法连接目标板。建议客户核对MCU芯片所有电源及管脚连接情况,最后发现有个负责给GPIO供电的电源脚VDDIO悬空,将其连接电源后,连接正常。
注:STM32系列中,有些芯片的电源部分,除了有VDD,VDDA、VDD_USB外,还有专门的VDDIO供电脚。本案例中,客户是从STM32F1系列产品移植过来的,STM32F1系列芯片上是没有VDDIO电源脚的,所以在移植到STM32F0芯片时,硬件设计时忽视了这个VDDIO脚。
顺便说下,整体上讲,STM32不同系列间移植时软硬件的兼容性还是很高的,尤其硬件管脚方面的兼容性。不同系列间相同脚位数的管脚安排的差异大多体现在与电源相关的管脚,这点要特别注意。另外提醒下,部分STM8芯片也有这个VDDIO脚。
案例6:STM32芯片总时不时烧掉
曾经有人反映在使用STM32开发产品中,时不时发现STM32主芯片坏掉。后来几经测试验证发现是原来前端的电源供电芯片品质不行,一定比例的电源输出器件输出异常导致STM32遭殃,进而影响整个产品功能。
简单罗列以上几个案例,权当提醒。这些案例事后在这里写起来是轻飘飘的几句话,不过在没找到原因之前往往并不那么轻松,有时可能折腾很久才解决问题。