本 文 内 容 : \color{red}{本文内容:} 本文内容:
1)记录build生成的 hex文件各段的大小,了解Hex文件格式及其前8个字节内容含义;2)学习在没有硬件条件下进行仿真调试的方法,观察ARM寄存器变化状况。
在keil环境下创建一个新的项目
1.安装Keil uVision5
①到官网点击下载可执行文件MDK536.EXE
②下载完成之后打开文件MDK536.EXE选择next
③继续选择next
④这里默认路径是在C盘,建议选择其他硬盘,路径不要包含中文
⑤这里的信息随便填就行了
之后等待安装完成点击finish就成功了
安装好之后需要使用keil的注册机破解一下,可以从百度网盘下载注册机
链接: https://pan.baidu.com/s/1Tvv8V5ExPS_txlHhViLa3g
提取码: 7nti
下载解压好之后打开这个可执行文件安装
打开之前安装好的IDE,选择这一项
复制这里的CID
然后打开
然后就会生成一段LIC
返回到IDE
2.新建项目
①点击
p
r
o
j
e
c
t
\color{blue}{ project }
project→
N
e
w
u
V
i
s
i
o
n
P
r
o
j
e
c
t
\color{blue}{New uVision Project}
NewuVisionProject 创建新项目
②设置一个文件名,我这里是创建了一个TEXT文件
③选择芯片,这里我选的是STM32F103VE
,然后点击OK④ARM 的 CMSIS
已经把开发所需要的软件组件都封装好了,因此直接选择即可—— CMSIS
下选择 CORE
;Device
下 Startup
(其中包含了启动文件)
⑤右击 Source Group 1
,点击 Add New Item to Group 'Source Group 1'
…
点击 Asm Files (.s)
添加汇编文件,然后输入文件名,并点击 Add
添加完成后如下:
3.添加源文件
①添加代码
在 Test.c
中添加如下的汇编代码
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
②仿真器设置
点击 魔法棒
,在 Output
界面下,勾选 Create HEX File
,才能生成 hex
文件
在“Debug
”选项卡中选择“Use Simulator
”,表示使用软件仿真;选择“Run to main()
”则表示跳过汇编代码,直接跳转到main函数开始仿真。设置下面的“Dialog DLL
”项为“DARMSTM.DLL
”和“TARMSTM.DLL
”;parameter
项为“-pSTM32F103C8
”,用于设置支持STM32F103C8
的软硬件仿真。
不勾选的话无法进行仿真
测试代码
编译运行
点击build
按钮
如果显示0 Error
就成功了
这里我第二次启动build的时候报了一个错
.\Objects\TEXT.axf: Error: L6967E: Entry point (0x08000000) points to a Thumb instruction but is not a valid Thumb code pointer.
查阅了资料后发现只需要在linker
选项里的misc controls
加入--entry Reset_Handler --first __Vectors
即可
再次build就成功了
仿真调试
点击这里进入仿真调试
可以看到,结果符合预期,寄存器R5,R6,R7,R8
的值和程序设置一致
参考文章:
1.https://www.geek-share.com/detail/2609233329.html
2.ARM汇编基础之基于MDK创建纯汇编语言的STM32工程
3.Keil环境下创建STM32汇编语言工程并分析HEX文件内容