记一次 Keil 硬件调试卡死(不进 main、不显示黄色箭头)

前言

刚刚接触单片机,踩了不少坑,记录其中一个

设备环境:DapLink + STM32F407ZGT6

问题:在使用 Keil5 进行硬件调试时,发现代码总是 “跑飞”,进不了 main.c,似乎陷入死循环,也找不到指示当前运行位置的 “黄色箭头”。

再提供一个不一样的解决办法。

现象分析

期初怀疑是程序自身问题,捞了一个标准的LED跑马灯例程 Download 进去,结果可以运行。但是又 Download 了一次,却不能运行了。

更奇怪的是,大部分时候,按下 Reset 按钮无反应 ,但是偶尔有几次,Reset 之后却能运行。

调试发现,代码是执行到启动文件卡死的,卡在以下代码段:

1
2
3
4
5
6
7
8
9
10
Reset_Handler    PROC
EXPORT Reset_Handler [WEAK]
IMPORT SystemInit
IMPORT __main

LDR R0, =SystemInit
BLX R0
LDR R0, =__main
BX R0
ENDP

同时,用万用表测量晶振两侧对地电压,正常运行时均为为 1.7v 左右(两者相差 0.02v),代码卡死时,两侧均为 0.0v,晶振不起振。

解决方案

在查了一大堆资料,进行了一堆设置之后,发现并没有什么卵用。

但是,不经意间,在插上仿真器的时候,我忘记拔出另一条 USB 线,这次程序一下就成功跑起来了。

此刻,找了半天问题的我心里有一万头草泥马奔过。。。。。

由此看来,可能是供电不足,造成晶振不起振,从而无法初始化。

再插上一条线供电就好了。