【嵌入式03】KEIL环境下基于STM32汇编程序的编写+动态调试+HEX文件内容分析

概述:本文主要讲述keil环境的搭建和安装包的下载,同时运用汇编语言进行简单的编程,通过该程序生成的HEX文件对其进行简单分析。

文章目录

  • 一、keil环境搭建
    • (一)MDK软件的安装
    • (二)支持包的安装
    • (三)注册
  • 二、基于STM32的简单汇编
    • (一)程序代码编写
    • (二)程序编译
    • (三)程序调试
  • 三、分析生成的HEX文件
    • (一)生成HEX文件
    • (二 )HEX文件分析
  • 四、总结
  • 五、参考文献

一、keil环境搭建

(一)MDK软件的安装

1.点击mdk531.exe后出现以下界面,点击“Next”:
【嵌入式03】KEIL环境下基于STM32汇编程序的编写+动态调试+HEX文件内容分析_第1张图片
2.勾选“I agree to all……“,然后点击”Next”:
【嵌入式03】KEIL环境下基于STM32汇编程序的编写+动态调试+HEX文件内容分析_第2张图片

3.选择软件路径和支持包路径(可以默认),点击“Next”:
【嵌入式03】KEIL环境下基于STM32汇编程序的编写+动态调试+HEX文件内容分析_第3张图片
4.填写注册信息后(随意填写),点击"Next":
【嵌入式03】KEIL环境下基于STM32汇编程序的编写+动态调试+HEX文件内容分析_第4张图片

5.安装过程中出现以下界面,勾选“始终信任来自“ARM Ltd”的软件,然后点击”安装“:
【嵌入式03】KEIL环境下基于STM32汇编程序的编写+动态调试+HEX文件内容分析_第5张图片
之后会自动进入“Pack Installer”界面,这里会检查安装的编译器、CMSIS等是否是最新的,如果安装的是官网提供的最新的MDK,所以这里一般情况下都是不需要更新的。

(二)支持包的安装

一个Keil的开发环境,除了Keil软件,还需要安装对应的Pack。
比如这里目标机的MCU是STM32F103C8T6,就需要下载该系列的的Pack,如果是STM32F4系列,就需要下其它系列Pack。
使用“Pack Installer”可以方便的对Pack安装和管理。
在左上角搜索框输入“STM32F103”,展开搜索结果,可以看到STM32F103C8,点击右边的简介链接即可跳转到Pack下载页面。
【嵌入式03】KEIL环境下基于STM32汇编程序的编写+动态调试+HEX文件内容分析_第6张图片
【嵌入式03】KEIL环境下基于STM32汇编程序的编写+动态调试+HEX文件内容分析_第7张图片
【嵌入式03】KEIL环境下基于STM32汇编程序的编写+动态调试+HEX文件内容分析_第8张图片
下载完成即可得到"Keil.STM32F1xx_DFP.2.4.0.pack".双击文件,弹出以下界面,点击"Next"进行安装。
【嵌入式03】KEIL环境下基于STM32汇编程序的编写+动态调试+HEX文件内容分析_第9张图片
点击"Finsh",至此Keil和Pack完成安装。
【嵌入式03】KEIL环境下基于STM32汇编程序的编写+动态调试+HEX文件内容分析_第10张图片

(三)注册

1.在安装包中,找到kegen_new2032,打开该文件夹,点击运行里面的程序(有时需要暂时关闭病毒防护)。然后根据下图提示点击"License Management…":
【嵌入式03】KEIL环境下基于STM32汇编程序的编写+动态调试+HEX文件内容分析_第11张图片
2.打开License Management复制CID的内容:
【嵌入式03】KEIL环境下基于STM32汇编程序的编写+动态调试+HEX文件内容分析_第12张图片
3.按照图片步骤进行操作:
【嵌入式03】KEIL环境下基于STM32汇编程序的编写+动态调试+HEX文件内容分析_第13张图片

4.将上一步骤复制的内容粘贴至①处,然后点击AddLIC,再点击Close就结束了
【嵌入式03】KEIL环境下基于STM32汇编程序的编写+动态调试+HEX文件内容分析_第14张图片

二、基于STM32的简单汇编

(一)程序代码编写

1.新建工程
【嵌入式03】KEIL环境下基于STM32汇编程序的编写+动态调试+HEX文件内容分析_第15张图片
【嵌入式03】KEIL环境下基于STM32汇编程序的编写+动态调试+HEX文件内容分析_第16张图片

2.配置环境
选择设备,此处选择STM32F103ZE
【嵌入式03】KEIL环境下基于STM32汇编程序的编写+动态调试+HEX文件内容分析_第17张图片
选择运行环境,此处勾选CMSIS中的CORE与Device中的startup。
在创建项目时,在运行库管理中选择CMSIS-COER(CMSIS:CORE)和设备的启动代码(Device:Startup),这两个是开发应用程序时必须的2个组件。当处理器是STM32F10X时,启动代码为startup_stm32f10x_hd.s、时钟和总线配置文件为system_stm32f10x.c以及应用程序中需要包含的头文件stm32f10x.h。

【嵌入式03】KEIL环境下基于STM32汇编程序的编写+动态调试+HEX文件内容分析_第18张图片
3.添加源文件TEST
右键单击Source Group 1,选择Add New Item…,添加Asm File(.s)文件,命名为TEST:
【嵌入式03】KEIL环境下基于STM32汇编程序的编写+动态调试+HEX文件内容分析_第19张图片

【嵌入式03】KEIL环境下基于STM32汇编程序的编写+动态调试+HEX文件内容分析_第20张图片

在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:【嵌入式03】KEIL环境下基于STM32汇编程序的编写+动态调试+HEX文件内容分析_第21张图片
2.进行编译:
【嵌入式03】KEIL环境下基于STM32汇编程序的编写+动态调试+HEX文件内容分析_第22张图片

(三)程序调试

1.点击以下图标,进入调试界面
【嵌入式03】KEIL环境下基于STM32汇编程序的编写+动态调试+HEX文件内容分析_第23张图片

2.进入调试状态后,界面与编辑状态相比有明显的变化,Debug菜单项中原来不能用的命令现在已经可以用了,工具栏会多出一个用于运行和调试的工具条,从左到右依次是复位、运行、暂停、单步、过程单步、执行完当前子程序、运行到当前行、下一状态。

在这里插入图片描述
进行单步运行过后,点击暂停,或者是直接点击运行后再点击暂停可以得到以下截图内容,由图片可以发现寄存器R5,R6,R7,R8的值和程序设置一致。
【嵌入式03】KEIL环境下基于STM32汇编程序的编写+动态调试+HEX文件内容分析_第24张图片

三、分析生成的HEX文件

(一)生成HEX文件

根据下示图片步骤进行操作,勾选Creat HEX File,然后再次进行编译即可获得对应HEX文件。
【嵌入式03】KEIL环境下基于STM32汇编程序的编写+动态调试+HEX文件内容分析_第25张图片

(二 )HEX文件分析

在文件夹object中即可找到对应的HEX文件,选择记事本的打开方式打开文件,该文件打开后是一串十六进制字符。
【嵌入式03】KEIL环境下基于STM32汇编程序的编写+动态调试+HEX文件内容分析_第26张图片
由上图可知每行数据由冒号开始,后面的数据由:数据长度、地址、标识符、有效数据、校验数据等构成。

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为模进行以下补足)

3.文件尾
【嵌入式03】KEIL环境下基于STM32汇编程序的编写+动态调试+HEX文件内容分析_第27张图片
最后一行的00000001FF:

内容 描述
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

你可能感兴趣的:(stm32)