在KEIL环境中真机模拟编写并调试一个简单的STM32程序

序、安装并配置KEIL

一:安装MDK

1.首先在官网下载KEIL安装包。
https://www.keil.com/download/product/.
2.下载完成之后找到安装包并点击程序。
在这里插入图片描述
2.点击Next。在这里插入图片描述

3.勾选同意,继续点击Next。
在这里插入图片描述

4.填写路径,继续点击Next。
在这里插入图片描述
5.填写信息,继续点击Next。
在这里插入图片描述
5.进入安装,中间出现插口安装提示也点击安装。

在这里插入图片描述
在这里插入图片描述
6.安装完成。
在这里插入图片描述
以为到这里就结束了吗?不!它还要注册(pojie不是:|)。

6.打开安装好的KEIL。(一定要以管理员身份运行!!!不然会出错!!!答应我一定要点击管理员身份运行!!!
在这里插入图片描述
7.在File下找到License Management并点击。
在这里插入图片描述
8.复制这个ID。
在这里插入图片描述
9.打开我们的注册(pojie)软件,将刚刚得到的ID贴上去,选择ARM,并Generate。
在这里插入图片描述
10.得到注册(pojie)码之后,复制它,将它贴到我们最开始得到ID的页面这个位置,并点击Add LIC。
在这里插入图片描述
11.这样就恭喜你成功注册(pojie)了KEIL。
在这里插入图片描述

二:支持包下载

下载地址:https://www.keil.com/dd2/pack/.(我下载的是Keil.STM32Flxx_DFP.2.1.0.pack)
1.找到下载得到的Keil.STM32Flxx_DFP.2.1.0.pack。
在这里插入图片描述
2.点击Next。(这里我已经下载过了。)
在这里插入图片描述
3.等待下载,之后finish。
在这里插入图片描述

一、编写STM32程序

一.新建工程

1.双击打开程序Keil uversion5,点击project菜单下的new uVersion Project。
在这里插入图片描述
2.命名文件并保存。
在这里插入图片描述
3.选择仿真芯片,我选的是STM32F103VE。
在这里插入图片描述
4.CMSIS 下在选项 CORE后打钩;Device 下 在选项后Startup(其中包含了启动文件)打钩,之后点击OK。

在这里插入图片描述
5.右击 Source Group 1 ,点击 Add New Item to Group ‘Source Group 1’…
在这里插入图片描述
6.选择文件类型,点击 Asm Files (.s) 添加汇编文件,然后输入文件名,并点击 Add。
在这里插入图片描述
然后你就可以看见它啦。
在这里插入图片描述

二.代码编写与调试

1.代码编写

在刚才新建的.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

2.程序编译

  1. 点击 Options for Target…,就是这个有点像魔法棒的东西。
    在这里插入图片描述
    3.点击output页面,勾选Create HEX File。
    在这里插入图片描述
    4.点击Debug页面,勾选Use Simulator,修改Dialog的设置如下图(答应我一定要修改!!!不然会出错!!!),之后点击OK。
    在这里插入图片描述

5.点击Rebuild进行编译。
在这里插入图片描述
看到这个就代表成功了!
在这里插入图片描述

3.程序调试

1.点击这个图标进入调试界面。
在这里插入图片描述
2.点击run运行程序。
在这里插入图片描述
3.进行调试,会发现得到的结果与预期的相符合,详情如图。
在这里插入图片描述

4.分析生成的HEX文件

1.找到生成的HEX文件,并打开。
在这里插入图片描述
我用的Notepad++,当然也可以用记事本。
在这里插入图片描述
在这里插入图片描述

2.扩展线性地址记录(hex 文件的第一排十六进制)也叫作 32 位地址记录或 HEX386 记录,这些记录包含数据地址的高 16 位。扩展线性地址记录总是有两个数据字节,外观如下(这里我通过标记方便对应原始数据):

:020000040800F2
字节段含义
02记录数据字节的数量
0000地址域,对于扩展线性地址记录,这个域总是 0000
04记录类型 04 (扩展线性地址记录)
0800是地址的高 16 位
F2是这个记录的校验和,计算方法:01h + NOT(02h + 00h + 00h + 04h + 08h + 00h)

当一个扩展线性地址记录被读取,存储于数据域的扩展线性地址被保存,它被应用于从 Intel HEX 文件读取来的随后的记录。线性地址保持有效,直到它被另外一个扩展地址记录所改变。通过把记录当中的地址域与被移位的来自扩展线性地址记录的地址数据相加获得数据记录的绝对存储器地址。

3.数据部分
Intel HEX 由任意数量的十六进制记录组成。每个记录包含 5 个域,它们按一定格式排列::llaaaatt[dd…]cc。每一组字母对应一个不同的域,每一个字母对应一个十六进制编码的数字。每一个域由至少两个十六进制编码数字组成,它们构成一个字节,就像以下描述的那样:

:llaaaatt[dd…]cc
字节段含义
:每个Intel HEX记录都由冒号开头
ll数据长度域,它代表记录当中数据字节(dd)的数量
aaaa地址域,它代表记录当中数据的起始地址
tt代表HEX记录类型的域,它可能是以下数据当中的一个:00(数据记录)、01(文件结束记录)、02(扩展段地址记录)、04(扩展线性地址记录)
dd数据域,它代表一个字节的数据。一个记录可以有许多数据字节.记录当中数据字节的数量必须和数据长度域(ll)中指定的数字相符
cc校验和域,它表示这个记录的校验和(校验和的计算是通过将记录当中所有十六进制编码数字对的值相加,以256为模进行以下补足)

3.文件尾
在文件的最后一排,是一个文件的结束标志:

:00000001FF
字节段含义
00记录的长度为 0
0000LOAD OFFSET为0000
01TYPE = 01
FF校验和为FF

三、总结

这个程序只是真机模拟STM32的程序,后期结合单片机应该可以玩出更多的新花样。这篇就这样,下篇再见~

四、参考资料

https://blog.youkuaiyun.com/m0_58414679/article/details/120467462?utm_source=app&app_version=4.15.0&code=app_1562916241&uLinkId=usr.
https://blog.youkuaiyun.com/u010632165/article/details/106481146.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值