Keil环境下创建STM32汇编语言程序

搭建并配置Keil嵌入式开发环境,并完成一个STM32汇编程序的编写,记录build生成的hex文件各段大小,了解hex文件格式及其前8个字节内容含义

目录

一、新建工程

 二、搭建环境

 三、编写程序并运行

 四、仿真

五、分析生成的hex文件 

六、总结

七、参考文件


一、新建工程

点击菜单栏的project,在弹出的窗口点击New uVision Project

创建一个新工程 

 二、搭建环境

选择设备,这里我选择的是STM32F103ZET6

 选择运行环境

添加源文件

鼠标右键单击Source Group 1,选择Add New Ttem to Group  

 

选择Asm File (.s),创建汇编文件,并设置源文件的名称,点击保存  

 三、编写程序并运行

程序源代码如下

 点击rebuild运行结果如下

 

 四、仿真

仿真设置:在Debug选项中选择Use Simulator,表示使用软件仿真,设置下面的Dialog DLLDARMSTM.DLLTARMSTM.DLL,parameter下设置为-pSTM32F103C8,用于设置支持软件硬件仿真

仿真结果

五、分析生成的hex文件 

用记事本打开 hex 文件,都是一连串的十六进制

 

1.扩展线性地址记录

扩展线性地址记录(hex 文件的第一排十六进制)也叫作 32 位地址记录或 HEX386 记录
这些记录包含数据地址的高 16 位
扩展线性地址记录总是有两个数据字节

内容描述
020000040800F2
02这个记录当中数据字节的数量
0000地址域,对于扩展线性地址记录,这个域总是 0000
04记录类型 04 (扩展线性地址记录)
0800是地址的高 16 位
F2是这个记录的校验和,计算方法:01h + NOT(02h + 00h + 00h + 04h + 08h + 00h)
  • 当一个扩展线性地址记录被读取,存储于数据域的扩展线性地址被保存,它被应用于从 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校验和域,它表示这个记录的校验和

3.文件尾

  • 在文件的最后一排,是一个文件的结束标志
内容描述
:00000001FF
00记录的长度为 0
0000LOAD OFFSET为0000
01TYPE = 01
FF校验和为FF

六、总结

用keil创建了STM32汇编语言程序并运行成功,用keil进行了STM32的仿真,加深了对STM32的了解已及对hex文件的理解

七、参考文件

基于 MDK 创建 STM32 汇编语言工程并分析 HEX 文件内容_ssj925319的博客-CSDN博客icon-default.png?t=L892https://blog.csdn.net/ssj925319/article/details/111868500

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值