一. 新建工程
1.1 工程创建
点击菜单栏的project->new uVision project
设置工程路径,点击保存
设备选择(本文基于STM32F103C8),如下图所示:
1.2 选择运行环境
CMSIS下选择CORE Device下选择Startup(其中包含启动文件)
1.3 添加源文件
右键点击Source Group,选择如下图所示 选择Asm File(.s),创建汇编文件,输入文件名,然后点击Add
1.4 最终结果
二. 测试代码
2.1 代码如下
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
2.2 仿真器设置(没有硬件条件下)
初始设置
想生成Hex文件,进行下图操作 因为没有硬件需要进行如下设置
2.3 代码运行
点击Rebuild进行编译
编译成功,没有错误
2.4 程序调试
结果如下: 动态调试:我们在代码最后一行设置断点(在数字左边点击一下),如下图所示
右击断点,选择如下:
最后得到如下结果:
三. 分析hex文件
文件位于创建的项目位置的Objects中 用记事本打开hex文件,具体如下:
官方定义: <0x3a>[数据长度1Byte][数据地址2Byte][数据类型1Byte][数据nByte][校验1Byte]<0x0d><0x0a>
例如第一行:
第一行:020000040800F2 断句02,0000,04,0800,F2。 也即0x02,0x00,0x00,0x04,0x08,0x00,0xF2。
“:” 对应格式中的<0x3a>,0x3a就是冒号的ASCII码。 “02”对应的就是长度,这里就如所见,就是长度为2。 “0000”对应数据地址,长度为2个字节。 “04”对应的数据类型。 “0800”对应的是数据,长度是浮动的,这里是2个字节,和前面的长度相呼应。 “F2”对应的是校验结果。 “”对应<0x0d><0x0a>,就是回车和换行,这个东西大家应该很熟悉,因为stm32串口发送例程中,串口数据的结束用的就是这两个符号做标识。
四. 参考文献
在keil上使用汇编语言创建STM32工程
|