热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ARM汇编基础基于Keil创建STM32汇编程序的编写

文章目录一、新建项目(1)工具介绍(2)创建项目:二、配置环境(1)配置芯片&#x


文章目录

  • 一、新建项目
    • (1)工具介绍
    • (2)创建项目:
  • 二、配置环境
    • (1)配置芯片
    • (2)配置运行环境
  • 三、调试代码(这里选择使用的是仿真调试)
    • (1)源代码
    • (2)仿真设置
  • hex文件分析
    • (1)hex文件介绍
    • (2)hex文件数据格式
  • 参考资料


一、新建项目


(1)工具介绍

使用工具是arm keil,可在官网下载—— 官网链接,点击下载:
在这里插入图片描述


(2)创建项目:

打开keil,点击project–>new μvision project:
在这里插入图片描述
选择文件路径,输入文件名,点击保存,建立项目:
在这里插入图片描述


二、配置环境


(1)配置芯片

这里选择STM32的芯片,F103系列:
在这里插入图片描述
选择STM32F103ZE,点击OK:
在这里插入图片描述


(2)配置运行环境

分别打开CMSIS的CORE,点击勾选,打开Device的startup,点击勾选,再点击OK:
在这里插入图片描述
到这里项目就创建和配置完成了,我们可以发现左边出现了项目文件,在Source Group 1中需要创建一个TEST的测试代码的文件:
在这里插入图片描述
右键鼠标,选择ADD NEW Item…:
在这里插入图片描述
选择Asm的file,输入文件名,再add:
在这里插入图片描述


三、调试代码(这里选择使用的是仿真调试)


(1)源代码

在TEST的文件中放入下面的测试代码:

AREA MYDATA, DATAAREA MYCODE, CODEENTRYEXPORT __main__mainMOV R0, #10MOV R1, #11MOV R2, #12MOV R3, #13;LDR R0, =func01BL func01;LDR R1, =func02BL func02BL func03LDR LR, =func01LDR PC, =func03B .func01MOV R5, #05BX LRfunc02MOV R6, #06BX LRfunc03MOV R7, #07MOV R8, #08 BX LR

(2)仿真设置

仿真是因为在没有芯片的情况下来调试运行代码的一种方式。
后面会要分析hex文件,所以打开project里的option for target…后选择Target:在这里插入图片描述

再选择debug,选择use simulator,再将第二步里的两个参数分别改为DARMSTM.DLL和-pSTM32F103ZE,点击ok:
在这里插入图片描述
点击21行位置设置断点后build,再开始仿真调试:
在这里插入图片描述
运行后,点击F10,跳转到最后:
在这里插入图片描述


hex文件分析


(1)hex文件介绍

Intel HEX文件是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。在Intel HEX文件中,每一行包含一个HEX记录。这些记录由对应机器语言码和/或常量数据的十六进制编码数字组成。Intel HEX文件通常用于传输将被存于ROM或者EPROM中的程序和数据。大多数EPROM编程器或模拟器使用Intel HEX文件。


(2)hex文件数据格式

在这里插入图片描述

可以在创建项目的文件夹objects中找到hex文件,以文本格式打开:

:020000040800F2
:100000000004002031010008390100083B0100080C
:100010003D0100083F010008410100080000000008
:100020000000000000000000000000004301000884
:1000300045010008000000004701000849010008D0
:100040004B0100084B0100084B0100084B01000860
:100050004B0100084B0100084B0100084B01000850
:100060004B0100084B0100084B0100084B01000840
:100070004B0100084B0100084B0100084B01000830
:100080004B0100084B0100084B0100084B01000820
:100090004B0100084B0100084B0100084B01000810
:1000A0004B0100084B0100084B0100084B01000800
:1000B0004B0100084B0100084B0100084B010008F0
:1000C0004B0100084B0100084B0100084B010008E0
:1000D0004B0100084B0100084B0100084B010008D0
:1000E0004B0100084B0100084B0100084B010008C0
:1000F0004B0100084B0100084B0100084B010008B0
:100100004B0100084B0100084B0100084B0100089F
:100110004B0100084B0100084B0100084B0100088F
:100120004B0100084B0100084B0100084B0100087F
:100130000648804706480047FEE7FEE7FEE7FEE781
:10014000FEE7FEE7FEE7FEE7FEE7FEE781020008C6
:10015000550100084FF00A004FF00B014FF00C0260
:100160004FF00D0300F009F800F00AF800F00BF86A
:10017000DFF81CE0DFF81CF0FEE74FF005057047E4
:100180004FF0060670474FF007074FF0080870471A
:100190007B0100088701000810B500F001F810BDD0
:1001A0000CB50020019000903348006840F4803086
:1001B0003149086000BF3048006800F4003000900A
:1001C0000198401C0190009818B90198B0F5A06FF3
:1001D000F1D12948006800F4003010B101200090EE
:1001E00001E0002000900098012843D123480068D6
:1001F00040F01000214908600846006820F0030024
:1002000008600846006840F0020008601A4840682C
:10021000194948600846406848600846406840F40C
:10022000806048600846406820F47C1048600846BA
:10023000406840F4E81048600846006840F080706C
:10024000086000BF0C48006800F000700028F9D07A
:100250000948406820F003000749486008464068A4
:1002600040F00200486000BF0348406800F00C0006
:100270000828F9D10CBD0000001002400020024007
:1002800010B51348006840F00100114908600846A5
:100290004068104908400E494860084600680E4909
:1002A00008400B4908600846006820F48020086078
:1002B0000846406820F4FE0048604FF41F00886044
:1002C000FFF76AFF4FF000600449086010BD0000AE
:1002D000001002400000FFF8FFFFF6FE08ED00E00E
:0400000508000131BD
:00000001FF

其中第一行 :020000040800F2 中,可以看做是0x02 0x00 0x00 0x04 0x08 0x00 0xf2;
第一个0×02表示该行数据中有两个数据;
第二个,第三个0x00 0x00表示本行数据的起始地址位;
第四个字节 0x04 表示扩展线性地址记录,对应上述的TT域;
第五个、第六个 0x08 0x00表示数据字节,与**数据长度域(LL)**中对应,即第一个 0x02;
最后一个字节0xf2为校验和。校验和= 0x100 - 累加和。


参考资料

ARM汇编基础之基于MDK创建纯汇编语言的STM32工程
hex文件百科
基于 MDK 创建 STM32 汇编语言工程并分析 HEX 文件内容
STM32基于汇编方式创建工程文件和闪烁LED灯


推荐阅读
  • JavaScript 基础语法指南
    本文详细介绍了 JavaScript 的基础语法,包括变量、数据类型、运算符、语句和函数等内容,旨在为初学者提供全面的入门指导。 ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 本文介绍如何解决在 IIS 环境下 PHP 页面无法找到的问题。主要步骤包括配置 Internet 信息服务管理器中的 ISAPI 扩展和 Active Server Pages 设置,确保 PHP 脚本能够正常运行。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • C++实现经典排序算法
    本文详细介绍了七种经典的排序算法及其性能分析。每种算法的平均、最坏和最好情况的时间复杂度、辅助空间需求以及稳定性都被列出,帮助读者全面了解这些排序方法的特点。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 2022年单片机课程(机器人工程)教学反思
    本文对2022年单片机类课程的教学进行了全面反思,分析了教学过程中遇到的问题,并探讨了未来改进的方向。 ... [详细]
  • 堆是一种常见的数据结构,广泛应用于计算机科学领域。它通常表示为一棵完全二叉树,并可通过数组实现。堆的主要特性是每个节点的值与其父节点的值之间存在特定的关系,这使得堆在优先队列和排序算法中非常有用。 ... [详细]
  • 20100423:Fixes:更新批处理,以兼容WIN7。第一次系统地玩QT,于是诞生了此预备式:【QT版本4.6.0&#x ... [详细]
  • 解析SQL查询结果的排序问题及其解决方案
    本文探讨了为什么某些SQL查询返回的数据集未能按预期顺序排列,并提供了详细的解决方案,帮助开发者理解并解决这一常见问题。 ... [详细]
  • 本文详细介绍了C语言的起源、发展及其标准化过程,涵盖了从早期的BCPL和B语言到现代C语言的演变,并探讨了其在操作系统和跨平台编程中的重要地位。 ... [详细]
  • 阿里云ecs怎么配置php环境,阿里云ecs配置选择 ... [详细]
author-avatar
lexlee1979
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有