概述:本文主要讲述keil环境的搭建和安装包的下载,同时运用汇编语言进行简单的编程,通过该程序生成的HEX文件对其进行简单分析。
1.点击mdk531.exe后出现以下界面,点击“Next”:
2.勾选“I agree to all……“,然后点击”Next”:
3.选择软件路径和支持包路径(可以默认),点击“Next”:
4.填写注册信息后(随意填写),点击"Next":
5.安装过程中出现以下界面,勾选“始终信任来自“ARM Ltd”的软件,然后点击”安装“:
之后会自动进入“Pack Installer”界面,这里会检查安装的编译器、CMSIS等是否是最新的,如果安装的是官网提供的最新的MDK,所以这里一般情况下都是不需要更新的。
一个Keil的开发环境,除了Keil软件,还需要安装对应的Pack。
比如这里目标机的MCU是STM32F103C8T6,就需要下载该系列的的Pack,如果是STM32F4系列,就需要下其它系列Pack。
使用“Pack Installer”可以方便的对Pack安装和管理。
在左上角搜索框输入“STM32F103”,展开搜索结果,可以看到STM32F103C8,点击右边的简介链接即可跳转到Pack下载页面。
下载完成即可得到"Keil.STM32F1xx_DFP.2.4.0.pack".双击文件,弹出以下界面,点击"Next"进行安装。
点击"Finsh",至此Keil和Pack完成安装。
1.在安装包中,找到kegen_new2032,打开该文件夹,点击运行里面的程序(有时需要暂时关闭病毒防护)。然后根据下图提示点击"License Management…":
2.打开License Management复制CID的内容:
3.按照图片步骤进行操作:
4.将上一步骤复制的内容粘贴至①处,然后点击AddLIC,再点击Close就结束了
2.配置环境
选择设备,此处选择STM32F103ZE
选择运行环境,此处勾选CMSIS中的CORE与Device中的startup。
在创建项目时,在运行库管理中选择CMSIS-COER(CMSIS:CORE)和设备的启动代码(Device:Startup),这两个是开发应用程序时必须的2个组件。当处理器是STM32F10X时,启动代码为startup_stm32f10x_hd.s、时钟和总线配置文件为system_stm32f10x.c以及应用程序中需要包含的头文件stm32f10x.h。
3.添加源文件TEST
右键单击Source Group 1,选择Add New Item…,添加Asm File(.s)文件,命名为TEST:
在TEST中添加如下代码:
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
1.根据下图进行操作,勾选Use Simulator,因为在后面需要进行虚拟调试,更改Dialog DLL和Parameter的内容如下图所示,用于支持STM32F103C8的软硬件仿真,点击OK:
2.进行编译:
2.进入调试状态后,界面与编辑状态相比有明显的变化,Debug菜单项中原来不能用的命令现在已经可以用了,工具栏会多出一个用于运行和调试的工具条,从左到右依次是复位、运行、暂停、单步、过程单步、执行完当前子程序、运行到当前行、下一状态。
进行单步运行过后,点击暂停,或者是直接点击运行后再点击暂停可以得到以下截图内容,由图片可以发现寄存器R5,R6,R7,R8的值和程序设置一致。
根据下示图片步骤进行操作,勾选Creat HEX File,然后再次进行编译即可获得对应HEX文件。
在文件夹object中即可找到对应的HEX文件,选择记事本的打开方式打开文件,该文件打开后是一串十六进制字符。
由上图可知每行数据由冒号开始,后面的数据由:数据长度、地址、标识符、有效数据、校验数据等构成。
1、扩展线性地址记录
扩展线性地址记录(hex 文件的第一排十六进制)也叫作 32 位地址记录或 HEX386 记录。这些记录包含数据地址的高 16 位。扩展线性地址记录总是有两个数据字节,外观如下(这里我通过标记方便对应原始数据):
内容 | 描述 |
---|---|
:020000040800F2 | |
02 | 这个记录当中数据字节的数量 |
0000 | 地质域,对于扩展线性地址记录,这个域总是 0000 |
04 | 记录类型 04 (扩展线性地址记录) |
0800 | 地址的高 16 位 |
F2 | 是这个记录的校验和,计算方法:01h + NOT(02h + 00h + 00h + 04h + 08h + 00h) |
2.数据部分
Intel HEX 由任意数量的十六进制记录组成。每个记录包含 5 个域,它们按一定格式排列::llaaaatt[dd…]cc
每一组字母对应一个不同的域,每一个字母对应一个十六进制编码的数字
每一个域由至少两个十六进制编码数字组成,它们构成一个字节,就像以下描述的那样:
内容 | 描述 |
---|---|
:llaaaatt[dd…]cc | |
- | - |
: | 每个Intel HEX记录都由冒号开头 |
// | 数据长度域,它代表记录当中数据字节(dd)的数量 |
aaaa | 地址域,它代表记录当中数据的起始地址 |
tt | 代表HEX记录类型的域,它可能是以下数据当中的一个:00(数据记录)、01(文件结束记录)、02(扩展段地址记录)、04(扩展线性地址记录) |
dd | 数据域,它代表一个字节的数据。一个记录可以有许多数据字节.记录当中数据字节的数量必须和数据长度域(ll)中指定的数字相符 |
cc | 校验和域,它表示这个记录的校验和(校验和的计算是通过将记录当中所有十六进制编码数字对的值相加,以256为模进行以下补足) |
内容 | 描述 |
---|---|
00 | 记录的长度为0 |
0000 | LOAD OFFSET为0000 |
01 | TYPE = 01 |
FF | 校验和为FF |
在曾经安装过KEIL的基础之上,加上网上文献的查阅,此次的安装更加顺利。在进行汇编语言调试的过程中虽然出现了一些问题,主要包括调试的步骤内容更改以及最终调试的结果展示。这些问题反映了对KEIL软件的不成熟运用,如果需要后期运用的更加得心应手,还需要多加练习和掌握汇编语言。
https://blog.csdn.net/m0_48609250/article/details/120524171
http://t.csdn.cn/91NB9
https://blog.csdn.net/qq_43279579/article/details/108880667?utm_source=app