当前位置: 首页 > news >正文

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

一、前言

        最近也是重装了一次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”代码都可以正常运行:

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

四、结语

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

相关文章:

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

一、前言 最近也是重装了一次keil,想着也是重装了,也是去官网下载了一个5.41的最新版,在安装和配置编译器和别的版本keil都没太大的区别,但是在调试时,遇到问题了,在我Debug的System Viewer窗口中没有GPIO&…...

创建Order项目实现Clean Hexagonal架构

创建Order项目实现Clean & Hexagonal架构 前言 在上一节中,讲到了Clean & Hexagonal架构的理论部分,并且通过图形解释了从MVC架构到清洁架构到演变。下面我们通过创建项目的方式来进一步理解Clean & Hexagonal架构。 1.项目创建 1. 项目…...

【算法】图论 —— Floyd算法 python

洛谷 B3647 【模板】Floyd 题目描述 给出一张由 n n n 个点 m m m 条边组成的无向图。 求出所有点对 ( i , j ) (i,j) (i,j) 之间的最短路径。 输入格式 第一行为两个整数 n , m n,m n,m,分别代表点的个数和边的条数。 接下来 m m m 行,每行三…...

YOLOv5 + SE注意力机制:提升目标检测性能的实践

一、引言 目标检测是计算机视觉领域的一个重要任务,广泛应用于自动驾驶、安防监控、工业检测等领域。YOLOv5作为YOLO系列的最新版本,以其高效性和准确性在实际应用中表现出色。然而,随着应用场景的复杂化,传统的卷积神经网络在处…...

基于fast-whisper模型的语音识别工具的设计与实现

目录 摘 要 第1章 绪 论 1.1 论文研究主要内容 1.1.1模型类型选择 1.1.2开发语言的选择 1.2 国内外现状 第2章 关键技术介绍 2.1 关键性开发技术的介绍 2.1.1 Faster-Whisper数据模型 2.1.2 Django 第3章 系统分析 3.1 构架概述 3.1.1 功能构架 3.1.2 模块需求描述 3.2 系统开…...

python中单例模式应用

数据库连接池单例模式 1. 为什么使用单例模式 创建数据库连接是一个昂贵的过程(涉及网络通信、认证等)。单例模式的连接池可以在程序启动时初始化一组连接,并在整个生命周期中重用这些连接,而不是每次请求都新建连接。同时还可…...

鸿蒙HarmonyOS 开发简介

鸿蒙开发入门教程 一、技术简介 鸿蒙操作系统(HarmonyOS)是面向万物互联时代的全场景分布式操作系统,具备分布式软总线、分布式数据管理、分布式任务调度等核心能力,能让设备间实现无缝连接与协同,为用户提供统一、流…...

2. 在后端代码中加入日志记录模块

1. 说明 日志模块基本上是每一个软件系统开发中必不可少的,主要用于持久记录一些代码运行中的输出信息,辅助编码人员进行代码调试,以及后期软件上线运行报错分析。在Python中加入日志模块比较简单,只需要借助logging和RotatingFi…...

Linux软硬链接

目录 什么是软链接?软链接的特点软链接的原理什么是硬链接硬链接的特点硬链接的原理 什么是软链接? 在Linux操作系统中,文件系统的核心概念之一是链接,包括软链接(符号链接)和硬链接。这些链接提供了访问文…...

Kali换源

【刚忘了】 下面这个 里面的一删放就好了 deb http://mirrors.aliyun.com/kali kali-rolling main non-free contribdeb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib...

Java 大视界 -- Java 大数据机器学习模型的可解释性增强技术与应用(107)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...

SYN Flood的攻击原理及防御

SYN Flood的攻击原理 TCP 协议是一个可靠的、面向连接的流协议,由于 TCP 协议是建立在 IP 协议这种面向无连接的协议,所以 TCP 协议必须自己来维护连接的状态 TCP的三次握手过程 建立连接三次握手过程如下: 客户端需要发送一个 SYN包 给服…...

Javaweb数据库多表查询 内连接 外连接 子查询

内连接 外连接 左外连接,左边是全部表 表名,即使没有匹配右边的数据,也要查询出来 子查询 案例 1.没有说所有的部门,所有的员工,用内连接(隐式内连接)...

绕过 RAG 实时检索瓶颈,缓存增强生成(CAG)如何助力性能突破?

编者按: 你是否曾经遇到过这样的困扰:在开发基于 RAG 的应用时,实时检索的延迟让用户体验大打折扣?或者在处理复杂查询时,检索结果的不准确导致回答质量不尽如人意? 在当前大语言模型应用大规模落地的背景下…...

Nginx系列09(Nginx 与其他服务集成、实战项目)

目录 Nginx 与其他服务集成 实战项目 Nginx 与其他服务集成 Nginx 与 Tomcat 集成 概念:将 Nginx 作为前端代理服务器,Tomcat 作为后端应用服务器。Nginx 负责处理静态资源请求、负载均衡以及将动态请求转发给 Tomcat,Tomcat 则专注于运行…...

nvidia驱动更新,centos下安装openwebui+ollama(非docker)

查看centos内核版本 uname -a cat /etc/redhat-release下载对应的程序(这个是linux64位版本通用的) https://cn.download.nvidia.cn/tesla/550.144.03/NVIDIA-Linux-x86_64-550.144.03.run cudnn想办法自己下一下,我这里是12.x和11.x通用的…...

手机端抓包大麦网抢票协议:实现自动抢票与支付

🚀 手机端抓包大麦网抢票协议:实现自动抢票与支付 🚀 🔥 你是否还在为抢不到热门演出票而烦恼?本文将教你如何通过抓包技术获取大麦网抢票协议,并编写脚本实现自动化抢票与支付!🔥 …...

Vue3实现文件上传、下载及预览全流程详解(含完整接口调用)

文章目录 一、环境准备1.1 创建Vue3项目1.2 安装依赖1.3 配置Element Plus 二、文件上传实现2.1 基础上传组件2.2 自定义上传逻辑(Axios实现) 三、文件下载实现3.1 直接下载(已知文件URL)3.2 后端接口下载(二进制流&am…...

普通人高效使用DeepSeek指南?

李升伟 整理 DeepSeek(深度求索)作为一款智能搜索引擎或AI工具,普通人可以通过以下方式高效利用它,提升学习、工作和生活效率: --- ### **一、基础功能:精准搜索** 1. **明确需求提问** 用自然语言…...

基于JAVA+Spring+mysql_快递管理系统源码+设计文档

文末获取源码数据库文档 感兴趣的可以先收藏,有毕设问题,项目以及论文撰写等问题都可以和博主沟通,尽最大努力帮助更多的人! 摘 要 随着物流行业信息化的深入使得物流过程中货物的状态和变化透明化,现代信息化的接入使…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...

Java 加密常用的各种算法及其选择

在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...