在这在这
- 一.创建新项目
- 二、编写汇编代码并运行
- 三、分析hex文件
- 四、总结
- 五、参考
一.创建新项目
keil5和其他软件不太一样,不是在file里创新项目,而是在project里
接下来就是创建项目,这里的名字是TEST
板子选择的是STM32F103RC
根据图勾选,选好之后直接ok就行了
二、编写汇编代码并运行
在source group里新建一个item
创建一个test.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
然后点击那个魔法棒进行仿真调试
选择debug界面,选择使用仿真调试,同时将Dialog.DLL和后面的Parameter改为DARMSTM.DLL和-pSTM32F103RC,Parameter里根据自己的设备来选
如果需要生成hex文件,需要在output里选上
然后后面就可以进行仿真调试,不过得先build一下,才能进行仿真调试,旁边的那个带红色d的按钮就是仿真调试
进入仿真调试界面后,可以点run直接运行,也可以一步一步的调试,由于这个程序到后面是一个死循环,不设置断点也是可以的,然后点一下run旁边的叉就可以得到结果了,而寄存器里的内容也与我们所写的代码能对上。
三、分析hex文件
看out put 的目录,去找里面的hex文件
文件大小为2kb:
文件内容如下:
如图,第一行的:020000040800F2中,可以看作是0x02 0x00 0x00 0x04 0x08 0x00 0xf2
第一个 0x02 为数据长度。
紧跟着后面的0x00 0x00 为地址。
再后面的0x04为数据类型,类型共分以下几类:
‘00’ Data Record//数据记录
‘01’ End of File Record//文件结束记录
‘02’ Extended Segment Address Record//扩展段地址记录
‘03’ Start Segment Address Record//开始段地址记录
‘04’ Extended Linear Address Record//扩展线性地址记录
‘05’ Start Linear Address Record//开始线性地址记录
然后,接着0x04后面的两个 0x08 0x00就是数据。
最后一个0xF2是校验码,效验码=0x100-累加和。
四、总结
keil5的仿真调试只需要选择仿真调试的那个按钮就可以了,不过下面的dll因为版本问题需要手动去更改一下,也出现过调试的时候卡在systeminit()函数里的,查了一下也是dll的问题,后面也是查了资料才知道是因为调用了标准库函数导致。
五、参考
基于MDK创建纯汇编语言的STM32工程——汇编实现LED闪烁
hex文件百度百科
STM32烧录后卡在SystemInit无法进入main函数的解决办法