搭建并配置Keil嵌入式开发环境,完成一个基于STM32汇编程序的编写。
准备
安装并配置KEIL
1)在官网下载KEIL安装包。https://www.keil.com/download/product/. 安装教程参考博客 https://blog.csdn.net/dengjin20104042056/article/details/108057907 安装注册并下载支持包之后就可以编写程序了。
编写程序并调试分析
1.新建工程
-
照如图顺序新建工程 -
新建文件 -
这里选择STM32F103VE
4) 点击 Asm Files (.s) 添加输入文件名
5) 完成!
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
- 点击这个魔棒
- 在output中选中
-
在debug中修改 -
rebuild编译
- tips:这里可能会出现问题
Target not creat. 解决方法:打开魔术棒,在target栏找到ARM Compiler,将默认的Use default conpiler version 6改为version 5。
- 然后重新编译,出现这个就没有错误了
3.程序调试
-
run 得到 -
调试得到的结果为 -
分析生成的HEX文件 在生成时选定的文件夹里找到 -
用记事本打开
- 扩展线性地址记录:020000040800F2
- 扩展线性地址记录(hex 文件的第一排十六进制)也叫作 32 位地址记录或 HEX386 记录
- 这些记录包含数据地址的高 16 位
- 扩展线性地址记录总是有两个数据字节,外观如下
- 当一个扩展线性地址记录被读取,存储于数据域的扩展线性地址被保存,它被应用于从 Intel HEX 文件读取来的随后的记录
- 线性地址保持有效,直到它被另外一个扩展地址记录所改变
- 通过把记录当中的地址域与被移位的来自扩展线性地址记录的地址数据相加获得数据记录的绝对存储器地址
内容 | 描述 |
---|
020000040800F2 | 扩展线性地址记录 | 02 | 记录当中数据字节的数量 | 0000 | 地址域,对于扩展线性地址记录,这个域总是 0000 | 04 | 记录类型 04 (扩展线性地址记录) | 0800 | 是地址的高 16 位 | F2 | 是记录的校验和,计算方法:01h + NOT(02h + 00h + 00h + 04h + 08h + 00h) |
- 内容分析:数据记录
- Intel HEX文件由任意数量以回车换行符结束的数据记录组成,比如第一行数据记录:
- 1000000000040020ED000008F5000008F7000008DB
内容 | 描述 |
---|
00 | 记录的长度为 0 | 0000 | LOAD OFFSET为0000 | 01 | TYPE = 01 | FF | 校验和为FF |
- 内容分析:文件尾
- 在文件的最后一排,是一个文件的结束标志(END OF FILE RECORD)::00000001FF
内容 | 描述 |
---|
10 | 记录当中数据字节的数量 | 0000 | 数据将被下载到存储器当中的地址 | 00 | 记录类型(数据记录) | 04 | 记录类型 04 (扩展线性地址记录) | 00040020ED000008F5000008F7000008 | 数据 | DB | 是记录的校验和 |
总结
这次作业的过程遭遇了很多的问题,从一开始的安装注册到后来的编译,在老师给的博客、同学的帮助以及自己去搜索也是慢慢解决了这些问题,希望在以后的学习中能够对单片机越来越熟练。
参考资料
https://blog.csdn.net/ChenJ_1012/article/details/120520933
|