前言
我们生活中处处都有单片机,可以说我们现在的生活是离不开单片机的,生活中的许多东西都需要单片机,比如说空调、冰箱、洗衣机、扫地机器人等等。今天我们就来学习一下ST公司的stm32单片机,学习keil环境下汇编语言的简单使用。
一、MDK环境的搭建
因为我之前就已经使用过keil-mdk
这个软件,以及配置好相关的环境,所以我这里就不说环境的搭建了,有需要的同学请自行在网上找教程,我也会提供软件百度网盘资源。
百度网盘链接 :
https://pan.baidu.com/s/17SjKkVAz1Lyboj48hefGLA
提取码:
keil
二、Keil下的第一个汇编工程
1、创建一个工程文件
1、建议在自己方便的目录下创建一个工程文件,以后所有的工程文件都放在这,方便移植和管理。
注意!
所有的目录不要带有中文路径,不然后面会有许多问题
2、新建工程
-
点击Project
-
New uVision Project
-
给工程取个名字保存在上面创建的工程文件夹下(不要有中文)
-
选择芯片型号,这里选择stm32c8t6
-
将CMSIS下的
CORE
和Device下的Startup
勾选上
3、添加工程.s
源文件 -
右击Source Group1添加文件
-
添加.s汇编文件
2、完成相关代码的编写
- 将以下代码写入.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
- 先编译一下,看是否有什么错误
可以看到,我们这里出现了一个错误,Undefined symbol main ……
通过我的检查,我发现我并没有把我创建的
.s
源文件添加到我的工程目录下,所以才会报错说没有定义main
函数,一定要仔细点。
- 在编译前其实我们应该对一些编译器的默认设置做一些修改
点击魔法棒,在Output中的的Create HEX File勾选上,这是生成hex文件的,hex文件也是最后烧写到单片机里面的可执行文件。
- 进行debug调试
三、HEX文件的分析
- 在我们的工程文件下找到hex文件,并用编辑器打开。
文件第一排
:020000040800F2
拓展线性地址记录
02 :记录数据字节的数量
0000 :扩展线性地址的记录,地址域
04 :记录类型 04
0800 :地址的高16位
F2 :记录的校验和
- hex文件末尾
00000001FF
00 : 记录的长度
0000 : Load offset为0000
01 : TYPE = 01
FF : 检验和为FF
总结
通过本次在keil下汇编语言的学习我觉得我还是挺有收获的,首先学会了一些比较简单的汇编语法,之前都没接触过汇编语言。其次,在这次的实验过程中我也有遇到一些问题,不过都是一些细节上的问题,比如说我创建的那个源文件刚开始没注意,并没有添加到工程文件中去,导致编译一直不通过,后面经过检查才发现,下次注意不要再犯就行了!