[KEIL]单片机技巧 01

1、查看外设寄存器的值

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

2、ARM汇编常用指令集解读

如上图, STM32 的汇编指令(基于 ARM Cortex-M 架构)是调试和底层开发的重要基础。

以下是 STM32 中常用的 ARM Thumb/Thumb-2 汇编指令及其用途:

一、数据操作指令

  1. MOV
    • 作用: 寄存器之间的数据移动或立即数加载

    • 示例:

      MOV R0, R1     ; R0 = R1
      MOV R2, #0x10  ; R2 = 0x10
  2. LDR / STR
    • 作用: 从内存加载数据到寄存器(Load)或存储寄存器数据到内存(Store)

    • 示例:

      
      LDR R0, [R1]    ; R0 = *R1(从地址 R1 加载数据)
      STR R2, [R3]    ; *R3 = R2(将 R2 的值存储到地址 R3)

  3. ADD / SUB
    • 作用: 加减运算

    • 示例:

      ADD R0, R1, R2  ; R0 = R1 + R2
      SUB R3, R4, #5   ; R3 = R4 - 5
       
  4. AND / ORR / EOR / BIC

    • 作用: 逻辑运算(与、或、异或、位清除)

    • 示例:

      
      AND R0, R1, #0xFF  ; R0 = R1 & 0xFF(保留低8位)
      ORR R2, R3, R4      ; R2 = R3 | R4


二、流程控制指令

  1. B
    • 作用: 无条件跳转(Branch)

    • 示例:

      
      B label      ; 跳转到标签 label

  2. BX
    • 作用: 跳转到寄存器指定的地址,并切换指令集(如 ARM ↔ Thumb)

    • 示例:

      
      BX LR        ; 跳转到 LR 寄存器中的地址(常用于函数返回)

  3. BL
    • 作用: 带链接的跳转(保存返回地址到 LR 寄存器)

    • 示例:

      
      BL function  ; 调用函数 function,LR = 下一条指令地址

  4. 条件分支指令
    • 作用: 根据标志位(如 Z、C)跳转

    • 常见指令:

      
      BEQ label   ; 相等时跳转(Z=1)
      BNE label   ; 不等时跳转(Z=0)
      BCS label   ; 进位标志 C=1 时跳转


三、栈操作指令

  1. PUSH / POP
    • 作用: 压栈和出栈操作(保存/恢复寄存器)

    • 示例:

      
      PUSH {R0, R1}  ; 将 R0, R1 压入栈
      POP {R2, R3}   ; 从栈中恢复数据到 R2, R3


四、标志位操作

  1. CMP
    • 作用: 比较两个值(内部执行减法,更新标志位)

    • 示例:

      
      CMP R0, R1  ; 比较 R0 和 R1,更新 Z(Zero)标志

  2. TST
    • 作用: 按位与测试(不保存结果,仅更新标志位)

    • 示例:

      
      TST R0, #0x01  ; 测试 R0 的最低位是否为 1


五、特殊指令

  1. CPSID / CPSIE
    • 作用: 全局中断开关

    • 示例:

      
      CPSID I   ; 关闭中断
      CPSIE I   ; 开启中断

  2. NOP
    • 作用: 空操作(常用于调试时插入断点或延时)

    • 示例:

      
      NOP  ; 空操作

  3. 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 前面加上取地址符 & 即可显示当前变量的地址。地址后,则显示当前地址的值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/980721.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

TCP/IP 5层协议簇:网络层(IP数据包的格式、路由器原理)

目录 1. TCP/IP 5层协议簇 2. IP 三层包头协议 3. 路由器原理 4. 交换机和路由的对比 1. TCP/IP 5层协议簇 如下: 2. IP 三层包头协议 数据包如下:IP包头不是固定的,每一个数字是一个bit 其中数据部分是上层的内容,IP包头最…

免费轻巧多功能 PDF 处理工具:转换、压缩、提取一应俱全

软件技术 今天要给大家分享一款超实用的 PDF 处理工具,它免费又轻巧,如同随时待命的得力小帮手,功能之强大超乎想象,真的值得大家收藏。 这款工具是绿色版软件,解压后开启,满满的 PDF 处理功能便映入眼帘…

基于微信小程序的疫情互助平台(源码+lw+部署文档+讲解),源码可白嫖!

摘要 时代在飞速进步,每个行业都在努力发展现在先进技术,通过这些先进的技术来提高自己的水平和优势,从2019年底新型冠状肺炎疫情的爆发以来,使很多工作的管理工作难度再上一层楼。为了在疫情期间能更好的维护信息管理&#xff0…

飞致云开源社区月度动态报告(2025年2月)

自2023年6月起,中国领先的开源软件公司飞致云以月度为单位发布《飞致云开源社区月度动态报告》,旨在向广大社区用户同步飞致云旗下系列开源软件的发展情况,以及当月主要的产品新版本发布、社区运营成果等相关信息。 飞致云开源运营数据概览&…

数据库拓展操作

目录 一、截断表: 操作目的: 操作内容: 性能影响: 基本语法: 例子: 二、插入查询结果: 基本语法: 例子: 三、聚合函数: 常用函数: 基…

在 Mac 上使用 Docker 安装宝塔并部署 LNMP 环境

前言 只因为在mac上没有找到合适的PHP开发集成环境,之前有安装了Eserver,但是安装一些常用PHP扩展有时候还是需要手动去编译添加。phpStudy也没有找到适合Mac的版本,在后面安装了Parallels Desktop虚拟机 来运行Ubuntu系统搭建了一套LNMP环境…

Node.js二:第一个Node.js应用

精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 创建的时候我们需要用到VS code编写代码 我们先了解下 Node.js 应用是由哪几部分组成的: 1.引入 required 模块:我们可以使用 requi…

Excel基础(详细篇):总结易忽视的知识点,有用的细节操作

目录 基础篇Excel主要功能必会快捷键LotusExcel的文件类型工作表基本操作表项操作选中与缩放边框线 自动添加边框线格式刷设置斜线表头双/多斜线表头不变形的:双/多斜线表头插入多行、多列单元格/行列的移动冻结窗口 方便查看数据打印的常见问题Excel格式数字格式日期格式文本…

vue3:四嵌套路由的实现

一、前言 1、嵌套路由的含义 嵌套路由的核心思想是&#xff1a;在某个路由的组件内部&#xff0c;可以定义子路由&#xff0c;这些子路由会渲染在父路由组件的特定位置&#xff08;通常是 <router-view> 标签所在的位置&#xff09;。通过嵌套路由&#xff0c;你可以实…

【实战篇】【深度解析DeepSeek:从机器学习到深度学习的全场景落地指南】

一、机器学习模型:DeepSeek的降维打击 1.1 监督学习与无监督学习的"左右互搏" 监督学习就像学霸刷题——给标注数据(参考答案)训练模型。DeepSeek在信贷风控场景中,用逻辑回归模型分析百万级用户数据,通过特征工程挖掘出"凌晨3点频繁申请贷款"这类魔…

【Python 数据结构 2.时间复杂度和空间复杂度】

Life is a journey —— 25.2.28 一、引例&#xff1a;穷举法 1.单层循环 所谓穷举法&#xff0c;就是我们通常所说的枚举&#xff0c;就是把所有情况都遍历了的意思。 例&#xff1a;给定n&#xff08;n ≤ 1000&#xff09;个元素ai&#xff0c;求其中奇数有多少个 判断一…

计算机毕业设计SpringBoot+Vue.js社区智慧养老监护管理平台(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

西北工业大学计算机复试上机真题

西北工业大学计算机复试上机真题 历年西北工业大学计算机复试上机真题 西北工业大学计算机考研复试上机真题 2023西北工业大学计算机复试上机真题 2022西北工业大学计算机复试上机真题 在线评测地址&#xff1a;传送门 数组排序 题目描述 一组整数&#xff0c;由小到大排序…

kafka-web管理工具cmak

一. 背景&#xff1a; 日常运维工作中&#xff0c;采用cli的方式进行kafka集群的管理&#xff0c;还是比较繁琐的(指令复杂&#xff1f;)。为方便管理&#xff0c;可以选择一些开源的webui工具。 推荐使用cmak。 二. 关于cmak&#xff1a; cmak是 Yahoo 贡献的一款强大的 Apac…

数据结构(初阶)(七)----树和二叉树(堆,堆排序)

八&#xff0c;树与二叉树 树 概念与结构 树是⼀种⾮线性的数据结构&#xff0c;它是由 n&#xff08;n>0&#xff09; 个有限结点组成⼀个具有层次关系的集合。把它叫做树是因为它看起来像⼀棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;⽽叶朝下的。 • 有⼀…

数据集笔记:新加坡 地铁(MRT)和轻轨(LRT)票价

数据连接 data.gov.sg 2024 年 12 月 28 日起生效的新加坡地铁票价 该数据集包含 MRT 和 LRT 票价的信息&#xff0c;包括&#xff1a; 票价类型&#xff08;Fare Type&#xff09;&#xff1a;成人票、学生票、老年人票、残障人士票等。适用时间&#xff08;Applicable Tim…

常用的AI文本大语言模型汇总

AI文本【大语言模型】 1、文心一言https://yiyan.baidu.com/ 2、海螺问问https://hailuoai.com/ 3、通义千问https://tongyi.aliyun.com/qianwen/ 4、KimiChat https://kimi.moonshot.cn/ 5、ChatGPThttps://chatgpt.com/ 6、魔塔GPT https://www.modelscope.cn/studios/iic…

GPIO概念

GPIO通用输入输出口 在芯片内部存在多个GPIO&#xff0c;每个GPIO用于管理多个芯片进行输入&#xff0c;输出工作 引脚电平 0v ~3.3v&#xff0c;部分引脚可容任5v 输出模式下可控制端口输出高低电平&#xff0c;可以驱动LED&#xff0c;控制蜂鸣器&#xff0c;模拟通信协议&a…

论文笔记-NeurIPS2017-DropoutNet

论文笔记-NeurIPS2017-DropoutNet: Addressing Cold Start in Recommender Systems DropoutNet&#xff1a;解决推荐系统中的冷启动问题摘要1.引言2.前言3.方法3.1模型架构3.2冷启动训练3.3推荐 4.实验4.1实验设置4.2在CiteULike上的实验结果4.2.1 Dropout率的影响4.2.2 实验结…

在 Mac mini M2 上本地部署 DeepSeek-R1:14B:使用 Ollama 和 Chatbox 的完整指南

随着人工智能技术的飞速发展&#xff0c;本地部署大型语言模型&#xff08;LLM&#xff09;已成为许多技术爱好者的热门选择。本地部署不仅能够保护隐私&#xff0c;还能提供更灵活的使用体验。本文将详细介绍如何在 Mac mini M2&#xff08;24GB 内存&#xff09;上部署 DeepS…