一、新建项目
打开MDK ,选择Project 下的New uVision Project :
选择项目路径,设置工程名称:
选择相应芯片(本文选择STM32f103ZE ):
对于运行环境,选择CMSIS 下的CORE 和Device 下的Startup :
二、编写程序
右键单击Source Group 1 ,选择Add New Item to Group :
选择.s 文件并设置名称:
编写代码:
AREA MYDATA, DATA
AREA MYCODE, CODE
ENTRY
EXPORT __main
__main
MOV R0,
MOV R1,
MOV R2,
MOV R3,
;LDR R0, =func01
BL func01
;LDR R1, =func02
BL func02
BL func03
LDR LR, =func01
LDR PC, =func03
B .
func01
MOV R5,
BX LR
func02
MOV R6,
BX LR
func03
MOV R7,
MOV R8,
BX LR
三、调试
选择魔法棒 ,勾选OutPut 下的Create HEX File :
选择Debug 下的Use Simulator ,将左下角的Dialog DLL 中的内容改为DARMSTM.DLL ,将Parameter 的内容改为-pSTM32F103C8 :
编译工程并调试程序:
调试结果: 可看到,上图调试结果中,寄存器R5 ,R6 ,R7 ,R8 的值和程序一致。
四、分析生成的HEX文件
打开项目下生成的HEX文件:
1. 文件定义
hex文件格式是可以烧写到单片机中,被单片机执行的一种文件格式,生成Hex文件的方式有很多种,可以通过不同的编译器将C程序或者汇编程序编译生成hex。
2. 数据表示
- 第一个字节 0x02表示本行数据的长度;
- 第二、三字节 0x00 0x00表示本行数据的起始地址;
- 第四字节 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为校验和。
五、总结
本次在Keil5仿真程序的编写遇到了许多问题,对Keil编程还不熟练,需要加强练习。
参考
ARM汇编基础之基于MDK创建纯汇编语言的STM32工程 基于 MDK 创建 STM32 汇编语言工程并分析 HEX 文件内容 STM32基于汇编方式创建工程文件和闪烁LED灯 基于MDK创建纯汇编语言的STM32工程——汇编实现LED闪烁 hex文件说明 Keil环境下创建STM32汇编语言工程并分析HEX文件内容
|