一、新建项目
- 新建工程
- 命名工程,自定义工程目录
- 这里我选择的是 STM32F103C8 芯片,然后点击 OK
- ARM 的 CMSIS 已经把开发所需要的软件组件都封装好了,因此直接选择即可—— CMSIS 下选择 CORE;Device 下 Startup(其中包含了启动文件)
- 添加源文件
- 完成后
二、编写代码并编译
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
- 仿真器设置
先勾选上create HEX file 后面需对HEX文件内容进行分析 无板操作
开始我们选择build,然后start, 可以看到与预期相同也可进行设置断点,调试来观察寄存器的变化,自行完成。
三、分析生成的 hex 文件
-
hex文件在当前工程目录下Objects下 -
用记事本打开 -
什么是hex文件 它是由一行行符合Intel HEX 文件格式的文本所构成的ASCII 文本文件。每一行包含一 个 HEX 记录 ,由对应机器语言码和/或常量数据的十六进制编码数字组成。Hex文件通常用于传输将被存于ROM 或者EPROM 中的程序和数 据。大多数EPROM 编程器或模拟器使用Intel HEX 文件。Hex文件是可以烧写到单片机中,被单片机执行的一种文件格式,生成Hex文件的方式由很多种,可以通过不同的编译器将C程序或者汇编程序编译生成hex。 -
数据格式 Intel HEX 由任意数量的十六进制记录组成。每个记录包含5个域,每一组字母 对应一个不同的域,每一个字母对应一个十六进制编码的数字。每一个域由至少两个十六进制编码数字组成,它们构成一个字节。
其中第一行 :020000040800F2 中,可以看做是0x02 0x00 0x00 0x04 0x08 0x00 0xf2
第一个0×02表示该行数据中有两个数据
第二个,第三个0x00 0x00表示本行数据的起始地址位
第四个字节 0x04 表示扩展线性地址记录,对应上述的TT域
第五个、第六个 0x08 0x00表示数据字节,与**数据长度域(LL)**中对应,即第一个 0x02
最后一个字节0xf2为校验和。校验和= 0x100 - 累加和
|