[KEIL]单片机技巧 01
1、查看外设寄存器的值


配合对应的芯片开发手册以查看寄存器及其每一位的意义,可以解决90%以上的单纯的片内外设bug,学会如何通过寄存器的值来排外设上的蛊是嵌入式开发从小白到入门的重要一步,一定要善于使用这个工具,而不是外设出了问题时,一点点的通过表层外设现象排蛊。
2、ARM汇编常用指令集解读

如上图, STM32 的汇编指令(基于 ARM Cortex-M 架构)是调试和底层开发的重要基础。
以下是 STM32 中常用的 ARM Thumb/Thumb-2 汇编指令及其用途:
一、数据操作指令
-
MOV-
作用: 寄存器之间的数据移动或立即数加载
-
示例:
MOV R0, R1 ; R0 = R1 MOV R2, #0x10 ; R2 = 0x10
-
-
LDR/STR-
作用: 从内存加载数据到寄存器(Load)或存储寄存器数据到内存(Store)
-
示例:
LDR R0, [R1] ; R0 = *R1(从地址 R1 加载数据) STR R2, [R3] ; *R3 = R2(将 R2 的值存储到地址 R3)
-
-
ADD/SUB-
作用: 加减运算
-
示例:
ADD R0, R1, R2 ; R0 = R1 + R2 SUB R3, R4, #5 ; R3 = R4 - 5
-
-
AND/ORR/EOR/BIC-
作用: 逻辑运算(与、或、异或、位清除)
-
示例:
AND R0, R1, #0xFF ; R0 = R1 & 0xFF(保留低8位) ORR R2, R3, R4 ; R2 = R3 | R4
-
二、流程控制指令
-
B-
作用: 无条件跳转(Branch)
-
示例:
B label ; 跳转到标签 label
-
-
BX-
作用: 跳转到寄存器指定的地址,并切换指令集(如 ARM ↔ Thumb)
-
示例:
BX LR ; 跳转到 LR 寄存器中的地址(常用于函数返回)
-
-
BL-
作用: 带链接的跳转(保存返回地址到 LR 寄存器)
-
示例:
BL function ; 调用函数 function,LR = 下一条指令地址
-
-
条件分支指令
-
作用: 根据标志位(如 Z、C)跳转
-
常见指令:
BEQ label ; 相等时跳转(Z=1) BNE label ; 不等时跳转(Z=0) BCS label ; 进位标志 C=1 时跳转
-
三、栈操作指令
-
PUSH/POP-
作用: 压栈和出栈操作(保存/恢复寄存器)
-
示例:
PUSH {R0, R1} ; 将 R0, R1 压入栈 POP {R2, R3} ; 从栈中恢复数据到 R2, R3
-
四、标志位操作
-
CMP-
作用: 比较两个值(内部执行减法,更新标志位)
-
示例:
CMP R0, R1 ; 比较 R0 和 R1,更新 Z(Zero)标志
-
-
TST-
作用: 按位与测试(不保存结果,仅更新标志位)
-
示例:
TST R0, #0x01 ; 测试 R0 的最低位是否为 1
-
五、特殊指令
-
CPSID/CPSIE-
作用: 全局中断开关
-
示例:
CPSID I ; 关闭中断 CPSIE I ; 开启中断
-
-
NOP-
作用: 空操作(常用于调试时插入断点或延时)
-
示例:
NOP ; 空操作
-
-
IT(If-Then)-
作用: 条件执行指令块(Thumb-2 特有)
-
示例:
ITE EQ ; If-Then-Else 条件块(EQ 为条件) MOVEQ R0, R1; 如果 EQ 成立,执行此指令 MOVNE R0, R2; 否则执行此指令
-
六、调试场景示例
1. 函数调用与返回
BL HAL_Init ; 调用 HAL_Init 函数,LR 保存返回地址
...
BX LR ; 函数返回
2. 中断服务函数
PUSH {R0-R3} ; 保存寄存器到栈
...
POP {R0-R3} ; 恢复寄存器
BX LR ; 从中断返回
3. 条件分支调试
CMP R0, #10 ; 比较 R0 是否等于 10
BEQ loop_end ; 如果相等,跳转到 loop_end
keil其他技巧
symbols窗口,可以看到每个文件下面包含的函数和成员
寄存器窗口
可以用来查看CPU内部寄存器的使用状态
栈窗口

可以用来查看当前栈内函数调用的使用情况,从图中可以看出在main函数中调用了SystemClock_Config这个函数,紧接着又在SystemClock_Config又调用了HAL_RCC_OscConfig这个函数,可以很清晰的看出函数之间调用的层次关系。
监控变量窗口
![]()

可以将需要观察的变量添加到窗口中去,观察变量值的变化。
内存窗口
![]()

将需要观察的变量拖动到内存窗口中,即可显示当前变量的值。例如 int i =0;将i拖动到内存窗口即可显示当前变量的值,如果在 i 前面加上取地址符 & 即可显示当前变量的地址。地址后,则显示当前地址的值。
相关文章:
[KEIL]单片机技巧 01
1、查看外设寄存器的值 配合对应的芯片开发手册以查看寄存器及其每一位的意义,可以解决90%以上的单纯的片内外设bug,学会如何通过寄存器的值来排外设上的蛊是嵌入式开发从小白到入门的重要一步,一定要善于使用这个工具,而不是外设…...
【网络安全 | 渗透测试】GraphQL精讲二:发现API漏洞
未经许可,不得转载。 推荐阅读:【网络安全 | 渗透测试】GraphQL精讲一:基础知识 文章目录 GraphQL API 漏洞寻找 GraphQL 端点通用查询常见的端点名称请求方法初步测试利用未清理的参数发现模式信息使用 introspection探测 introspection运行完整的 introspection 查询可视化…...
MySQL练习
将安装包下载并上传 方法一 步骤 创建组与用户 [rootlocalhost ~]# groupadd mysql [rootlocalhost ~]# useradd -r -g mysql -s /bin/false mysql 解压安装包 [rootlocalhost ~]# tar xf mysql-8.0.36-linux-glibc2.28-x86_64.tar.xz -C /usr/local/软连接 [rootlocalh…...
Java 8 中,可以使用 Stream API 和 Comparator 对 List 按照元素对象的时间字段进行倒序排序
文章目录 引言I 示例对象II List 按时间字段倒序排序: 使用 `Stream` 和 `Comparator` 排序方法 1:使用 `Comparator.comparing`方法 2:使用 `Comparator.reversed`方法 3:自定义 `Comparator`输出结果III 注意事项**时间字段类型**:**空值处理**:IV 总结引言 案例:在线用…...
【动手实验】TCP半连接队列、全连接队列实战分析
本文是对 从一次线上问题说起,详解 TCP 半连接队列、全连接队列 这篇文章的实验复现和总结,借此加深对 TCP 半连接队列、全连接队列的理解。 实验环境 两台腾讯云服务器 node2(172.19.0.12) 和 node3(172.19.0.15&am…...
【六祎 - Note】SQL备忘录;DDL,DML,DQL,DCL
SQL备忘录 from to : 点击访问源地址...
智能AI替代专家系统(ES)、决策支持系统(DSS)?
文章目录 前言一、专家系统(ES)是什么?二、决策支持系统(DSS)是什么?1.决策支持系统定义2.决策系统的功能与特点3.决策支持系统的组成 三、专家系统(ES)与决策支持系统(D…...
比较Spring AOP和AspectJ
1. 介绍 当前有多个可用的AOP库,这些库必须能够回答许多问题: 它与我现有的或新的应用程序兼容吗?在哪里可以实施AOP?它与我的应用程序集成的速度有多快?性能开销是多少? 在本文中,我们将着眼…...
Spring Boot 异步编程
在 Spring Boot 中,异步编程可以显著提高应用程序的性能和响应能力,特别是在处理一些耗时的操作时。下面将详细介绍 Spring Boot 异步编程中异步方法的使用、线程池配置以及异步任务的监控与管理。 1. 异步方法的使用 步骤 1:启用异步支持 …...
现今大语言模型性能(准确率)比较
现今大语言模型性能(准确率)比较 表头信息:表的标题为“大语言模型性能比较结果”(英文:Table 1: Large Language Model Performance Comparison Results),表明该表是用于对比不同大语言模型的性能。列信息: 模型:列出参与比较的不同大语言模型名称,包括LLAMA3(70B)…...
(十 五)趣学设计模式 之 命令模式!
目录 一、 啥是命令模式?二、 为什么要用命令模式?三、 策略模式的实现方式四、 命令模式的优缺点五、 命令模式的应用场景六、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支…...
React低代码项目:问卷编辑器 I
问卷编辑器 Date: February 20, 2025 4:17 PM (GMT8) 目标 完成问卷编辑器的设计和开发完成复杂系统的 UI 组件拆分完成复杂系统的数据结构设计 内容 需求分析技术方案设计开发 注意事项: 需求指导设计,设计指导开发。前两步很重要页面复杂的话&…...
信刻光盘安全隔离与信息交换系统让“数据摆渡”安全高效
随着数据传输、存储及信息技术的飞速发展,信息安全保护已成为重中之重。各安全领域对跨网数据交互的需求日益迫切,数据传输的安全可靠性成为不可忽视的关键。为满足业务需求并遵守保密规范,针对于涉及重要秘密信息,需做到安全的物…...
使用Python自动生成图文并茂的网页分析报告
在数据分析中,不管是市场研究还是科学分析,经常需要使用Python进行数据分析并生成图表报告。一般使用Python生成和展示图表时都是使用matplotlib 库生成静态图片文件,这种方式不便之处是不方便跟动态文字段落结合在一起,也不方便分…...
uniapp 系统学习,从入门到实战(七)—— 网络请求与数据交互
全篇大概 3600 字(含代码),建议阅读时间 25min 📚 目录 使用uni.request发起请求封装全局请求工具破解跨域难题总结 在跨平台应用开发中,网络请求是连接前端与后端服务的核心环节。UniApp 提供了 uni.request 方法处理网络请求,但…...
【项目管理】基于 C 语言的 QQ 聊天室实现(TCP + 多线程 + SQLite3)
基于 C 语言的 QQ 聊天室(TCP + 多线程 + SQLite3) 项目功能基础功能: 登录、注册、添加好友、私聊、创建群聊、群聊扩展功能: 删除好友、注销账号、好友在线状态、群管理(拉人/踢人)、VIP 特权、邮件通知等 功能介绍:模拟QQ聊天客户端:登录界面:1、登录2、注册 //将用…...
力扣27.移除元素(双指针)
题目看起来很乱,实际上意思是:把数组中值不等于val的元素放在下标为0,1,2,3......,并且返回数组中值不等于val的元素的个数 方法一:直接判断覆盖 class Solution { public:int removeElement(vector<int>& nums, int…...
VADv2: 基于矢量表征和概率规划的E2E架构
1. 写在前面 今天分享一篇自动驾驶领域的论文VADv2(End-to-End Vectorized Autonomous Driving via Probabilistic Planning), 基于矢量表征和概率规划的E2E架构,2024年2月份华中科技大和地平线合作的一篇文章, 在经典的端到端模型架构上作出了基于概率规划去输出规划轨迹的…...
机器学习:强化学习的epsilon贪心算法
强化学习(Reinforcement Learning, RL)是一种机器学习方法,旨在通过与环境交互,使智能体(Agent)学习如何采取最优行动,以最大化某种累积奖励。它与监督学习和无监督学习不同,强调试错…...
授权与认证之jwt(一)创建Jwt工具类
JWT的Token要经过加密才能返回给客户端,包括客户端上传的Tokn,后端项目需要验证核 实。于是我们需要一个WT工具类,用来加密Token和验证Token的有效性。 一、导入依赖 <dependency><groupId>com.auth0</groupId><artifactId>jav…...
计算机毕业设计SpringBoot+Vue.js基于JAVA语言的在线考试与学习交流网页平台(源码+文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
Difyにboto3を変更したカスタムDockerイメージの構築手順
Difyにboto3を変更したカスタムDockerイメージの構築手順 はじめに1. Dockerfileの作成2. Dockerイメージのビルド3. docker-compose.yamlの更新変更点: 4. コンテナの再起動注意事項まとめ はじめに DifyのDockerイメージに特定バージョンのboto3を変更する手順を…...
uniapp 中引入使用uView UI
文章目录 一、前言:选择 uView UI的原因二、完整引入步骤1. 安装 uView UI2. 配置全局样式变量(关键!)3. 在 pages.json中添加:4. 全局注册组件5. 直接使用组件 五、自定义主题色(秒换皮肤) 一、…...
数据图表ScottPlot.WPF用法示例
目录 一、添加 NuGet 程序包(5.0.47) 二、MainWindow.xaml中添加引用 三、MainWindow.xaml.cs 具体使用代码 图表示例: 一、添加 NuGet 程序包(5.0.47) 二、MainWindow.xaml中添加引用 <Window x:Class"…...
js加密之延伸requestAnimationFrame
简言 上篇文章有提到requestAnimationFrame,只是随笔带过。这篇文章就着重研究一下requestAnimationFrame的运用,以及实际作用。还有关于在js加密技术中的落地实现可行性。 功能说明 小声说一下,做开发的同学一定要学会翻官方文档,我这里直接引用一段官方介绍。 …...
系统架构设计师—计算机基础篇—存储管理
文章目录 基本概念地址重定位 存储管理方案分区存储管理分页存储管理做题的方法地址重定位淘汰页号 分段存储管理段页式存储管理虚拟存储管理 基本概念 地址重定位 地址重定位是指将程序中的虚拟地址(逻辑地址)变换称内存的真实地址(物理地…...
【第二十五周】:DeepPose:通过深度神经网络实现人体姿态估计
DeepPose 摘要Abstract文章信息引言DeepPose归一化网络结构初始网络(粗略估计所有关节点位置)精细化级联网络(分别修正每个关节点的位置) 疑问与解决代码实践总结 摘要 这篇博客介绍了DeepPose,这是首个基于深度神经网…...
SVN 简介
SVN 简介 引言 版本控制系统(Version Control System,VCS)是软件开发过程中不可或缺的工具之一。它能够帮助开发者管理代码的版本,追踪代码变更,协同工作,以及确保代码的稳定性和安全性。Subversion(简称SVN)是一种流行的版本控制系统,本文将为您详细介绍SVN的基本概…...
ARM Linux LCD上实时预览摄像头画面
文章目录 1、前言2、环境介绍3、步骤4、应用程序编写4.1、lcd初始化4.2、摄像头初始化4.3、jpeg解码4.4、开启摄像头4.5、完整的程序如下 5、测试5.1、编译应用程序5.2、运行应用程序 6、总结 1、前言 本次应用程序主要针对支持MJPEG格式输出的UVC摄像头。 2、环境介绍 rk35…...
基于DeepSeek 的图生文最新算法 VLM-R1
目录 一、算法介绍 二 算法部署 三 模型下载 四 算法测试 五 可视化脚本 一、算法介绍 VLM-R1:稳定且可通用的 R1 风格大型视觉语言模型 自从 Deepseek-R1 推出以来,出现了许多专注于复制和改进它的作品。在这个项目中,我们提出了 VLM-R1,一种稳定且可通用的 R1 风格…...

