[KEIL]单片机技巧 01

news2025/3/4 3:20:44

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【网络安全 | 渗透测试】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…

【动手实验】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?它与我的应用程序集成的速度有多快?性能开销是多少? 在本文中,我们将着眼…

现今大语言模型性能(准确率)比较

现今大语言模型性能(准确率)比较 表头信息:表的标题为“大语言模型性能比较结果”(英文:Table 1: Large Language Model Performance Comparison Results),表明该表是用于对比不同大语言模型的性能。列信息: 模型:列出参与比较的不同大语言模型名称,包括LLAMA3(70B)…

(十 五)趣学设计模式 之 命令模式!

目录 一、 啥是命令模式?二、 为什么要用命令模式?三、 策略模式的实现方式四、 命令模式的优缺点五、 命令模式的应用场景六、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支…

React低代码项目:问卷编辑器 I

问卷编辑器 Date: February 20, 2025 4:17 PM (GMT8) 目标 完成问卷编辑器的设计和开发完成复杂系统的 UI 组件拆分完成复杂系统的数据结构设计 内容 需求分析技术方案设计开发 注意事项: 需求指导设计,设计指导开发。前两步很重要页面复杂的话&…

信刻光盘安全隔离与信息交换系统让“数据摆渡”安全高效

随着数据传输、存储及信息技术的飞速发展,信息安全保护已成为重中之重。各安全领域对跨网数据交互的需求日益迫切,数据传输的安全可靠性成为不可忽视的关键。为满足业务需求并遵守保密规范,针对于涉及重要秘密信息,需做到安全的物…

【项目管理】基于 C 语言的 QQ 聊天室实现(TCP + 多线程 + SQLite3)

基于 C 语言的 QQ 聊天室(TCP + 多线程 + SQLite3) 项目功能基础功能: 登录、注册、添加好友、私聊、创建群聊、群聊扩展功能: 删除好友、注销账号、好友在线状态、群管理(拉人/踢人)、VIP 特权、邮件通知等 功能介绍:模拟QQ聊天客户端:登录界面:1、登录2、注册 //将用…

力扣27.移除元素(双指针)

题目看起来很乱&#xff0c;实际上意思是&#xff1a;把数组中值不等于val的元素放在下标为0,1,2,3......&#xff0c;并且返回数组中值不等于val的元素的个数 方法一&#xff1a;直接判断覆盖 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贪心算法

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是一种机器学习方法&#xff0c;旨在通过与环境交互&#xff0c;使智能体&#xff08;Agent&#xff09;学习如何采取最优行动&#xff0c;以最大化某种累积奖励。它与监督学习和无监督学习不同&#xff0c;强调试错…

计算机毕业设计SpringBoot+Vue.js基于JAVA语言的在线考试与学习交流网页平台(源码+文档+PPT+讲解)

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

数据图表ScottPlot.WPF用法示例

目录 一、添加 NuGet 程序包&#xff08;5.0.47&#xff09; 二、MainWindow.xaml中添加引用 三、MainWindow.xaml.cs 具体使用代码 图表示例&#xff1a; 一、添加 NuGet 程序包&#xff08;5.0.47&#xff09; 二、MainWindow.xaml中添加引用 <Window x:Class"…

【第二十五周】:DeepPose:通过深度神经网络实现人体姿态估计

DeepPose 摘要Abstract文章信息引言DeepPose归一化网络结构初始网络&#xff08;粗略估计所有关节点位置&#xff09;精细化级联网络&#xff08;分别修正每个关节点的位置&#xff09; 疑问与解决代码实践总结 摘要 这篇博客介绍了DeepPose&#xff0c;这是首个基于深度神经网…

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…

MacOS本地部署Deepseek,不联网也可以使用AI,保护隐私

苹果笔记本本地部署deepseek主要用到Ollama与open-webui 1. 安装Ollama “Ollama” 是一个轻量级的 AI 模型运行时环境&#xff08;runtime&#xff09;&#xff0c;旨在简化在本地部署和使用大语言模型&#xff08;LLM&#xff09;的过程。它由 Vicarious 公司开发&#xff…

Sqlserver安全篇之_启用TLS即配置SQL Server 数据库引擎以加密连接

官方文档 https://learn.microsoft.com/zh-cn/sql/database-engine/configure-windows/configure-sql-server-encryption?viewsql-server-ver16 https://learn.microsoft.com/zh-cn/sql/database-engine/configure-windows/manage-certificates?viewsql-server-ver15&pre…