STMCU应用过程中与电源相关的案例分享

发布者:乐观向前最新更新时间:2024-02-22 来源: elecfans关键字:STM32  单片机  电源 手机看文章 扫描二维码
随时随地手机看文章

我们在从事STM32单片机的应用开发及调试过程中,往往会碰到各类异常。其中有不少比例的问题跟电源有关。对于一个电子产品而言,电源部分很关键、很重要,但在实际开发调试中,我们偶尔会有意无意的忽视它。这里分享几个实际案例,以加强刺激,加深印象。


毕竟因为电源问题可能导致的异常很多很多,这里分享几个案例算是抛砖引玉,希望大家在调试中对电源方面加以重视。个人认为,往往电源出问题时导致的异常时并不太好分析。多数时候异常表现得更为诡异或没章法。


注:下面提到的案例中异常原因都与电源有关,但并不是说出现类似异常时一定是电源的原因。

下面主要分享五个基于STM32应用的案例。

案例1:STM32芯片的PLL无法正常工作。

有人使用STM32F373开发产品,每次开启PLL都不能正常运行。如果不跑PLL,即运行基本HSI或HSE都没有问题。首先怀疑是软件配置方面的问题,可是即使使用ST官方的标准库和CUBE库中的例程测试也还是有问题。初步确认和检查,供电电源稳定,一度怀疑芯片品质问题。几经反复比较测试验证,后来发现MCU芯片的一个VDDA脚处于悬空状态,可靠接上电源后问题解决。因为PLL的正常工作也离不开VDDA的供电。

案例2:ADC功能异常。

某人使用STM32芯片的ADC功能,发现ADC数据完全不对。反复核对供电、ADC硬件线路、来回验证ADC相关软件配置都没能解决问题,让人抓狂。后来一个个检查芯片的电源脚的连接情况,竟然发现VDDA没有连接电源。

20171025101126910.jpg

案例3:跟USB主机的VBUS引脚相连的GPIO容易坏掉。

某客户反映STM32芯片某管脚使用一阵子后出现电平异常,进一步证实为该管脚坏损。大致使用情况如下面原理图所示:

2017102510112635.jpg

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最大输入电压。

20171025101228182.jpg

所以在开发调试过程中,要注意遵守芯片的各个电源特性参数。

案例4:从STM32F1系列芯片移植到STM32F4时功能异常

曾有工程师反映,之前用STM32F1系列芯片好好的,后来因为产品需要,改用STM32F2或STM32F4芯片后,发现芯片根本不能正常工作,即使最简单的程序也跑不顺畅。后来发现其中有部分异常情况源于使用者没有处理VCAP引脚。STM32F1系列芯片没有外部VCAP引脚,而F2/F4等系列芯片有VCAP脚的,该类脚需外接合适的电容到地,以保证内核供电的稳定。[部分STM8也有VCAP脚]

2017102510122878.jpg

案例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悬空,将其连接电源后,连接正常。

20171025101228898.jpg

注:STM32系列中,有些芯片的电源部分,除了有VDD,VDDA、VDD_USB外,还有专门的VDDIO供电脚。本案例中,客户是从STM32F1系列产品移植过来的,STM32F1系列芯片上是没有VDDIO电源脚的,所以在移植到STM32F0芯片时,硬件设计时忽视了这个VDDIO脚。

顺便说下,整体上讲,STM32不同系列间移植时软硬件的兼容性还是很高的,尤其硬件管脚方面的兼容性。不同系列间相同脚位数的管脚安排的差异大多体现在与电源相关的管脚,这点要特别注意。另外提醒下,部分STM8芯片也有这个VDDIO脚。

案例6:STM32芯片总时不时烧掉。

曾经有人反映在使用STM32开发产品中,时不时发现STM32主芯片坏掉。后来几经测试验证发现是原来前端的电源供电芯片品质不行,一定比例的电源输出器件输出异常导致STM32遭殃,进而影响整个产品功能。

我这里简单罗列以上几个案例,权当提醒。这些案例事后在这里写起来是轻飘飘的几句话,不过在没找到原因之前往往并不那么轻松,往往有些可能折腾很久。

总之,在电子产品开发过程中围绕电源导致的异常可谓不胜枚举,有浅层面点的、也有深层面的。比如上面提到的因为基本的电源管脚或参数导致异常,折腾数小时或数天找到原因后,往往有种打掉牙往肚里吞的味道,不足为外人道。还有就是些相对深层次点的,比方涉及到音、视频产品应用,尤其夹杂无线模块时,整个电路板的PCB LAYOUT的合理布局,尤其电源布局及走线显得尤为重要。记得曾经有个客户,开发车载音频产品,带CD及无线等功能。因为在RADIO某个频点出现较大噪声无法出货,前前后后拖了半年多都没改善,后来通过重新LAYOUT后得以解决。所以对于电子产品的电源部分,电源稳定并连接可靠,这是基本要求。对于有些产品还得考虑如何器件布局、信号及电源走线以及如何抗干扰等,并非连通就了事。


关键字:STM32  单片机  电源 引用地址:STMCU应用过程中与电源相关的案例分享

上一篇:RC522读写程序代码分享
下一篇:存储控制器FSMC与触摸屏介绍

推荐阅读最新更新时间:2024-11-12 18:09

WS2812灯珠(二)-- STM32 SPI+DMA方式驱动
通过硬件SPI的可以很巧妙的模拟出WS2812的通信时序,用spi的8位数据模拟ws281x的一位数据。 要将系统时钟设置为56M,SPI分频数设置为8,则SPI的通信频率为7M,1s/7M≈143ns 即传输一位数据的时间约为143纳秒(ns) 3*143 = 429ns 5*143 = 715ns 符合WS281X芯片的通信时序。 11111000 high level (十六进制:0XF8)表示WS281X的1码 11100000 low level (十六进制:0XE0)表示WS281X的0码 程序头文件部分: 通过宏的方式定义了灯珠个数和WS281X的0码和1码。 #ifndef __WS2812_
[单片机]
教你如何简易轻松的测试开关电源
  在电路设计当中, 开关电源 掌控着开关管的开通和关断的时间比率,在电路中发挥着最基础但是又不可取代的作用。正因为非常重要,所以开关 电源 的测试也变得异常重要。本篇文章就将为大家介绍一种简单轻松的开关电源测试方法。   该方案比较试合输入为AC220V功率输出5W到500W之间、无PFC电路的开关电源供应的简单检测。   需要用到的材料:交流调压器0—300VAC2KW、功率计、电子负载、示波器、60W白炽灯和灯座各一只、脚踏开关两只和电源线材。 电路原理图  工作原理:   连接被测产品,调压器调节到被测产品的输入电压值,当合上K1时电流由灯泡流向被测产品,此时如果被测产品有过流可能,灯泡上的电压降增大会使灯泡发光,经实验
[电源管理]
教你如何简易轻松的测试开关<font color='red'>电源</font>
STM32之USART串口接收数据处理
//原帖http://bbs.elecfans.com/forum.php?mod=viewthread&tid=445463 //在学习过程中发现几处编译错误,并改正; //主要贴出定义、和中断函数部分; uint8_t usart_rx_buf ; //接收缓冲,最大40个字节 uint8_t usart_rx_temporary ; //数据保存暂存器,最多能够缓存40个字节 uint8_t usartrxbuf_pagebuf=0; //最上面接受缓存的页码(5)缓存 uint8_t usart_rd_len=0; //有用信息的数据长度 uint8_t usart_rd_lentemp=0; //用来记录已
[单片机]
单片机跑马灯强化版
程序如下: #include reg52.h #include intrins.h #define uint unsigned int #define uchar unsigned char//宏定义 void delay(uint a);//声明延时函数 uchar c,d; sbit P00=P0^0; sbit P30=P3^0; sbit P31=P3^1; sbit P32=P3^2;//位操作 bit key_flag=0;//位定义 void main() { uint e,h; P00=0; delay(100); P00=1; delay(500); P00=0; TMOD=1;//设定定时器工作方式为1 T
[单片机]
单片机读取EEPROM(AT24C02)
在 arm cortex-m3中 有专门的断电保护寄存器(BKP寄存器) ,在主电源切断或系统产生复位时间时,BKP寄存器仍然可以再备用电源的支持下保持其内容。在实际应用中可以存入重要数据,防止被恶意查看,或用于断电回复。参见 stm32 BKP寄存器操作 。 单片机掉电保护通常可采用以下三种方法: 一是加接不间断电源,让整个系统在掉电时继续工作。 二是采用备份电源,掉电后保护系统中全部或部分数据存储单元的内容; 三是采用EEPROM来保存数据。 由于第一种方法体积大、成本高,对单片机系统来说,不宜采用。第二种方法是根据实际需要,掉电时保存一些必要的数据,使系统在电源恢复后,能够继续执行程序。EEPROM既具有R
[单片机]
AVR单片机的DS1302操作程序
file://---by 变成浪子 //mega16 7.3728M Hz 石英晶体 i CC avr6.31a //相关定义: #define uint unsigned int #define uchar unsigned char #define DS1302_RST 0 //pc0 #define DS1302_SDA 1 //pc1 #define DS1302_SCLK 6 //pc6 //ds1302相关 //DS1302_RST=1 #define Set_DS1302_RST() PORTC|=1 DS1302_RST //DS1302_RST=0 #define Clr_DS1302_RST() PORTC&=
[嵌入式]
关于使用GD32 MCU实现位带操作的指南
MCS-51单片机可以简单的将P1口的第2位独立操作,如P1.2=0;P1.2=1,就是这样把P1口的第三个脚(BIT2)置0置1。对于32位ARM MCU 我们可以像51单片机一样单独的对某个端口的某一个IO单独操作吗?答案是可以的。并且这样就引入了“位带操作”的概念。简而言之,为了能够实现单独的位控制,所以就有了位带这样的操作机制。 ARM Cortex-M3处理器采用哈佛结构,可以使用相互独立的总线来读取指令和加载/存储数据。指令代码和数据都位于相同的存储器地址空间,但在不同的地址范围。程序存储器,数据存储器,寄存器和I/O端口都在同一个线性的4 GB的地址空间之内。这是Cortex-M3的最大地址范围,因为它的地址总线
[单片机]
SMPS电源的EMI来源和测量方法
在星球文章:【EMC专题】电磁兼容--基本概念 中我们讲到EMC(Electro Magnetic Compatibility 电磁兼容)是指电子、电气设备或系统在预期的电磁环境下,按设计要求正常工作的能力。EMC中包括EMI(电磁干扰)和EMS(电磁抗扰度)。 在星球文章:【电子通识】为什么说做产品不是简单的将不同的技术进行搭积木? 一文中,我们说到在做产品时一般情况下是将不同的模块和技术集成起来。对于电子电路,这种集成最重要的方面之一是要确保具有干扰性的组件和易受干扰的电路能够互不影响或者说易受干扰电路能够在一定范围内降低被干扰的影响。 由于SMPS(开关模式电源)是典型的电磁干扰源,因此我们需要知道如何测试电源的EM
[测试测量]
SMPS<font color='red'>电源</font>的EMI来源和测量方法
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved