在Keil环境下关于STM32程序的编写与HEX文件的分析

目录

一、keil环境下创建新项目,与程序的编写

1. 新建工程

 2.添加源文件


一、keil环境下创建新项目,与程序的编写

1. 新建工程

打开keil软件,找到下图中Protect下方的New uVision Project创建新项目

然后就创建文件保存

 然后选择下图中的芯片

 然后下图中的CORE和STARTUP勾选出来 

 2.添加源文件

选择下图所示位置添加文件

 然后添加下图ASm Files(.s)文件,并且输入名字

 点击Source Group 1左边的加号,看到xxx.s,添加成功

3.代码编写

在xxx.s中写下下面的代码

 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

4.程序编译

第一步点击下图所示位置

然后在out put 勾选我画圈的位置

 然后在debug勾选画圈的位置

 设置好就按照下图1,2步进行编译和调试,当然编译需要没有错误

然后可以看到结果

 

二 分析HEX文件

打开hex文件

然后如下图

 

1.扩展线性地址记录


扩展线性地址记录(hex 文件的第一排十六进制)也叫作 32 位地址记录或 HEX386 记录

这些记录包含数据地址的高 16 位

扩展线性地址记录总是有两个数据字节,外观如下(这里我通过标记方便对应原始数据):

:020000040800F2

内容  描述
F2  是这个记录的校验和,计算方法:01h + NOT(02h + 00h + 00h + 04h + 08h + 00h)
02这个记录当中数据字节的数量
0000地址域,对于扩展线性地址记录,这个域总是 0000
04记录类型 04 (扩展线性地址记录)
0800是地址的高 16 位


 
当一个扩展线性地址记录被读取,存储于数据域的扩展线性地址被保存,它被应用于从 Intel HEX 文件读取来的随后的记录

线性地址保持有效,直到它被另外一个扩展地址记录所改变

通过把记录当中的地址域与被移位的来自扩展线性地址记录的地址数据相加获得数据记录的绝对存储器地址

2.数据部分
Intel HEX 由任意数量的十六进制记录组成。每个记录包含 5 个域,它们按一定格式排列::llaaaatt[dd...]cc

每一组字母对应一个不同的域,每一个字母对应一个十六进制编码的数字

每一个域由至少两个十六进制编码数字组成,它们构成一个字节,就像以下描述的那样:

:llaaaatt[dd…]cc

内容    描述
:  每 个Intel HEX记录都由冒号开头
ll   数据长度域,它代表记录当中数据字节(dd)的数量
aaaa 地址域,它代表记录当中数据的起始地址
tt    代表HEX记录类型的域,它可能是以下数据当中的一个:00(数据记录)、01(文件结束                     记  录)、02(扩展段地址记录)、04(扩展线性地址记录)
dd 数据域,它代表一个字节的数据。一个记录可以有许多数据字节.记录当中数据字节的数量必须和数据长度域(ll)中指定的数字相符
cc 校验和域,它表示这个记录的校验和(校验和的计算是通过将记录当中所有十六进制编码数字对的值相加,以256为模进行以下补足)

                                                   
3.文件尾
在文件的最后一排,是一个文件的结束标志:

:00000001FF

内容  描述
00记录的长度为 0
0000 LOAD OFFSET为0000
01 TYPE = 01
FF 校验和为FF

三 总结 

在keil环境下进行STM32程序不是十分困难,但是如果没有进行学习也不会明白,而且在调试过程中还有一些问题未能明白,还需要更进一步努力。


四参考文献    
  
  Keil环境下创建STM32汇编语言工程并分析HEX文件内容_m0_58414679的博客-CSDN博客
  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值