[STM32]从零开始的STM32 DEBUG问题讲解及解决办法

embedded/2025/3/1 23:36:51/

一、前言

        最近也是重装了一次keil,想着也是重装了,也是去官网下载了一个5.41的最新版,在安装和配置编译器和别的版本keil都没太大的区别,但是在调试时,遇到问题了,在我Debug的System Viewer窗口中没有GPIO,IIC,SPI等寄存器。刚遇到的时候还是比较疑惑的,然后去网上找了比较多的资料,发现大部分的办法都是将魔术棒下的Target下方的“Use Custom File”打勾,然后选择一个SFR,听起来是非常简单,但是,我根本就没这个SFR文件啊!当然,这是遇到的第一个Debug中的问题,然后就是,我每次调试一步,箭头走过的地方就变成绿色,代码也会跑到奇怪的地方去。最后就是,代码卡死在汇编的“BX  R0”处。以上就是我在使用Debug时遇到的问题,在本次教程中,我会教大家如何一一解决上面的问题,如果你准备好了,那就让我们开始吧!

二、谁适合本次教程

        在我之前的教程中,应该告诉过大家,优秀的代码是通过反复的调试得来的,只盯着代码看是很难看出问题的。所以,在嵌入式开发中,调试可以说是一个非常重要的技能。如果你是一名嵌入式小白,你仍然可以收藏本文章,以备不时之需。如果你是一名嵌入式大佬,也可以通过这篇文章拓宽自己的知识面。所以,总的来说,不管你嵌入式基础如何,都可以观看本篇文章,在以后遇到这样的问题以后能够自己进行解决。

三、Debug相关问题及解决方案

        上面我也提到了我在调试的时候遇到的三个问题。现在我们就一一来说明问题并且解决问题吧!

1.System Viewer不显示外设寄存器

        这个问题是出现在我使用寄存器去配置GPIO口时出现的,因为最近在准备一篇讲解GPIO相关寄存器的文章,我在调试时就发现,我无法在System Viewer窗口找到我要调试的寄存器,具体页面如下:

可以看到,我的System Viewer窗口中只有“Core Peripherals”并没有其它的寄存器,这就非常奇怪。在网络上的方法都是将下面图中的“Use Custom File”的勾上:

然后选择一个SFR文件。我在选择SFR文件的时候,发现我连别的文章中描述的路径都没有更别说这个文件了。后面找了半天,找到了一些svd文件。将这些文件选中以后,发现也不行。

这里从我自己的角度出发,推断问题的话,我认为是我的keil版本太高了所以不存在其它文章中描述的路径和文件。当然,问题已经出了,现在最主要的就是解决问题。现在我们就一起来看看吧!

在寻找了大量的方法之后,找到了一个有效的方法,因为我们不是没有SFR文件吗?那就索性自己生成一个文件。这里生成SFR文件会用到keil内部的一个工具,这里我们先去到keil的安装路径,可以看到以下文件和文件夹:

这里我们是使用原本的SVD文件来生成一个SFR文件,这里先带大家找一下SVD文件在哪儿,这里我们先进入keil安装目录下的“Keil”文件夹:

进来以后,就能看到我们已经安装的芯片包对应的文件夹:

这里每种芯片包对应的调试文件不一样,所以这里大家要找到自己要调试的芯片的文件夹,这里我调试的是STM32F1系列的芯片,所以,我就进入“STM32F1xx_DFP”,进入以后,就能看到一个版本号的文件夹:

进入这个版本号的文件夹就能看到下面的文件和文件夹了:

这里我们进入这个文件夹下的SVD文件夹:

进入以后,就能看到许多SVD为后缀的文件了,并且还分了芯片的型号,这就是我们要找的SVD文件了,后面我们就用这些SVD文件来生成SFR文件:

这里大家记住这个文件夹的路径,等会儿会用到。

然后我们去找生成SFR文件的工具,这里我们去到keil安装目录下的“UV4”文件夹:

进入UV4文件夹以后,我们往下滑找到“SVDConv.exe”文件:

这就是我们用来生成SFR文件的可执行文件了。下面我们来生成以下SFR文件。这里我们就在“SVDConv.exe”文件所在的目录右键打开终端:

这里我们需要在终端中使用“SVDConv.exe”文件。

我们在终端中输入下面的命令:

./SVDConv.exe D:\MDK-ARM\Keil\STM32F1xx_DFP\2.3.0\SVD\STM32F103xx.svd --generate=sfr

这里的“D:\MDK-ARM\Keil\STM32F1xx_DFP\2.3.0\SVD\STM32F103xx.svd”是我SVD文件的路径,大家换成自己的即可。这里要注意“SVDConv.exe”前面的“./”不可缺少。

输入命令回车以后,我们就可以看到一堆日志过去了:

最后我们看到没有错误,就表示转换已经完成了:

我们这里再次回到UV4文件夹中,我们可以看到,相关的SFR文件已经生成在UV4文件夹中了:

为了方便,我们将其剪切到原本存放SVD文件的文件夹中,如图所示:

完成上面的步骤以后,我们启动我们要调试的工程,然后点击魔术棒:

在魔术棒中,我们将“Use Custom File”打勾:

然后在路径选项中,我们将刚刚生成的SFR文件选中进来:

最后点击OK即可:

然后我们启动调试,就能看到“System Viewer”下已经有寄存器了:

这样,我们System Viewer下没有寄存器的问题就解决了。

2.调试箭头走过后框框变为绿色

        下面这个问题就是,当我们调试时,箭头走过一个地方以后,我们的箭头一栏的框框变为了绿色,并且代码运行逻辑混乱。这里我们直接看效果:

这里我们可以看到,代码运行过去以后,我们的箭头一栏就变为绿色了而且也不知道代码跑到哪儿去了。

这里的解决办法也比较简单,我们这里还是点击魔术棒:

然后点击“Debug”:

这里我们点击“Use”:

完成上面的步骤以后,我们再次调试就没有问题了:

这样,框框变为绿色的问题我们就解决了。

3.调试时程序卡死在BX  R0处

        这个问题是我在调试中点击了复位以后遇到的。假如说,我进入调试,然后第一遍将下面的代码调试到了while处:

然后点击“RST”:

代码回到起始,继续调试,就发现代码调试到“BX  R0”处就不动了:

我们点击这个“x”,就出现了非常神奇的现象,箭头指向了while:

这就非常神奇了。但是解决办法非常简单。我们结束调试。然后点击“魔术棒”:

这里我们将魔术棒中的“Use MicroLIB”打上勾即可。

最后点击“OK”:

完成上面的步骤以后,我们将代码重新全局编译,然后下载到单片机中。我们再次开始调试,发现就没有上面的问题了,不管我们按几次“RST”代码都可以正常运行:

这样,我们程序卡死的问题就解决了。

四、结语

        以前我的教程都比较偏向教程向,但是随着学习的知识越多,遇到的问题也越多,偶尔用自己的文章来记录自己遇到问题以及解决问题的过程,当然,我也希望我的文章能够帮助到大家,那么最后,感谢大家的观看!


http://www.ppmy.cn/embedded/169180.html

相关文章

使用 kubeadm 创建高可用 Kubernetes 及外部 etcd 集群

博客地址:使用 kubeadm 创建高可用 Kubernetes 及外部 etcd 集群 前言 Kubernetes 的官方中文文档内容全面,表达清晰,有大量示例和解析 无论任何情况下都推荐先花几个小时通读官方文档,来了解配置过程中的可选项,以…

深度解读 AMS1117:从电气参数到应用电路的全面剖析

在电子设备的电源管理领域,线性稳压器扮演着至关重要的角色,而 AMS1117 凭借其出色的性能和广泛的适用性,成为众多工程师的热门选择。本文将依据相关资料,对 AMS1117 的特性、应用、电气参数等方面进行详细解读。 一、功能特性概…

【PCIe 总线及设备入门学习专栏 10.1 -- Linux PCIe 驱动框架 之 RK3399 Region1 访问】

文章目录 CPU 读写 region 0 的地址MEM/IO 读写示例配置 Region1 用于内存读写配置 Region 1 地址转换Region 1 地址访问desc registersCPU 读写 region 0 的地址 本篇文章紧接【PCIe 总线及设备入门学习专栏 10 – Linux PCIe 驱动框架】 由【PCIe 总线及设备入门学习专栏 1…

目标检测tricks

A. Stochastic Weight Averaging (SWA) 1. 基本思想 SWA 的核心思想是通过对训练过程中不同时间点的模型参数进行加权平均,从而获得一个更好的模型。具体来说,SWA 在训练过程的后期阶段对多个不同的模型快照(snapshots)进行平均…

一文掌握Charles抓包工具的详细使用

Charles是一款强大的HTTP代理/HTTP监视器/反向代理工具,广泛用于开发和测试网络应用程序。在爬虫开发中,Charles可以帮助开发者拦截、查看和修改HTTP/HTTPS请求和响应,从而更好地理解网络通信过程,分析和调试爬虫程序。本文将详细介绍Charles的安装、配置、基本使用方法以及…

探索微软 Bing 的智能搜索功能:开启智能搜索新时代

在信息爆炸的当下,搜索引擎已成为我们获取知识的得力助手。微软 Bing 凭借智能搜索功能,为用户带来了全新体验。接下来,让我们一同深入了解其智能搜索的独特之处。 一、Bing 智能搜索的核心技术支撑 1.1 自然语言处理(NLP) Bing 运用先进的自然语言处理技术,能深入理解…

代理IP服务器实现游戏多账号管理

去年帮朋友调试海外仓系统时见识了魔幻场景:德国仓显示库存充足,美国仓却持续超卖。查了三天才发现是动态IP导致ERP系统间歇性断联。今天就揭秘跨境企业最头疼的组网问题——怎么用静态IP搭建稳定传输通道。 一、海外仓组网最怕的3个"掉链子"…

osgEarth安装总结

第一步:安装OSG 直接通过git下载源码,使用cmake进行编译, git clone --depth 1 https://github.com/openscenegraph/OpenSceneGraph.git mkdir build cd build cmake .. make sudo make isntall编译过程中缺什么库,就安装什么库 …