问题描述
客户反馈STM32F030作为他们产品的控制芯片,在常温下工作是正常的,但是稍微冷冻下就会启动失败,重现率100%,再次加热或者恢复到常温又能正常工作。
此问题已经困扰了客户四五年,一直没有头绪,每次都更换一块芯片就好了,因为客户自己也知道,换芯片时会将其吹下来,必定会加热芯片,这样MCU也就能恢复正常了。但这种办法终究不是解决方法,客户急切想找到原因并解决问题。
分析问题与解决
从客户描述上来看,猜测很大可能是硬件问题,因此带了一块STM32F030-NUCLEO板过去,想着做个芯片交换测试看下结果。
到达客户现场,了解到客户只是使用了内部高速晶振HSI。先使用示波器抓下VDD和NRST的启动波形,在常温下发现并没有明显异常。于是做低温测试,为了对比,基于STM32F030-NUCLEO板了写了一个只使用内部高速晶振HSI , 翻转一个LED灯的程序。
结果显示,STM32F030-NUCLEO板能正常启动,而客户的板子问题重现,再次测量其VDD和NRST的启动波形,发现VDD上电过程中有稍微不规则波形,但感觉不至于导致MCU无法启动。考虑到当前客户板子上的MCU跑的是客户自己的程序,为了统一对比,将客户板子上的MCU烧录成NUCELO板上一样的程序,再次做低温测试,结果显示客户的板子也能正常启动!
于是可以初步断定,此问题与客户自己的软件有关,而与外围电路无关。
接下来对比测试代码与客户自己的代码,并再次做低温测试验证结果,最终发现客户的时钟树配置有个参数有问题:
Figure 1
如上红色代码所示,
RCC_OSCILLATORTYPE_NONE
改成RCC_OSCILLATORTYPE_HSI后,
问题现象明显改善,但经过测试,发现偶尔还会启动不正常的时候。但相对于之前100%可以重现的现象,至少说明之前软件的失误至少是一个因素。
现在问题变成偶尔重现,已经向前迈进一大步。接下来怀疑与硬件有关了,理由是同样的测试软件跑在用户的板子上和跑在NUCELO软件上的结果不一致。
因此接下来首先对于用户的板子的外围电路与STM32F030-NUCLEO板子的外围电路,发现客户MCU的BOOT0引脚是悬空的,于是加上一个外部10K下拉电路,再次测试问题不再重现。
至此,问题解决!
后话
回过头来看这个问题,发现客户知道MCU使用的是HSI,可偏偏在代码中配置时钟树时使用的晶振类型却是NONE !这种问题现在看来是非常低级的问题,但在代码量大,或者代码迭代的过程中,之前写代码的人离职,后续接手的工程师又不能全盘了解所有代码的情况下时就会变成非常束手无策,当碰到此类莫名其妙的问题,特别是无法判断到底是硬件问题还是软件问题的时候,保持清晰的思路是非常重要的。
这里我需要强调的是,最有效的解决方法就是快速找到一个 “参照物”,而ST的DEMO板和示例代码就是在硬件上和软件上扮演这样一个参照物的角色。可以通过MCU交换测试来判断是不是芯片外围电路的问题或者芯片问题,可以使用Cube库下的示例代码,对比其运行结果来判断是否与软件有关。先从大方向明确问题到底是与硬件有关还是与软件有关,然后再做下一步分析,这种方法希望读者能有效掌握。
关键字:STM32F030 低温 无法启动
引用地址:
STM32F030在低温下无法启动
推荐阅读最新更新时间:2026-03-20 10:47
微软承认 Win11 1 月周二补丁导致部分电脑无法启动,原因仍在调查中
1 月 26 日消息,当地时间 1 月 25 日,据外媒 Neowin 报道,Windows 11 今年 1 月的周二补丁更新引发的故障还在扩大。 此前用户曾遭遇应用卡死、程序异常,甚至电脑无法正常关机等问题,据称已通过第二次紧急带外更新(IT之家注:KB5078127、KB5078132)缓解。 但更棘手的新问题随后出现:部分设备更新后直接无法启动,并报出“UNMOUNTABLE_BOOT_VOLUME”错误。 微软通过管理中心的公告证实了这一启动故障:公司收到“少量报告”,用户在安装 1 月 13 日发布的 KB5074109 及后续补丁(包括最新带外更新)后,系统会在开机阶段中断,屏幕显示停止代码“UNMOUNTABLE_B
[家用电子]
37KW变频器调试无法启动的原因
37KW电机配了一个37KW变频器,属于重载启动,下午调试启动不起来。后来我把启动时间由25秒改成了16秒才启动开,求大神指点这样有影响吗!我们来看电友们是怎么说的。 电友A:异步电动机起动困难,正确的思维,应该是起动转矩不夠大!应该记住,起动转矩和电压二次方成正比,和频率成反比!故增加起动转矩的办法只有两种!一是调高端电压。二是调低频率。这就是使用变频比软起的优点!降低起动电流的同时可以调低频率而得到适当的起动转矩。 电友B:原因是25秒起动时由0频起动有很长时一段时间在低频运行,又是重载很容易达到磁饱和而启动失败,而16秒正常是因为频率上升得快一些跟据压频关系反而不容易达到磁饱和就正常了,最好的方法是:把启动频率调高一
[嵌入式]
温度太低机器人无法启动怎么办?
作为国内外应用广泛的化设备,被广泛应用在汽车制造业的点焊、搬运、涂胶、弧焊及辊边工艺中。作为一个复杂的综合系统,由于受到其他相关的制约,工业经历了从困难到灵活应用的转变。针对这些应用情况,对机器人在低温环境工况下存在的问题及解决措施进行了论述。
每到冬天,现场作业的都会面临恶劣天气的影响。相信在这个季节,大家都遇到过温度太低机器人无法启动的问题,除了那些常规的取暖手段让机器人“活”过来,那有没有什么符合我们高端智能设备气质的处理方式呢?
存在的问题
外界环境温度为-10~40℃。目前焊装车间工业机器人处于投产阶段,冬季初期环境温度较低时(未开启车间空调,环境温度低于10℃),部分工业机器人在焊接、搬运
[机器人]
玩转mini2440开发板之【使用nfs无法启动的问题(Virtualbox桥接网络)】
今天晚上研究了一下如何通过super-vivi来使用nfs网络文件系统来启动mini2440开发板,一开始一直无法成功,折腾了半天总算搞定了,总结一下: 1、首先,介绍一下我的开发环境。 物理机:win10; 虚拟机:ubuntu 12.04; 模拟器:virtualbox 5.20; 我的步骤是,按照用户手册的说明,先用super-vivi引导系统,输入q进入命令行模式,然后输入nfs启动命令(如下),最后输入boot启动系统。 param set linux_cmd_line console=ttySAC0 root=/dev/nfs nfsroot=192.168.100.108:/opt/FriendlyARM
[单片机]
STM32开发笔记33:解决USB CDC “该设备无法启动”问题
单片机型号:STM32F401 调试STM32的USB CDC设备已经有好多次了,可以看一下前面写的日志,针对不同的STM32 MCU都进行了调试。原本以为STM32F4会很简单,可处处是坑,已经调到半夜才解决问题,把问题重新梳理。 我现在使用的芯片时STM32F401,在STM32CubeMX中,按照以下步骤设置。 1、设置为全速从设备,不做USB电源检测。 2、使能CDC,其它采用默认设置。 按照上述设置生成的程序,下载到芯片后,接入计算机,默认是这样的 仔细查看细节问题是这样的 找了好久不能解决问题,网上有一种说法是,是更改usbd_conf.h
[单片机]
STM32F030C8T6 STM32F030R8T6 STM32F030 STOP低功耗模式配置 11uA
1、进入睡眠的关键语句 RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI); 2、进入低功耗需要的配置,GPIO配置原则:不回路,不悬空输入。下面是将所有IO输出为0 //输出 GPIOA- MODER = 0x55555555; GPIOB- MODER = 0x55555555; GPIOC- MODER = 0x55555555; GPIOD- MODER = 0x55555555; GPIOF- MODER = 0x55555555;
[单片机]
STM32F030 使用内部时钟和外部时钟
static void SetSysClock(void) { __IO uint32_t StartUpCounter = 0, HSEStatus = 0; /* SYSCLK, HCLK, PCLK configuration ----------------------------------------*/ #if defined (PLL_SOURCE_HSI) /* At this stage the HSI is already enabled */ /* Enable Prefetch Buffer and set Flash Latency */ FLASH- ACR = FLASH_ACR_
[单片机]
STM32F030低功耗之停机模式的进入和唤醒
本人使用的是STM32F030F4P6进行从机低功耗的设计。设计需求是和主机进行状态同步,主机超时不从串口给回馈(主机关机了)从机进入停机模式等待串口来数据进行唤醒(主机开机了)。 1.停机模式介绍 STM32F030F4P6有三个低功耗模式。待机模式下(standby)功耗最低但是需要wake_up引脚上升沿或者RTC闹钟才能进行唤醒,在硬件已经设计好的基础上不满足本次软件设计的需求。然后考虑功耗第二低的停机模式(stop),刚好停机模式能够被任一外部中断包括串口中断进行唤醒。 2.停机模式的进入 停机模式的进入由数据手册可知,需要将SLEEPDEEP寄存器置1,PDDS寄存器置0,还要设置PWR- CR位。这些操
[单片机]