当前位置:首页 > > 嵌入式微处理器
[导读]血案现场描述: 程序下载到程序之后,没有正常运行。 怀疑下载过程或者程序出现问题,但是同样的工具,同样的程序,下载到另一块单片机没有任何问题。

血案现场描述:

程序下载到程序之后,没有正常运行。
怀疑下载过程或者程序出现问题,但是同样的工具,同样的程序,下载到另一块单片机没有任何问题。
那么问题出在哪?

方法尝试:

遇到诡异的问题时,建议直接在线调试。
因为下载过程是正常的,说明调试器可以正常连接单片机,同时单片机也可以正常工作,否则调试器无法连接单片机并下载。
(通过以下界面,可以查看调试器是否已连接,包含调试器的产品序列号,固件版本等,右边窗口表示连接的单片机芯片 ID 信息,目前这个界面因为没有调试器,没有相关信息)



因为调试器可以正常连接芯片,那么进入在线调试模式就是顺理成章的事情了。 当你在线调试时,你会发现如下窗口:
(该图是一个群友的截图,放在这里方便描述)

这个工程下载的工程应该是正确的,MDK 也可以正常设置断点位置。
但奇怪的是,程序竟然没有停在断点处。这是个很诡异的问题。
同时这个现象也解释了为什么程序工作不正常,既然程序没有运行到 main 函数,那么肯定无法正常工作。
有经验的工程师应该都知道,main 函数并不是单片机运行的第一条指令,所以我们就会怀疑是否是中断向量表有问题(第一条指令地址存放在中断向量处)。
但是根据前面所说,这个程序下载到别的单片机是正常运行的,所以可以排除这个原因。
那么这个问题到底是怎么回事?
我们其实可以从调试截图中得到另一个信息,单片机在 0x1FFFxxxx 地址处运行(正常应该在 0x0800xxxx)!!!



并且当你单步运行时,你会发现汇编指令是可以执行的。同时我们可以看到汇编指令是正常的,并不都是 0 或者 0xff,这些数据能够被解析器正确解析成汇编指令。
这就说明一个问题,单片机确实在运行指令,只不过,我们无法通过 MDK 看到源码,也无法进行源码级别的调试。
分析到这里,有经验的道友应该有点方向了。
在单片机中,还有什么代码是可以被执行,我们用户又没有源码的?
没错,就是芯片生产时固化在单片机内部的 ISP 程序。
很多时候,当我们没有合适的调试器更新程序时,我们会选择使用串口下载程序。 并且我们很清楚如何通过设置 boot0 引脚来完成升级,我们也很清楚单片机中有一段代码专门干这事,而每一本芯片参考手册里也都写了如何使用串口升级。

但是我们却不知道这段程序到底位于哪里?我们无法亲眼看到这段程序执行并把我们的程序下载到单片机中。
所以当我们看到问题截图时,我们无法第一时间明白:单片机正在执行串口升级程序。
(事实上,我们可以从参考手册看到系统存储地址的空间)

到此,我们应该知道单片机为什么不能正常工作了,因为它跑错地方了! 那为啥会运行到系统存储器去了呢?
肯定和开机时 boot 引脚电平有关。

问题解决:

既然定位到 boot 引脚电平可能有问题,那么就可以通过检查 boot 情况来确定问题。
最终那位群友说是因为贴片时贴错了位置,导致应该设置为低电平却设置成高电平导致。
确实,这个群友经过我的提醒定位到问题了,但是现场情况可能比那位群友的要糟糕。
比如,鱼鹰在第一次遇到这个问题时,也是出现了同样的现象,但是那时的单片机 boot0 使用万用表检测的电压确实是低电平,但它还是到系统存储区执行了(那时并不知道这是 ISP 程序,只知道执行位置错了,当问题解决了,鱼鹰才晓得这段代码是干啥的)。
一般人遇到这种问题,可能就不知所措,开始继续怀疑是不是自己软件的问题了。但鱼鹰不同,摸爬滚打多年,经验丰富(自夸,哈哈),坚信自己的判断:一定是 boot 0 引脚问题。
所以,鱼鹰拿来示波器(为什么要使用示波器?我们要知道,万用表只能检测出平均的电压,瞬间的电平变化,万用表是无法发现的),从上电开始观察。
因为问题复现率很高,鱼鹰很快通过示波器的单次触发功能发现了在上电那一刻,boot0 引脚会突然出现一个高电平,如果此时刚好是单片机采样 boot0 的时刻,那么单片机进入串口下载程序也就不奇怪了。
到此,身为软件工程师的责任结束了,我们已经定位到有异常电平导致单片机工作不正常,此时就要由硬件工程师上场分析为什么会出现这个异常电平了。
至于异常电平是如何产生的,又是如何解决的,就不是我们软件工程师要了解的了,毕竟我们不是专业的。

总结:

以上问题,在第一次遇到时,鱼鹰确实一脸懵逼,但使用在线调试这个大杀器,再结合扎实的基础,解决起来也不是那么困难。但是对于其他人而言,可能就是一件毫无头绪的事情,可能尝试各种方法还是一无所获,毕竟其他硬件都没有问题,只是 boot 引脚电平问题,而我们平时一般不会关注它。
正因为如此,每次遇到这种截图,鱼鹰都是让他们检查boot引脚再说。
而今天鱼鹰记录这个问题,就是希望让更多人可以知道这个事(求转发),从而更快的定位问题。
希望今天这篇笔记对你有所启发,咱们下期再见!
END

来源:鱼鹰谈单片机,作者:鱼鹰Osprey

免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

嵌入式ARM

扫描二维码,关注更多精彩内容

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭