最近负责一个项目,用到stm32f4的一款高性能芯片。研发过程中遇到一个很诡异的现象,前前后后折腾了两三天,最后才搞定。由于是新手,经验不足,排故过程很纠结~~
现象如下:
1.采用JLINK下载程序后,断电让其上电重新启动,发现有时可以正常运行,有时候无法正常运行,大约每两、三次就有一次无法正常上电启动。
2.通过JLINK调试程序,每次均正常运行。太诡异了!
发现问题后开始定位原因。首先考虑是BOOT启动出问题了,stm32f4启动方式分三种:User FLash、SystemFlash和EmbeddedSRAM,通过BOOT0和BOOT1管脚配置。程序正常运行时从User FLash启动,如果BOOT0和BOOT1配置不正确,会导致无法正常运行;而通过JLINK调试程序,程序直接下载到SRAM中运行,不存在此问题。于是,通过万用表测BOOT0和BOOT1管脚电平,都是低电平,没问题!于是,基本排除此原因了。
其次,考虑电源供电不稳定问题。通过万用表测量各个模块电压,发现电压均正常值。那也有可能是系统上电时刻,由于负载变化,导致电压跳变,之后电压又稳定了,所以测量不出来。通过示波器捕捉电压变化,未发现明显的异常跳变。通过万用表测电流为88mA,并不大。初步认为不是电源供电问题导致。
然后,考虑是否是由于复位信号不稳定的原因。板子采用了外置复位芯片,上电后会产生复位信号,此提供给处理器、蓝牙等模块。由于JLINK调试时会自动产生一个复位信号,让系统恢复默认状态,然后程序开始运行,因此调试下程序应该都能正常启动。但是如果程序断电后上电启动,如果复位信号过短或者不稳定,有可能导致无法正常启动了。完美的解释!哈哈,那一瞬间仿佛找到问题所在了。程序无法正常启动时,RESET信号手动接地(给一个低电平脉冲),处理器都开始工作了!这进一步验证了我的推断。于是锁定是复位信号不稳定导致的,开始折腾复位信号,通过示波器观察、隔离复位信号、加滤波电容、换复位芯片等方法进行定位。最后发现复位信号感觉也没有什么问题,真是怪了!纠结~~~~
后来有人建议是不是晶振不稳定。但是,晶振不稳定,调试程序时也应该出现同样现象啊,道理上解释不通啊。无解啊~~~
后来求助同事,他是电子硬件方面的专家。我们几人仔细琢磨了板子的原理图和实验现象后,他突然问你的BOOT0怎么没有接电阻到公共地啊?我说接了吧,之前还用万用表量过电平,是低电平。他说不对啊,就是没接地啊。我才猛地想起来,板子是另外一个同事焊的,交到我手里时说板子已经仔细检查过了,没问题。当时,由于项目紧张,就没有再仔细核实。我再仔细一看,确实没接地,也就是悬空状态!而之前测电压是低电平,有可能是由于下拉电阻的作用。崩溃了!这么粗心,居然没有自己检查。赶紧焊电阻接地,重新上电,发现正常了。测试了三四十次,都是正常的。看来这次真正找到原因了,就是由于BOOT0悬空而导致的。BOOT0悬空时,其状态是不确定的,会导致程序无法从UserFlash中正常启动,就可能出现时好时不好的现象了!哎,原来是这样。终于长嘘了一口气。
问题终于解决了,但是还是有一点无法理解:既然是BOOT0悬空引起的,但是为什么将处理器的RESET信号手动接地(给一个低电平脉冲),处理器又正常运行了?难道是因为再次复位上电重启时,恰好BOOT0又被识别为低电平?RESET信号影响了BOOT0的状态?看来还需要进一步做实验,才能解答此疑惑。
关键字:stm32 处理器 调试模式 故障排查
引用地址:
stm32处理器调试模式下运行正常,上电自启动后运行不正常的故障排查分析
推荐阅读最新更新时间:2024-11-12 08:25
寒武纪发布首款AI云端芯片和第三代终端处理器
今天下午, 寒武纪 在上海举办2018产品发布会,正式发布了新一代终端 IP 产品,采用7nm工艺的终端芯片Cambricon 1M、首款云端智能芯片MLU100以及搭载了MLU100的云端智能处理计算卡。下面就随网络通信小编一起来了解一下相关内容吧。 发布第三代终端 AI 芯片 寒武纪 1M 寒武纪 在会上发布了第三代机器学习终端处理器1M,其性能比此前发布的寒武纪1A高10倍。配置方面,寒武纪1M使用台积电7nm工艺生产,其8位运算效能比达5 Tops/watt(每瓦 5万亿次运算)。寒武纪提供了2Tops、4Tops、8Tops三种尺寸的处理器内核,以满足不同场景下不同量级智能处理的需求,寒武纪
[网络通信]
STM32-24位AD7799驱动之手册代码详解,支持模拟SPI和硬件SPI
1.AD7799介绍 AD7799结构图如下所示: 其中REFIN参考电压建议为2.5V, REFIN电压低于0.1V时,则差分输入ad值就无法检测了,如下图所示: 注意: 如果REG_CONFIG的REF_DET开启的话,那么输入AD值电压低于0.5V时,则差分输入ad值就无法检测了,如下图所示: 2.AD7799差分信号的输入模式 如下图所示,差分输入电压有3种模式: 注意: 单端输入电压(AIN-接地,只有正电压)则支持任意范围,比如In-Amp模式下,单端输入如果为10mv的话,也能检测到. 2.1 Unbuffered Mode非缓冲模式 该模式可测的AD值可以在 -30mV ~ (AVDD+30
[单片机]
8纳米和7纳米你选谁?三星S9两款处理器曝光
据外媒TheInvestor报道,三星Galaxy S9明年依旧是搭载两款处理器,分别是8nm的Exynos和7nm的骁龙845。由于涉及到全网通等,三星国行版本都是高通处理器,所以用户不用太担心。 三星S9两款处理器曝光(图片来自baidu) 报道称,8nm工艺是三星自己出品的Exynos,至于7nm工艺测试来自台积电,主要是明年只有台积电能实现7nm工艺量产。另外,Digitimes也报道,高通将基带的代工转交给台积电。 虽说明年三星在制程工艺上落后台积电,但是三星已经在积极推进6nm工艺的量产工作。而且三星为了上马6nm工艺,今年要买2台EUV极紫外光刻机,即最先进的ASML NXE3400B型号,每台售价达1
[手机便携]
探究STM32、FreeRTOS低功耗设计思路和原理
如今电池供电的产品很多,电池供电通常设计到一个问题,那就是低功耗。 本文为大家讲讲基于STM32、FreeRTOS实现低功耗思想和原理。 一 低功耗设计常规思路应用中使用的 RTOS 一般采用基于时间片轮转的抢占式任务调度机制,一般的低功耗设计思路如下:1. 当 Idle 任务运行时,进入低功耗模式;2. 在适当的条件下,通过中断或者外部事件唤醒 MCU。 但是, 从第二点可以看出,每次当 OS 系统定时器产生中断时,也会将 MCU 从低功耗模式中唤醒,而频繁的进入低功耗模式/从低功耗模式中唤醒会使得 MCU 无法进入深度睡眠,对低功耗设计而言也是不合理的。 在 FreeRTOS 中给出了一种低功耗设计模式 ——Tickl
[单片机]
STM32中断优先级的理解与使用
一、中断的分类: 全局中断就是在运行程序的任何一部分都可以立即执行中断服务,如果是在程序的中断才添加开放中断指令就是说有条件满足中断的时候,也只能在执行允许中断的指令后才执行中断服务。 外部中断是可以屏蔽的中断,也就是说,利用中断控制器可以屏蔽这些外部设备 的中断请求。 内部中断是指因硬件出错(如突然掉电、奇偶校验错等)或运算出错(除数为零、运算 溢出、单步中断等)所引起的中断。 STM32F10的每个IO口都可以设为外部中断,最多可设19个,16+3=19 在设计硬件的时候要注意,不要将外部中断连接到PA 、PB1]、PC 等,这样的话处理器只能选择一个作为中断源。 另外: EXTI线
[单片机]
STM32笔记(五)---中断应用
一、异常类型 1-1 定义说明 F103 在内核水平上搭载了一个异常响应系统, 支持为数众多的系统异常和外部中断。其中系统异常有 8 个(如果把 Reset 和 HardFault 也算上的话就是 10 个) ,外部中断有 60个。除了个别异常的优先级被定死外,其它异常的优先级都是可编程的。有关具体的系统异常和外部中断可在标准库文件 stm32f10x.h 这个头文件查询到,在 IRQn_Type 这个结构体里面包含了 F103 系列全部的异常声明。 表格 1 系统异常清单 二、NVIC简介 2-1 定义说明 NVIC 是嵌套向量中断控制器,控制着整个芯片中断相关的功能,它跟内核紧密耦合,是内核里面的一个外设。但是各个芯
[单片机]
STM32Note初识单片机
单片机是如何构成的呢? 单片机,集成的微型计算机系统(也称MCU),由CPU、内存、I/O接口电路等部分组成,把单片机比做人的话,CPU负责思考,内存负责记忆,而接口电路则像神经系统连接着大脑和身体,完成信号的传导和各种动作的实现。 单片机基本运作流程 尽管我们说CPU相当于大脑,进行思考等过程,但它并不能像人脑一样自发主动的进行思考。事实上,CPU只能依次读取并执行预先存储在内存中的指令组合,而且,这些指令都是一些非常基本的运算以及读写操作,不过,这些简单指令的组合却足以完成非常复杂的功能。 从上图可以看出,单片机运作主要是由CPU读取内存中的指令,完成对存储器中数据的运算或者通过I/O接口完成对外设的操作,而上图也反映
[单片机]
GD32单片机和STM32单片机的区别
一、前言 什么GD32? GD32是国内开发的一款单片机,据说开发的人员是来自ST公司的,GD32也是以STM32作为模板做出来的。 所以GD32和STM32有很多地方都是一样的,不过GD32毕竟是不同的产品,不可能所有东西都沿用STM32,有些自主开发的东西还是有区别的。相同的地方我们就不说了,下面我给大家讲一下不同的地方。 二、区别 1、内核 GD32采用二代的M3内核,STM32主要采用一代M3内核,下图是ARM公司的M3内核勘误表,GD使用的内核只有752419这一个BUG。 2、主频 使用HSE(高速外部时钟):GD32的主频最大108M,STM32的主频最大72M 使用HSI(高速内部时钟):GD32的主频最大10
[单片机]