基于STM32汇编程序的编写
本文内容:利用Kevil 5完成一个基于STM32汇编程序的编写与调试
搭建配置Keil嵌入式开发环境,完成一个基于STM32汇编程序的编写、软件调试并分析生成的HEX文件
1.新建工程
打开Kevil 5,进入界面后打开project,选择新建New uVision project
设置新工程的保存路径和名称
2.配置环境
选择设备,在新工程建立后的弹出窗口中选择STM32系列芯片,并选择STM32103ZET6
,确认后保存即可
此界面也可通过上方Project中的options fo target找到
接下来是选择运行环境,ARM的CMSIS已经把开发所需要的软件组件都组装好了,因此直接选择即可。
即: 1.CMSIS
下选择CORE
2.Device
下选择Startup
,其中包含了启动文件
创建完成后,在右侧project栏展开Target 1,右键Source选择Add New item to Group
在弹出页面中选择要生成的源文件,因为我们要进行的是汇编语言的编写,所以我们选择.s后缀的文件命名并选择保存路径
最后即可在生成的源文件中进行汇编语言程序编写
3.仿真测试
现有以下代码需要调试仿真
AREA MYDATA, DATA
AREA MYCODE, CODE
ENTRY
EXPORT __main
__main
MOV R0, #10
MOV R1, #11
MOV R2, #12
MOV R3, #13
;LDR R0, =func01
BL func01
;LDR R1, =func02
BL func02
BL func03
LDR LR, =func01
LDR PC, =func03
B .
func01
MOV R5, #05
BX LR
func02
MOV R6, #06
BX LR
func03
MOV R7, #07
MOV R8, #08
BX LR
接下来是设置仿真器的模式,在上方找到Project,打开后选择Options for Target,选择Debug显示如下画面,分为两个部分,左半部分为虚拟仿真器,右半部分为硬件,此处由于条件首先,我们选择虚拟仿真,勾选上方Use Simulator
复制上文代码,粘贴入源文件,并在工具栏中选择build编译
在右上方放大器中有个红色d的图标选择调试,进入调试界面
左侧显示了寄存器及其值,以及ARM当前工作模式等信息,接着单步运行程序,可以看到相关寄存器的值发生变化,也可以打开memory窗口查看内存情况。
4.分析生成的HEX文件
在project中找到Options for target,打开output并勾选生成HEX文件,在存储路径下找到并用记事本打开HEX文件
该文件为16进制的一串字符,HEX文件的第一排字符为扩展性地址记录,也称为32位地址记录或HEX386记录。
第一行数据020000040800F2,其实际表达为0x02 0x00 0x00 0x04 0x08 0x00 0xf2。具体含义为:
1. 第一个字节0x02表示本行数据的长度
2. 第二、三字节 0x00 0x00表示本行数据的起始地址;
3. 第四字节 0x04表示数据类型,数据类型有:0x00、0x01、0x02、0x03、0x04、0x05
'00' Data Rrecord:用来记录数据,HEX文件的大部分记录都是数据记录
'01' End of File Record: 用来标识文件结束,放在文件的最后,标识HEX文件的结尾
'02' Extended Segment Address Record: 用来标识扩展段地址的记录
'03' Start Segment Address Record:开始段地址记录
'04' Extended Linear Address Record: 用来标识扩展线性地址的记录
'05' Start Linear Address Record:开始线性地址记录
4. 然后是数据,0x08 0x00
5. 最后一个字节 0xf2为校验和。
总结
以上就是本文全部内容,介绍了基于STM32的汇编语言编写的测试、编程调试和分析生成的HEX前8个字节的内容含义,了解了Kevil软件的基本操作,仿真调试的操作步骤以及观察寄存器的情况变化。
参考文章
https://blog.csdn.net/qq_45659777/article/details/120496577
https://blog.csdn.net/qq_43279579/article/details/111717607